diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 53ac20f5d91..0d4bab29f12 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -211,7 +211,7 @@ if(ENABLE_TESTING) endif(ENABLE_TESTING) set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR - KSPACE MANYBODY MC MEAM MISC MOLECULE PERI REAX REPLICA RIGID SHOCK SPIN SNAP + KSPACE MANYBODY MC MEAM MESSAGE MISC MOLECULE PERI REAX REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI POEMS LATTE USER-ATC USER-AWPMD 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 @@ -504,6 +504,39 @@ if(PKG_KIM) include_directories(${KIM_INCLUDE_DIRS}) endif() +if(PKG_MESSAGE) + option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF) + file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/*.F + ${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() + + if(BUILD_MPI) + target_compile_definitions(cslib PRIVATE -DMPI_YES) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") + else() + target_compile_definitions(cslib PRIVATE -DMPI_NO) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") + endif() + + if(MESSAGE_ZMQ) + target_compile_definitions(cslib PRIVATE -DZMQ_YES) + find_package(ZMQ REQUIRED) + target_include_directories(cslib PRIVATE ${ZMQ_INCLUDE_DIRS}) + target_link_libraries(cslib PUBLIC ${ZMQ_LIBRARIES}) + else() + target_compile_definitions(cslib PRIVATE -DZMQ_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ) + endif() + + list(APPEND LAMMPS_LINK_LIBS cslib) + include_directories(${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src) +endif() + if(PKG_MSCG) find_package(GSL REQUIRED) option(DOWNLOAD_MSCG "Download latte (instead of using the system's one)" OFF) @@ -1200,7 +1233,7 @@ endif() ############################################################################### # Print package summary ############################################################################### -foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) +foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) if(PKG_${PKG}) message(STATUS "Building package: ${PKG}") endif() diff --git a/cmake/Modules/FindZMQ.cmake b/cmake/Modules/FindZMQ.cmake new file mode 100644 index 00000000000..608ccda7773 --- /dev/null +++ b/cmake/Modules/FindZMQ.cmake @@ -0,0 +1,8 @@ +find_path(ZMQ_INCLUDE_DIR zmq.h) +find_library(ZMQ_LIBRARY NAMES zmq) + +set(ZMQ_LIBRARIES ${ZMQ_LIBRARY}) +set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ZMQ DEFAULT_MSG ZMQ_LIBRARY ZMQ_INCLUDE_DIR) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 088ffd8972f..1e3744b7fbb 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -31,6 +31,7 @@ This is the list of packages that may require additional steps. "KOKKOS"_#kokkos, "LATTE"_#latte, "MEAM"_#meam, +"MESSAGE"_#message, "MSCG"_#mscg, "OPT"_#opt, "POEMS"_#poems, @@ -361,6 +362,10 @@ make lib-meam args="-m mpi" # build with default Fortran compiler compatible make lib-meam args="-m serial" # build with compiler compatible with "make serial" (GNU Fortran) make lib-meam args="-m ifort" # build with Intel Fortran compiler using Makefile.ifort :pre +NOTE: You should test building the MEAM library with both the Intel +and GNU compilers to see if a simulation runs faster with one versus +the other on your system. + The build should produce two files: lib/meam/libmeam.a and lib/meam/Makefile.lammps. The latter is copied from an existing Makefile.lammps.* and has settings needed to link C++ (LAMMPS) with @@ -373,6 +378,35 @@ file. :line +MESSAGE package :h4,link(message) + +This package can optionally include support for messaging via sockets, +using the open-source "ZeroMQ library"_http://zeromq.org, which must +be installed on your system. + +[CMake build]: + +-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes + +[Traditional make]: + +Before building LAMMPS, you must build the CSlib library in +lib/message. You can build the CSlib library manually if you prefer; +follow the instructions in lib/message/README. You can also do it in +one step from the lammps/src dir, using a command like these, which +simply invoke the lib/message/Install.py script with the specified args: + +make lib-message # print help message +make lib-message args="-m -z" # build with MPI and socket (ZMQ) support +make lib-message args="-s" # build as serial lib with no ZMQ support + +The build should produce two files: lib/message/cslib/src/libmessage.a +and lib/message/Makefile.lammps. The latter is copied from an +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 diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index 4f71e9eb180..aaa340f3024 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -42,6 +42,7 @@ packages: "KOKKOS"_Build_extras.html#kokkos, "LATTE"_Build_extras.html#latte, "MEAM"_Build_extras.html#meam, +"MESSAGE"_#Build_extras.html#message, "MSCG"_Build_extras.html#mscg, "OPT"_Build_extras.html#opt, "POEMS"_Build_extras.html#poems, diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index aec5a9db8b7..6f54681342b 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -71,6 +71,7 @@ An alphabetic list of all LAMMPS commands. "lattice"_lattice.html, "log"_log.html, "mass"_mass.html, +"message"_message.html, "minimize"_minimize.html, "min_modify"_min_modify.html, "min_style"_min_style.html, @@ -103,6 +104,7 @@ An alphabetic list of all LAMMPS commands. "restart"_restart.html, "run"_run.html, "run_style"_run_style.html, +"server"_server.html, "set"_set.html, "shell"_shell.html, "special_bonds"_special_bonds.html, diff --git a/doc/src/Howto.txt b/doc/src/Howto.txt index 438ea561a10..730b492699d 100644 --- a/doc/src/Howto.txt +++ b/doc/src/Howto.txt @@ -54,6 +54,7 @@ General howto :h3 Howto_replica Howto_library Howto_couple + Howto_client_server END_RST --> @@ -64,7 +65,8 @@ END_RST --> "Run multiple simulations from one input script"_Howto_multiple.html "Multi-replica simulations"_Howto_replica.html "Library interface to LAMMPS"_Howto_library.html -"Couple LAMMPS to other codes"_Howto_couple.html :all(b) +"Couple LAMMPS to other codes"_Howto_couple.html +"Using LAMMPS in client/server mode"_Howto_client_server.html :all(b) diff --git a/doc/src/Howto_client_server.txt b/doc/src/Howto_client_server.txt new file mode 100644 index 00000000000..714c23f0669 --- /dev/null +++ b/doc/src/Howto_client_server.txt @@ -0,0 +1,131 @@ +"Higher level section"_Howto.html - "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 + +Using LAMMPS in client/server mode + +Client/server coupling of two codes is where one code is the "client" +and sends request messages to a "server" code. The server responds to +each request with a reply message. This enables the two codes to work +in tandem to perform a simulation. LAMMPS can act as either a client +or server code. + +Some advantages of client/server coupling are that the two codes run +as stand-alone executables; they are not linked together. Thus +neither code needs to have a library interface. This often makes it +easier to run the two codes on different numbers of processors. If a +message protocol (format and content) is defined for a particular kind +of simulation, then in principle any code that implements the +client-side protocol can be used in tandem with any code that +implements the server-side protocol, without the two codes needing to +know anything more specific about each other. + +A simple example of client/server coupling is where LAMMPS is the +client code performing MD timestepping. Each timestep it sends a +message to a server quantum code containing current coords of all the +atoms. The quantum code computes energy and forces based on the +coords. It returns them as a message to LAMMPS, which completes the +timestep. + +Alternate methods for code coupling with LAMMPS are described on +the "Howto couple"_Howto_couple.html doc page. + +LAMMPS support for client/server coupling is in its "MESSAGE +package"_Packages_details.html#PKG-MESSAGE which implements several +commands that enable LAMMPS to act as a client or server, as discussed +below. The MESSAGE package also wraps a client/server library called +CSlib which enables two codes to exchange messages in different ways, +either via files, sockets, or MPI. The CSlib is provided with LAMMPS +in the lib/message dir. The CSlib has its own +"website"_http://cslib.sandia.gov with documentation and test +programs. + +NOTE: For client/server coupling to work between LAMMPS and another +code, the other code also has to use the CSlib. This can sometimes be +done without any modifications to the other code by simply wrapping it +with a Python script that exchanges CSlib messages with LAMMPS and +prepares input for or processes output from the other code. The other +code also has to implement a matching protocol for the format and +content of messages that LAMMPS exchanges with it. + +These are the commands currently in the MESSAGE package for two +protocols, MD and MC (Monte Carlo). New protocols can easily be +defined and added to this directory, where LAMMPS acts as either the +client or server. + +"message"_message.html +"fix client md"_fix_client_md.html = LAMMPS is a client for running MD +"server md"_server_md.html = LAMMPS is a server for computing MD forces +"server mc"_server_mc.html = LAMMPS is a server for computing a Monte Carlo energy + +The server doc files give details of the message protocols +for data that is exchanged bewteen the client and server. + +These example directories illustrate how to use LAMMPS as either a +client or server code: + +examples/message +examples/COUPLE/README +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. + +The lammps_mc dir shows how to couple LAMMPS as a server to a simple +Monte Carlo client code as the driver. + +The lammps_vasp dir shows how to couple LAMMPS as a client code +running MD timestepping to VASP acting as a server providing quantum +DFT forces, thru a Python wrapper script on VASP. + +Here is how to launch a client and server code together for any of the +4 modes of message exchange that the "message"_message.html command +and the CSlib support. Here LAMMPS is used as both the client and +server code. Another code could be subsitituted for either. + +The examples below show launching both codes from the same window (or +batch script), using the "&" character to launch the first code in the +background. For all modes except {mpi/one}, you could also launch the +codes in separate windows on your desktop machine. It does not +matter whether you launch the client or server first. + +In these examples either code can be run on one or more processors. +If running in a non-MPI mode (file or zmq) you can launch a code on a +single processor without using mpirun. + +IMPORTANT: If you run in mpi/two mode, you must launch both codes via +mpirun, even if one or both of them runs on a single processor. This +is so that MPI can figure out how to connect both MPI processes +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 2 lmp_mpi -log log.server < in.server :pre + +% 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 4 lmp_mpi -log log.server < in.server :pre + +For message exchange in {mpi/one} mode: + +Launch both codes in a single mpirun command: + +mpirun -np 2 lmp_mpi -mpicolor 0 -in in.message.client -log log.client : -np 4 lmp_mpi -mpicolor 1 -in in.message.server -log log.server + +The two -np values determine how many procs the client and the server +run on. + +A LAMMPS executable run in this manner must use the -mpicolor color +command-line option as their its option, where color is an integer +label that will be used to distinguish one executable from another in +the multiple executables that the mpirun command launches. In this +example the client was colored with a 0, and the server with a 1. diff --git a/doc/src/Howto_couple.txt b/doc/src/Howto_couple.txt index d7b4924d8cd..0214db1ecec 100644 --- a/doc/src/Howto_couple.txt +++ b/doc/src/Howto_couple.txt @@ -16,10 +16,12 @@ atoms and pass those forces to LAMMPS. Or a continuum finite element nodal points, compute a FE solution, and return interpolated forces on MD atoms. -LAMMPS can be coupled to other codes in at least 3 ways. Each has +LAMMPS can be coupled to other codes in at least 4 ways. Each has advantages and disadvantages, which you'll have to think about in the context of your application. +:line + (1) Define a new "fix"_fix.html command that calls the other code. In this scenario, LAMMPS is the driver code. During its timestepping, the fix is invoked, and can make library calls to the other code, @@ -32,6 +34,8 @@ LAMMPS. :link(poems,http://www.rpi.edu/~anderk5/lab) +:line + (2) Define a new LAMMPS command that calls the other code. This is conceptually similar to method (1), but in this case LAMMPS and the other code are on a more equal footing. Note that now the other code @@ -52,6 +56,8 @@ command writes and reads. See the "Modify command"_Modify_command.html doc page for info on how to add a new command to LAMMPS. +:line + (3) Use LAMMPS as a library called by another code. In this case the other code is the driver and calls LAMMPS as needed. Or a wrapper code could link and call both LAMMPS and another code as libraries. @@ -102,3 +108,9 @@ on all the processors. Or it might allocate half the processors to LAMMPS and half to the other code and run both codes simultaneously before syncing them up periodically. Or it might instantiate multiple instances of LAMMPS to perform different calculations. + +:line + +(4) Couple LAMMPS with another code in a client/server mode. This is +described on the "Howto client/server"_Howto_client_server.html doc +page. diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 381dc2e9958..a4ed1e3ff4f 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -549,10 +549,6 @@ This package has "specific installation instructions"_Build_extras.html#gpu on the "Build extras"_Build_extras.html doc page. -NOTE: You should test building the MEAM library with both the Intel -and GNU compilers to see if a simulation runs faster with one versus -the other on your system. - [Supporting info:] src/MEAM: filenames -> commands @@ -563,6 +559,31 @@ examples/meam :ul :line +MESSAGE package :link(PKG-MESSAGE),h4 + +[Contents:] + +Commands to use LAMMPS as either a client or server and couple it to +another application. + +[Install:] + +This package has "specific installation +instructions"_Build_extras.html#message on the "Build +extras"_Build_extras.html doc page. + +[Supporting info:] + +src/MESSAGE: filenames -> commands +lib/message/README +"message"_message.html +"fix client/md"_fix_client_md.html +"server md"_server_md.html +"server mc"_server_mc.html +examples/message :ul + +:line + MISC package :link(PKG-MISC),h4 [Contents:] diff --git a/doc/src/Packages_standard.txt b/doc/src/Packages_standard.txt index 2feb4e142d3..583ecf39fe3 100644 --- a/doc/src/Packages_standard.txt +++ b/doc/src/Packages_standard.txt @@ -47,6 +47,7 @@ Package, Description, Doc page, Example, Library "MANYBODY"_Packages_details.html#PKG-MANYBODY, many-body potentials, "pair_style tersoff"_pair_tersoff.html, shear, no "MC"_Packages_details.html#PKG-MC, Monte Carlo options, "fix gcmc"_fix_gcmc.html, n/a, no "MEAM"_Packages_details.html#PKG-MEAM, modified EAM potential, "pair_style meam"_pair_meam.html, meam, int +"MESSAGE"_Packages_details.html#PKG-MESSAGE, client/server messaging, "message"_message.html, message, int "MISC"_Packages_details.html#PKG-MISC, miscellaneous single-file commands, n/a, no, no "MOLECULE"_Packages_details.html#PKG-MOLECULE, molecular system force fields, "Howto bioFF"_Howto_bioFF.html, peptide, no "MPIIO"_Packages_details.html#PKG-MPIIO, MPI parallel I/O dump and restart, "dump"_dump.html, n/a, no diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index 9c862d7b8ec..27f436ed55e 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -18,6 +18,7 @@ letter abbreviation can be used: "-i or -in"_#file "-k or -kokkos"_#run-kokkos "-l or -log"_#log +"-m or -mpicolor"_#mpicolor "-nc or -nocite"_#nocite "-pk or -package"_#package "-p or -partition"_#partition @@ -175,6 +176,30 @@ Option -plog will override the name of the partition log files file.N. :line +[-mpicolor] color :link(mpi) + +If used, this must be the first command-line argument after the LAMMPS +executable name. It is only used when LAMMPS is launched by an mpirun +command which also launches another executable(s) at the same time. +(The other executable could be LAMMPS as well.) The color is an +integer value which should be different for each executable (another +application may set this value in a different way). LAMMPS and the +other executable(s) perform an MPI_Comm_split() with their own colors +to shrink the MPI_COMM_WORLD communication to be the subset of +processors they are actually running on. + +Currently, this is only used in LAMMPS to perform client/server +messaging with another application. LAMMPS can act as either a client +or server (or both). More details are given on the "Howto +client/server"_Howto_client_server.html doc page. + +Specifically, this refers to the "mpi/one" mode of messaging provided +by the "message"_message.html command and the CSlib library LAMMPS +links with from the lib/message directory. See the +"message"_message.html command for more details. + +:line + [-nocite] :link(nocite) Disable writing the log.cite file which is normally written to list diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index 62b973e3a4f..8fae57a718f 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -56,6 +56,7 @@ Commands :h1 lattice log mass + message min_modify min_style minimize @@ -87,6 +88,7 @@ Commands :h1 restart run run_style + server set shell special_bonds diff --git a/doc/src/fix_client_md.txt b/doc/src/fix_client_md.txt new file mode 100644 index 00000000000..5b62d5617d5 --- /dev/null +++ b/doc/src/fix_client_md.txt @@ -0,0 +1,106 @@ +"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 client/md command :h3 + +[Syntax:] + +fix ID group-ID client/md :pre + +ID, group-ID are documented in "fix"_fix.html command +client/md = style name of this fix command :ul + +[Examples:] + +fix 1 all client/md :pre + +[Description:] + +This fix style enables LAMMPS to run as a "client" code and +communicate each timestep with a separate "server" code to perform an +MD simulation together. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When using this fix, LAMMPS (as the client code) passes the current +coordinates of all particles to the server code each timestep, which +computes their interaction, and returns the energy, forces, and virial +for the interacting particles to LAMMPS, so it can complete the +timestep. + +The server code could be a quantum code, or another classical MD code +which encodes a force field (pair_style in LAMMPS lingo) which LAMMPS +does not have. In the quantum case, this fix is a mechanism for +running {ab initio} MD with quantum forces. + +The group associated with this fix is ignored. + +The protocol and "units"_units.html for message format and content +that LAMMPS exchanges with the server code is defined on the "server +md"_server_md.html doc page. + +Note that when using LAMMPS as an MD client, your LAMMPS input script +should not normally contain force field commands, like a +"pair_style"_doc/pair_style.html, "bond_style"_doc/bond_style.html, or +"kspace_style"_kspace_style.html commmand. However it is possible for +a server code to only compute a portion of the full force-field, while +LAMMPS computes the remaining part. Your LAMMPS script can also +specify boundary conditions or force constraints in the usual way, +which will be added to the per-atom forces returned by the server +code. + +See the examples/message dir for example scripts where LAMMPS is both +the "client" and/or "server" code for this kind of client/server MD +simulation. The examples/message/README file explains how to launch +LAMMPS and another code in tandem to perform a coupled simulation. + +:line + +[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 potential energy computed by the server application to +the system's potential energy as part of "thermodynamic +output"_thermo_style.html. + +The "fix_modify"_fix_modify.html {virial} option is supported by this +fix to add the server application's contribution to the system's +virial as part of "thermodynamic output"_thermo_style.html. The +default is {virial yes} + +This fix computes a global scalar which can be accessed by various +"output commands"_Howto_output.html. The scalar is the potential +energy discussed above. The scalar value calculated by this fix is +"extensive". + +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 MESSAGE package. It is only enabled if LAMMPS +was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +A script that uses this command must also use the +"message"_message.html command to setup the messaging protocol with +the other server code. + +[Related commands:] + +"message"_message.html, "server"_server.html + +[Default:] none diff --git a/doc/src/lammps.book b/doc/src/lammps.book index c296ff4039e..72a07945e7a 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -167,6 +167,7 @@ label.html lattice.html log.html mass.html +message.html min_modify.html min_style.html minimize.html @@ -194,6 +195,9 @@ reset_timestep.html restart.html run.html run_style.html +server.html +server_mc.html +server_md.html set.html shell.html special_bonds.html @@ -241,6 +245,7 @@ fix_bond_create.html fix_bond_react.html fix_bond_swap.html fix_box_relax.html +fix_client_md.html fix_cmap.html fix_colvars.html fix_controller.html diff --git a/doc/src/message.txt b/doc/src/message.txt new file mode 100644 index 00000000000..cca1a5b369f --- /dev/null +++ b/doc/src/message.txt @@ -0,0 +1,162 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Command_all.html) + +:line + +message command :h3 + +[Syntax:] + +message which protocol mode arg :pre + +which = {client} or {server} :ulb,l +protocol = {md} or {mc} :l +mode = {file} or {zmq} or {mpi/one} or {mpi/two} :l + {file} arg = filename + filename = file used for message exchanges + {zmq} arg = socket-ID + socket-ID for client = localhost:5555, see description below + 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 +:ule + +[Examples:] + +message client md file tmp.couple +message server md file tmp.couple :pre + +message client md zmq localhost:5555 +message server md zmq *:5555 :pre + +message client md mpi/one +message server md mpi/one :pre + +message client md mpi/two tmp.couple +message server md mpi/two tmp.couple :pre + +[Description:] + +Establish a messaging protocol between LAMMPS and another code for the +purpose of client/server coupling. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +:line + +The {which} argument defines LAMMPS to be the client or the server. + +:line + +The {protocol} argument defines the format and content of messages +that will be exchanged between the two codes. The current options +are: + +md = run dynamics with another code +mc = perform Monte Carlo moves with another code :ul + +For protocol {md}, LAMMPS can be either a client or server. See the +"server md"_server_md.html doc page for details on the protocol. + +For protocol {mc}, LAMMPS can be the server. See the "server +mc"_server_mc.html doc page for details on the protocol. + +:line + +The {mode} argument specifies how messages are exchanged between the +client and server codes. Both codes must use the same mode and use +consistent parameters. + +For mode {file}, the 2 codes communicate via binary files. They must +use the same filename, which is actually a file prefix. Several files +with that prefix will be created and deleted as a simulation runs. +The filename can include a path. Both codes must be able to access +the path/file in a common filesystem. + +For mode {zmq}, the 2 codes communicate via a socket on the server +code's machine. Support for socket messaging is provided by the +open-source "ZeroMQ library"_http://zeromq.org, which must be +installed on your system. The client specifies an IP address (IPv4 +format) or the DNS name of the machine the server code is running on, +followed by a 4-digit port ID for the socket, separated by a colon. +E.g. + +localhost:5555 # client and server running on same machine +192.168.1.1:5555 # server is 192.168.1.1 +deptbox.uni.edu:5555 # server is deptbox.uni.edu :pre + +The server specifes "*:5555" where "*" represents all available +interfaces on the server's machine, and the port ID must match +what the client specifies. + +NOTE: What are allowed port IDs? + +NOTE: Additional explanation is needed here about how to use the {zmq} +mode on a parallel machine, e.g. a cluster with many nodes. + +For mode {mpi/one}, the 2 codes communicate via MPI and are launched +by the same mpirun command, e.g. with this syntax for OpenMPI: + +mpirun -np 2 lmp_mpi -mpicolor 0 -in in.client -log log.client : -np 4 othercode args # LAMMPS is client +mpirun -np 2 othercode args : -np 4 lmp_mpi -mpicolor 1 -in in.server # LAMMPS is server :pre + +Note the use of the "-mpicolor color" command-line argument with +LAMMPS. See the "command-line args"_Run_options.html doc page for +further explanation. + +For mode {mpi/two}, the 2 codes communicate via MPI, but are launched +be 2 separate mpirun commands. The specified {filename} argument is a +file the 2 MPI processes will use to exchange info so that an MPI +inter-communicator can be established to enable the 2 codes to send +MPI messages to each other. Both codes must be able to access the +path/file in a common filesystem. + +:line + +Normally, the message command should be used at the top of a LAMMPS +input script. It performs an initial handshake with the other code to +setup messaging and to verify that both codes are using the same +message protocol and mode. Assuming both codes are launched at +(nearly) the same time, the other code should perform the same kind of +initialization. + +If LAMMPS is the client code, it will begin sending messages when a +LAMMPS client command begins its operation. E.g. for the "fix +client/md"_fix_client_md.html command, it is when a "run"_run.html +command is executed. + +If LAMMPS is the server code, it will begin receiving messages when +the "server"_server.html command is invoked. + +A fix client command will terminate its messaging with the server when +LAMMPS ends, or the fix is deleted via the "unfix"_unfix command. The +server command will terminate its messaging with the client when the +client signals it. Then the remainder of the LAMMPS input script will +be processed. + +If both codes do something similar, this means a new round of +client/server messaging can be initiated after termination by re-using +a 2nd message command in your LAMMPS input script, followed by a new +fix client or server command. + +:line + +[Restrictions:] + +This command is part of the MESSAGE 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:] + +"server"_server.html, "fix client/md"_fix_client_md.html + +[Default:] none diff --git a/doc/src/server.txt b/doc/src/server.txt new file mode 100644 index 00000000000..86fb68d0129 --- /dev/null +++ b/doc/src/server.txt @@ -0,0 +1,71 @@ +"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 + +server command :h3 + +[Syntax:] + +server protocol :pre + +protocol = {md} or {mc} :ul + +[Examples:] + +server md :pre + +[Description:] + +This command starts LAMMPS running in "server" mode, where it receives +messages from a separate "client" code and responds by sending a reply +message back to the client. The specified {protocol} determines the +format and content of messages LAMMPS expects to receive and how it +responds. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When this command is invoked, LAMMPS will run in server mode in an +endless loop, waiting for messages from the client code. The client +signals when it is done sending messages to LAMMPS, at which point the +loop will exit, and the remainder of the LAMMPS script will be +processed. + +The {protocol} argument defines the format and content of messages +that will be exchanged between the two codes. The current options +are: + +"md"_server_md.html = run dynamics with another code +"mc"_server_mc.html = perform Monte Carlo moves with another code :ul + +For protocol {md}, LAMMPS can be either a client (via the "fix +client/md"_fix_client_md.html command) or server. See the "server +md"_server_md.html doc page for details on the protocol. + +For protocol {mc}, LAMMPS can be the server. See the "server +mc"_server_mc.html doc page for details on the protocol. + +:line + +[Restrictions:] + +This command is part of the MESSAGE package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +A script that uses this command must also use the +"message"_message.html command to setup the messaging protocol with +the other client code. + +[Related commands:] + +"message"_message.html, "fix client/md"_fix_client_md.html + +[Default:] none diff --git a/doc/src/server_mc.txt b/doc/src/server_mc.txt new file mode 100644 index 00000000000..53ccfc8ecd4 --- /dev/null +++ b/doc/src/server_mc.txt @@ -0,0 +1,116 @@ +"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 + +server mc command :h3 + +[Syntax:] + +server mc :pre + +mc = the protocol argument to the "server"_server.html command + +[Examples:] + +server mc :pre + +[Description:] + +This command starts LAMMPS running in "server" mode, where it will +expect messages from a separate "client" code that match the {mc} +protocol for format and content explained below. For each message +LAMMPS receives it will send a message back to the client. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When this command is invoked, LAMMPS will run in server mode in an +endless loop, waiting for messages from the client code. The client +signals when it is done sending messages to LAMMPS, at which point the +loop will exit, and the remainder of the LAMMPS script will be +processed. + +The "server"_server.html doc page gives other options for using LAMMPS +See an example of how this command is used in +examples/COUPLE/lammps_mc/in.server. + +:line + +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. + +The MC driver performs the random displacements on random atoms, +accepts or rejects the move in an MC sense, and orchestrates the MD +runs. + +The format and content of the exchanged messages are explained here in +a conceptual sense. Python-style pseudo code for the library calls to +the CSlib is shown, which performs the actual message exchange between +the two codes. See the "CSlib website"_http://cslib.sandia.gov doc +pages for more details on the actual library syntax. The "cs" object +in this pseudo code is a pointer to an instance of the CSlib. + +See the src/MESSAGE/server_mc.cpp file for details on how LAMMPS uses +these messages. See the examples/COUPLE/lammmps_mc/mc.cpp file for an +example of how an MC driver code can use these messages. + +Let NATOMS=1, EINIT=2, DISPLACE=3, ACCEPT=4, RUN=5. + +[Client sends one of these kinds of message]: + +cs->send(NATOMS,0) # msgID = 1 with no fields :pre + +cs->send(EINIT,0) # msgID = 2 with no fields :pre + +cs->send(DISPLACE,2) # msgID = 3 with 2 fields +cs->pack_int(1,ID) # 1st field = ID of atom to displace +cs->pack(2,3,xnew) # 2nd field = new xyz coords of displaced atom :pre + +cs->send(ACCEPT,1) # msgID = 4 with 1 field +cs->pack_int(1,flag) # 1st field = accept/reject flag :pre + +cs->send(RUN,1) # msgID = 5 with 1 field +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->pack_int(1,natoms) # 1st field = number of atoms :pre + +cs->send(EINIT,2) # msgID = 2 with 2 fields +cs->pack_double(1,poteng) # 1st field = potential energy of system +cs->pack(2,3*natoms,x) # 2nd field = 3N coords of Natoms :pre + +cs->send(DISPLACE,1) # msgID = 3 with 1 field +cs->pack_double(1,poteng) # 1st field = new potential energy of system :pre + +cs->send(ACCEPT,0) # msgID = 4 with no fields + +cs->send(RUN,0) # msgID = 5 with no fields + +:line + +[Restrictions:] + +This command is part of the MESSAGE package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +A script that uses this command must also use the +"message"_message.html command to setup the messaging protocol with +the other client code. + +[Related commands:] + +"message"_message.html + +[Default:] none diff --git a/doc/src/server_md.txt b/doc/src/server_md.txt new file mode 100644 index 00000000000..0db7bbe16b9 --- /dev/null +++ b/doc/src/server_md.txt @@ -0,0 +1,147 @@ +"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 + +server md command :h3 + +[Syntax:] + +server md :pre + +md = the protocol argument to the "server"_server.html command + +[Examples:] + +server md :pre + +[Description:] + +This command starts LAMMPS running in "server" mode, where it will +expect messages from a separate "client" code that match the {md} +protocol for format and content explained below. For each message +LAMMPS receives it will send a message back to the client. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When this command is invoked, LAMMPS will run in server mode in an +endless loop, waiting for messages from the client code. The client +signals when it is done sending messages to LAMMPS, at which point the +loop will exit, and the remainder of the LAMMPS script will be +processed. + +The "server"_server.html doc page gives other options for using LAMMPS +in server mode. See an example of how this command is used in +examples/message/in.message.server. + +:line + +When using this command, LAMMPS (as the server code) receives the +current coordinates of all particles from the client code each +timestep, computes their interaction, and returns the energy, forces, +and pressure for the interacting particles to the client code, so it +can complete the timestep. This command could also be used with a +client code that performs energy minimization, using the server to +compute forces and energy each iteration of its minimizer. + +When using the "fix client/md" command, LAMMPS (as the client code) +does the timestepping and receives needed energy, forces, and pressure +values from the server code. + +The format and content of the exchanged messages are explained here in +a conceptual sense. Python-style pseudo code for the library calls to +the CSlib is shown, which performs the actual message exchange between +the two codes. See the "CSlib website"_http://cslib.sandia.gov doc +pages for more details on the actual library syntax. The "cs" object +in this pseudo code is a pointer to an instance of the CSlib. + +See the src/MESSAGE/server_md.cpp and src/MESSAGE/fix_client_md.cpp +files for details on how LAMMPS uses these messages. See the +examples/COUPLE/lammps_vasp/vasp_wrapper.py file for an example of how +a quantum code (VASP) can use use these messages. + +The following pseudo-code uses these values, defined as enums. + +enum{SETUP=1,STEP}; +enum{DIM=1,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE}; +enum{FORCES=1,ENERGY,PRESSURE,ERROR}; :pre + +[Client sends 2 kinds of messages]: + +# required fields: DIM, PERIODICTY, ORIGIN, BOX, NATOMS, NTYPES, TYPES, COORDS +# optional fields: UNITS, CHARGE :pre + +cs->send(SETUP,nfields) # msgID with nfields :pre + +cs->pack_int(DIM,dim) # dimension (2,3) of simulation +cs->pack(PERIODICITY,3,xyz) # periodicity flags in 3 dims +cs->pack(ORIGIN,3,origin) # lower-left corner of simulation box +cs->pack(BOX,9,box) # 3 edge vectors of simulation box +cs->pack_int(NATOMS,natoms) # total number of atoms +cs->pack_int(NTYPES,ntypes) # number of atom types +cs->pack(TYPES,natoms,type) # vector of per-atom types +cs->pack(COORDS,3*natoms,x) # vector of 3N atom coords +cs->pack_string(UNITS,units) # units = "lj", "real", "metal", etc +cs->pack(CHARGE,natoms,q) # vector of per-atom charge :pre + +# required fields: COORDS +# optional fields: ORIGIN, BOX :pre + +cs->send(STEP,nfields) # msgID with nfields :pre + +cs->pack(COORDS,3*natoms,x) # vector of 3N atom coords +cs->pack(ORIGIN,3,origin) # lower-left corner of simulation box +cs->pack(BOX,9,box) # 3 edge vectors of simulation box + +[Server replies to either kind of message]: + +# required fields: FORCES, ENERGY, PRESSURE +# optional fields: ERROR :pre + +cs->send(msgID,nfields) # msgID with nfields +cs->pack(FORCES,3*Natoms,f) # vector of 3N forces on atoms +cs->pack(ENERGY,1,poteng) # total potential energy of system +cs->pack(PRESSURE,6,press) # global pressure tensor (6-vector) +cs->pack_int(ERROR,flag) # server had an error (e.g. DFT non-convergence) :pre + +:line + +The units for various quantities that are sent and received iva +messages are defined for atomic-scale simulations in the table below. +The client and server codes (including LAMMPS) can use internal units +different than these (e.g. "real units"_units.html in LAMMPS), so long +as they convert to these units for meesaging. + +COORDS, ORIGIN, BOX = Angstroms +CHARGE = multiple of electron charge (1.0 is a proton) +ENERGY = eV +FORCES = eV/Angstrom +PRESSURE = bars :ul + +Note that these are "metal units"_units.html in LAMMPS. + +If you wish to run LAMMPS in another its non-atomic units, e.g. "lj +units"_units.html, then the client and server should exchange a UNITS +message as indicated above, and both the client and server should +agree on the units for the data they exchange. + +:line + +[Restrictions:] + +This command is part of the MESSAGE 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:] + +"message"_message.html, "fix client/md"_fix_client_md.html + +[Default:] none diff --git a/examples/COUPLE/README b/examples/COUPLE/README index 83e7463531d..0e611befbd3 100644 --- a/examples/COUPLE/README +++ b/examples/COUPLE/README @@ -10,6 +10,7 @@ See these sections of the LAMMPS manaul for details: 2.5 Building LAMMPS as a library (doc/Section_start.html#start_5) 6.10 Coupling LAMMPS to other codes (doc/Section_howto.html#howto_10) +6.29 Using LAMMPS in client/server mode (doc/Section_howto.html#howto_29) In all of the examples included here, LAMMPS must first be built as a library. Basically, in the src dir you type one of @@ -33,9 +34,13 @@ These are the sub-directories included in this directory: simple simple example of driver code calling LAMMPS as a lib multiple example of driver code calling multiple instances of LAMMPS +lammps_mc client/server coupling of Monte Carlo client + with LAMMPS server for energy evaluation lammps_quest MD with quantum forces, coupling to Quest DFT code lammps_spparks grain-growth Monte Carlo with strain via MD, coupling to SPPARKS kinetic MC code +lammps_vasp client/server coupling of LAMMPS client with + VASP quantum DFT as server for quantum forces library collection of useful inter-code communication routines fortran a simple wrapper on the LAMMPS library API that can be called from Fortran diff --git a/examples/COUPLE/lammps_mc/Makefile b/examples/COUPLE/lammps_mc/Makefile new file mode 100644 index 00000000000..c75bd08c738 --- /dev/null +++ b/examples/COUPLE/lammps_mc/Makefile @@ -0,0 +1,33 @@ +# Makefile for MC + +SHELL = /bin/sh + +SRC = mc.cpp random_park.cpp +OBJ = $(SRC:.cpp=.o) + +# change this line for your machine to path for CSlib src dir + +CSLIB = /home/sjplimp/lammps/lib/message/cslib/src + +# compiler/linker settings + +CC = g++ +CCFLAGS = -g -O3 -I$(CSLIB) +LINK = g++ +LINKFLAGS = -g -O -L$(CSLIB) + +# targets + +mc: $(OBJ) +# first line if built the CSlib within lib/message with ZMQ support +# second line if built the CSlib without ZMQ support + $(LINK) $(LINKFLAGS) $(OBJ) -lcsnompi -lzmq -o mc +# $(LINK) $(LINKFLAGS) $(OBJ) -lcsnompi -o mc + +clean: + @rm -f *.o mc + +# rules + +%.o:%.cpp + $(CC) $(CCFLAGS) -c $< diff --git a/examples/COUPLE/lammps_mc/README b/examples/COUPLE/lammps_mc/README new file mode 100644 index 00000000000..c201a6351cf --- /dev/null +++ b/examples/COUPLE/lammps_mc/README @@ -0,0 +1,128 @@ +Sample Monte Carlo (MC) wrapper on LAMMPS via client/server coupling + +See the MESSAGE package (doc/Section_messages.html#MESSAGE) +and Section_howto.html#howto10 for more details on how +client/server coupling works in LAMMPS. + +In this dir, the mc.cpp/h files are a standalone "client" MC code. It +should be run on a single processor, though it could become a parallel +program at some point. LAMMPS is also run as a standalone executable +as a "server" on as many processors as desired using its "server mc" +command; see it's doc page for details. + +Messages are exchanged between MC and LAMMPS via a client/server +library (CSlib), which is included in the LAMMPS distribution in +lib/message. As explained below you can choose to exchange data +between the two programs either via files or sockets (ZMQ). If the MC +program became parallel, data could also be exchanged via MPI. + +The MC code makes simple MC moves, by displacing a single random atom +by a small random amount. It uses LAMMPS to calculate the energy +change, and to run dynamics between MC moves. + +---------------- + +Build LAMMPS with its MESSAGE package installed: + +See the Build extras doc page and its MESSAGE package +section for details. + +CMake: + +-D PKG_MESSAGE=yes # include the MESSAGE package +-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes + +Traditional make: + +% cd lammps/lib/message +% python Install.py -m -z # build CSlib with MPI and ZMQ support +% cd lammps/src +% make yes-message +% make mpi + +You can leave off the -z if you do not have ZMQ on your system. + +---------------- + +Build the MC client code + +The source files for the MC code are in this dir. It links with the +CSlib library in lib/message/cslib. + +You must first build the CSlib in serial mode, e.g. + +% cd lammps/lib/message/cslib/src +% make lib # build serial and parallel lib with ZMQ support +% make lib zmq=no # build serial and parallel lib without ZMQ support + +Then edit the Makefile in this dir. The CSLIB variable should be the +path to where the LAMMPS lib/message/cslib/src dir is on your system. +If you built the CSlib without ZMQ support you will also need to +comment/uncomment one line. Then you can just type + +% make + +and you should get an "mc" executable. + +---------------- + +To run in client/server mode: + +Both the client (MC) and server (LAMMPS) must use the same messaging +mode, namely file or zmq. This is an argument to the MC code; it can +be selected by setting the "mode" variable when you run LAMMPS. The +default mode = file. + +Here we assume LAMMPS was built to run in parallel, and the MESSAGE +package was installed with socket (ZMQ) support. This means either of +the messaging modes can be used and LAMMPS can be run in serial or +parallel. The MC code is always run in serial. + +When you run, the server should print out thermodynamic info +for every MD run it performs (between MC moves). The client +will print nothing until the simulation ends, then it will +print stats about the accepted MC moves. + +The examples below are commands you should use in two different +terminal windows. The order of the two commands (client or server +launch) does not matter. You can run them both in the same window if +you append a "&" character to the first one to run it in the +background. + +-------------- + +File mode of messaging: + +% mpirun -np 1 mc in.mc file tmp.couple +% mpirun -np 1 lmp_mpi -v mode file < in.mc.server + +% mpirun -np 1 mc in.mc file tmp.couple +% mpirun -np 4 lmp_mpi -v mode file < in.mc.server + +ZMQ mode of messaging: + +% mpirun -np 1 mc in.mc zmq localhost:5555 +% mpirun -np 1 lmp_mpi -v mode zmq < in.mc.server + +% mpirun -np 1 mc in.mc zmq localhost:5555 +% mpirun -np 4 lmp_mpi -v mode zmq < in.mc.server + +-------------- + +The input script for the MC program is in.mc. You can edit it to run +longer simulations. + +500 nsteps = total # of steps of MD +100 ndynamics = # of MD steps between MC moves +0.1 delta = displacement size of MC move +1.0 temperature = used in MC Boltzman factor +12345 seed = random number seed + +-------------- + +The problem size that LAMMPS is computing the MC energy for and +running dynamics on is set by the x,y,z variables in the LAMMPS +in.mc.server script. The default size is 500 particles. You can +adjust the size as follows: + +lmp_mpi -v x 10 -v y 10 -v z 20 # 8000 particles diff --git a/examples/COUPLE/lammps_mc/in.mc b/examples/COUPLE/lammps_mc/in.mc new file mode 100644 index 00000000000..85052d09f1b --- /dev/null +++ b/examples/COUPLE/lammps_mc/in.mc @@ -0,0 +1,7 @@ +# MC params + +500 nsteps +100 ndynamics +0.1 delta +1.0 temperature +12345 seed diff --git a/examples/COUPLE/lammps_mc/in.mc.server b/examples/COUPLE/lammps_mc/in.mc.server new file mode 100644 index 00000000000..8b10bb0f7be --- /dev/null +++ b/examples/COUPLE/lammps_mc/in.mc.server @@ -0,0 +1,36 @@ +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then & + "message server mc file tmp.couple" & +elif "${mode} == zmq" & + "message server mc zmq *:5555" & + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.1 b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.1 new file mode 100644 index 00000000000..0d67c89cf19 --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.1 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc file tmp.couple +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000649929 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +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 = 6 6 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) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +93.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 | 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 | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19500 ave 19500 max 19500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +93.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 | 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 | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19501 ave 19501 max 19501 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70239211 -5.6763152 0 -4.6248342 0.59544428 + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.7565768 0 -4.6240944 0.22436405 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +157.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 | 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.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1939 ave 1939 max 1939 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18757 ave 18757 max 18757 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18757 +Ave neighs/atom = 37.514 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 + 150 0.76110797 -5.7664315 0 -4.6270529 0.16005254 + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7181381 0 -4.6177585 0.37629943 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +139.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 | 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 | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18699 ave 18699 max 18699 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 + 250 0.73052476 -5.7206316 0 -4.627036 0.39287516 + 300 0.76300831 -5.7675007 0 -4.6252773 0.16312925 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +139.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 | 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 | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1903 ave 1903 max 1903 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18715 ave 18715 max 18715 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18715 +Ave neighs/atom = 37.43 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 + 350 0.72993309 -5.7193261 0 -4.6266162 0.3358374 + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.7077332 0 -4.6228655 0.47669832 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +157.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 | 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.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18683 ave 18683 max 18683 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18683 +Ave neighs/atom = 37.366 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 + 450 0.75305735 -5.7518283 0 -4.6245015 0.34658587 + 500 0.73092571 -5.7206337 0 -4.6264379 0.43715809 +Total wall time: 0:00:02 diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.4 b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.4 new file mode 100644 index 00000000000..2ae51d24614 --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.4 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc file tmp.couple +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000592947 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +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 = 6 6 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) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 3.8147e-06 on 4 procs for 0 steps with 500 atoms + +59.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.815e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875 ave 4875 max 4875 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 3.03984e-06 on 4 procs for 0 steps with 500 atoms + +106.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 | 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.04e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875.25 ave 4885 max 4866 min +Histogram: 1 0 0 0 2 0 0 0 0 1 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70210225 -5.6759068 0 -4.6248598 0.59609192 + 100 0.75891559 -5.7611234 0 -4.6250267 0.20841608 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 +Loop time of 3.75509e-06 on 4 procs for 0 steps with 500 atoms + +113.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 | 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.755e-06 | | |100.00 + +Nlocal: 125 ave 126 max 124 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1085.25 ave 1089 max 1079 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 4690.25 ave 4996 max 4401 min +Histogram: 1 0 0 1 0 1 0 0 0 1 + +Total # of neighbors = 18761 +Ave neighs/atom = 37.522 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 + 150 0.75437991 -5.7558622 0 -4.6265555 0.20681722 + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7143906 0 -4.6199151 0.37126023 +Loop time of 2.563e-06 on 4 procs for 0 steps with 500 atoms + +117.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 | 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 | | 2.563e-06 | | |100.00 + +Nlocal: 125 ave 126 max 123 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 1068.5 ave 1076 max 1063 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 4674.75 ave 4938 max 4419 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 + 250 0.73873144 -5.7312505 0 -4.6253696 0.33061033 + 300 0.76392796 -5.7719207 0 -4.6283206 0.18197874 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 +Loop time of 3.99351e-06 on 4 procs for 0 steps with 500 atoms + +93.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 | 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.994e-06 | | |100.00 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 1069 ave 1080 max 1055 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 4672 ave 4803 max 4600 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 18688 +Ave neighs/atom = 37.376 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 + 350 0.71953041 -5.7041632 0 -4.6270261 0.44866153 + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7158168 0 -4.6201554 0.49192039 +Loop time of 3.57628e-06 on 4 procs for 0 steps with 500 atoms + +111.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 | 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.576e-06 | | |100.00 + +Nlocal: 125 ave 132 max 118 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 1057.5 ave 1068 max 1049 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 4685.75 ave 5045 max 4229 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 18743 +Ave neighs/atom = 37.486 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 + 450 0.74503154 -5.7405318 0 -4.6252196 0.33211879 + 500 0.70570501 -5.6824439 0 -4.6260035 0.62020788 +Total wall time: 0:00:02 diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.1 b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.1 new file mode 100644 index 00000000000..0565487bc6e --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.1 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc zmq *:5555 +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000741005 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +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 = 6 6 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) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +52.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 | 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.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19500 ave 19500 max 19500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +52.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 | 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.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19501 ave 19501 max 19501 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70239211 -5.6763152 0 -4.6248342 0.59544428 + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.7565768 0 -4.6240944 0.22436405 +Loop time of 1.19209e-06 on 1 procs for 0 steps with 500 atoms + +83.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 | 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: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1939 ave 1939 max 1939 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18757 ave 18757 max 18757 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18757 +Ave neighs/atom = 37.514 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 + 150 0.76110797 -5.7664315 0 -4.6270529 0.16005254 + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7181381 0 -4.6177585 0.37629943 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 500 atoms + +209.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 | 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: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18699 ave 18699 max 18699 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 + 250 0.73052476 -5.7206316 0 -4.627036 0.39287516 + 300 0.76300831 -5.7675007 0 -4.6252773 0.16312925 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 500 atoms + +104.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 | 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: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1903 ave 1903 max 1903 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18715 ave 18715 max 18715 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18715 +Ave neighs/atom = 37.43 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 + 350 0.72993309 -5.7193261 0 -4.6266162 0.3358374 + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.7077332 0 -4.6228655 0.47669832 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 500 atoms + +209.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 | 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: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18683 ave 18683 max 18683 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18683 +Ave neighs/atom = 37.366 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 + 450 0.75305735 -5.7518283 0 -4.6245015 0.34658587 + 500 0.73092571 -5.7206337 0 -4.6264379 0.43715809 +Total wall time: 0:00:00 diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.4 b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.4 new file mode 100644 index 00000000000..e74d03235da --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.4 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc zmq *:5555 +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000576019 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +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 = 6 6 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) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 4.76837e-06 on 4 procs for 0 steps with 500 atoms + +89.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 | 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.768e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875 ave 4875 max 4875 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 3.45707e-06 on 4 procs for 0 steps with 500 atoms + +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 | 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.457e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875.25 ave 4885 max 4866 min +Histogram: 1 0 0 0 2 0 0 0 0 1 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70210225 -5.6759068 0 -4.6248598 0.59609192 + 100 0.75891559 -5.7611234 0 -4.6250267 0.20841608 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 +Loop time of 3.03984e-06 on 4 procs for 0 steps with 500 atoms + +115.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 | 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.04e-06 | | |100.00 + +Nlocal: 125 ave 126 max 124 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1085.25 ave 1089 max 1079 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 4690.25 ave 4996 max 4401 min +Histogram: 1 0 0 1 0 1 0 0 0 1 + +Total # of neighbors = 18761 +Ave neighs/atom = 37.522 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 + 150 0.75437991 -5.7558622 0 -4.6265555 0.20681722 + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7143906 0 -4.6199151 0.37126023 +Loop time of 2.38419e-06 on 4 procs for 0 steps with 500 atoms + +125.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 | 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 | | 2.384e-06 | | |100.00 + +Nlocal: 125 ave 126 max 123 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 1068.5 ave 1076 max 1063 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 4674.75 ave 4938 max 4419 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 + 250 0.73873144 -5.7312505 0 -4.6253696 0.33061033 + 300 0.76392796 -5.7719207 0 -4.6283206 0.18197874 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 +Loop time of 2.44379e-06 on 4 procs for 0 steps with 500 atoms + +112.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 | 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 | | 2.444e-06 | | |100.00 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 1069 ave 1080 max 1055 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 4672 ave 4803 max 4600 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 18688 +Ave neighs/atom = 37.376 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 + 350 0.71953041 -5.7041632 0 -4.6270261 0.44866153 + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7158168 0 -4.6201554 0.49192039 +Loop time of 2.14577e-06 on 4 procs for 0 steps with 500 atoms + +139.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 | 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 | | 2.146e-06 | | |100.00 + +Nlocal: 125 ave 132 max 118 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 1057.5 ave 1068 max 1049 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 4685.75 ave 5045 max 4229 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 18743 +Ave neighs/atom = 37.486 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 + 450 0.74503154 -5.7405318 0 -4.6252196 0.33211879 + 500 0.70570501 -5.6824439 0 -4.6260035 0.62020788 +Total wall time: 0:00:00 diff --git a/examples/COUPLE/lammps_mc/mc.cpp b/examples/COUPLE/lammps_mc/mc.cpp new file mode 100644 index 00000000000..7c2e2ce0391 --- /dev/null +++ b/examples/COUPLE/lammps_mc/mc.cpp @@ -0,0 +1,263 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov +------------------------------------------------------------------------- */ + +// MC code used with LAMMPS in client/server mode +// MC is the client, LAMMPS is the server + +// Syntax: mc infile mode modearg +// mode = file, zmq +// modearg = filename for file, localhost:5555 for zmq + +#include +#include +#include +#include +#include "mc.h" +#include "random_park.h" + +#include "cslib.h" +using namespace CSLIB_NS; + +void error(const char *); +CSlib *cs_create(char *, char *); + +#define MAXLINE 256 + +/* ---------------------------------------------------------------------- */ + +// main program + +int main(int narg, char **arg) +{ + if (narg != 4) { + error("Syntax: mc infile mode modearg"); + exit(1); + } + + // initialize CSlib + + CSlib *cs = cs_create(arg[2],arg[3]); + + // create MC class and perform run + + MC *mc = new MC(arg[1],cs); + mc->run(); + + // final MC stats + + int naccept = mc->naccept; + int nattempt = mc->nattempt; + + printf("------ MC stats ------\n"); + printf("MC attempts = %d\n",nattempt); + printf("MC accepts = %d\n",naccept); + printf("Acceptance ratio = %g\n",1.0*naccept/nattempt); + + // clean up + + delete cs; + delete mc; +} + +/* ---------------------------------------------------------------------- */ + +void error(const char *str) +{ + printf("ERROR: %s\n",str); + exit(1); +} + +/* ---------------------------------------------------------------------- */ + +CSlib *cs_create(char *mode, char *arg) +{ + CSlib *cs = new CSlib(0,mode,arg,NULL); + + // initial handshake to agree on protocol + + cs->send(0,1); + cs->pack_string(1,(char *) "mc"); + + int msgID,nfield; + int *fieldID,*fieldtype,*fieldlen; + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + return cs; +} + +// ---------------------------------------------------------------------- +// MC class +// ---------------------------------------------------------------------- + +MC::MC(char *mcfile, void *cs_caller) +//MC::MC(char *mcfile, CSlib *cs_caller) +{ + cs_void = cs_caller; + + // setup MC params + + options(mcfile); + + // random # generator + + random = new RanPark(seed); +} + +/* ---------------------------------------------------------------------- */ + +MC::~MC() +{ + free(x); + delete random; +} + +/* ---------------------------------------------------------------------- */ + +void MC::run() +{ + int iatom,accept,msgID,nfield; + double pe_initial,pe_final,edelta; + double dx,dy,dz; + double xold[3],xnew[3]; + int *fieldID,*fieldtype,*fieldlen; + + enum{NATOMS=1,EINIT,DISPLACE,ACCEPT,RUN}; + + CSlib *cs = (CSlib *) cs_void; + + // one-time request for atom count from MD + // allocate 1d coord buffer + + cs->send(NATOMS,0); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + natoms = cs->unpack_int(1); + + x = (double *) malloc(3*natoms*sizeof(double)); + + // loop over MC moves + + naccept = nattempt = 0; + + for (int iloop = 0; iloop < nloop; iloop++) { + + // request current energy from MD + // recv energy, coords from MD + + cs->send(EINIT,0); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + pe_initial = cs->unpack_double(1); + double *x = (double *) cs->unpack(2); + + // perform simple MC event + // displace a single atom by random amount + + iatom = (int) natoms*random->uniform(); + xold[0] = x[3*iatom+0]; + xold[1] = x[3*iatom+1]; + xold[2] = x[3*iatom+2]; + + dx = 2.0*delta*random->uniform() - delta; + dy = 2.0*delta*random->uniform() - delta; + dz = 2.0*delta*random->uniform() - delta; + + xnew[0] = xold[0] + dx; + xnew[1] = xold[1] + dx; + xnew[2] = xold[2] + dx; + + // send atom ID and its new coords to MD + // recv new energy + + cs->send(DISPLACE,2); + cs->pack_int(1,iatom+1); + cs->pack(2,4,3,xnew); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + pe_final = cs->unpack_double(1); + + // decide whether to accept/reject MC event + + if (pe_final <= pe_initial) accept = 1; + else if (temperature == 0.0) accept = 0; + else if (random->uniform() > + exp(natoms*(pe_initial-pe_final)/temperature)) accept = 0; + else accept = 1; + + nattempt++; + if (accept) naccept++; + + // send accept (1) or reject (0) flag to MD + + cs->send(ACCEPT,1); + cs->pack_int(1,accept); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + // send dynamics timesteps + + cs->send(RUN,1); + cs->pack_int(1,ndynamics); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + } + + // send exit message to MD + + cs->send(-1,0); + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); +} + +/* ---------------------------------------------------------------------- */ + +void MC::options(char *filename) +{ + // default params + + nsteps = 0; + ndynamics = 100; + delta = 0.1; + temperature = 1.0; + seed = 12345; + + // read and parse file + + FILE *fp = fopen(filename,"r"); + if (fp == NULL) error("Could not open MC file"); + + char line[MAXLINE]; + char *keyword,*value; + char *eof = fgets(line,MAXLINE,fp); + + while (eof) { + if (line[0] == '#') { // comment line + eof = fgets(line,MAXLINE,fp); + continue; + } + + value = strtok(line," \t\n\r\f"); + if (value == NULL) { // blank line + eof = fgets(line,MAXLINE,fp); + continue; + } + + keyword = strtok(NULL," \t\n\r\f"); + if (keyword == NULL) error("Missing keyword in MC file"); + + if (strcmp(keyword,"nsteps") == 0) nsteps = atoi(value); + else if (strcmp(keyword,"ndynamics") == 0) ndynamics = atoi(value); + else if (strcmp(keyword,"delta") == 0) delta = atof(value); + else if (strcmp(keyword,"temperature") == 0) temperature = atof(value); + else if (strcmp(keyword,"seed") == 0) seed = atoi(value); + else error("Unknown param in MC file"); + + eof = fgets(line,MAXLINE,fp); + } + + // derived params + + nloop = nsteps/ndynamics; +} diff --git a/examples/COUPLE/lammps_mc/mc.h b/examples/COUPLE/lammps_mc/mc.h new file mode 100644 index 00000000000..e9d88523fca --- /dev/null +++ b/examples/COUPLE/lammps_mc/mc.h @@ -0,0 +1,40 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov +------------------------------------------------------------------------- */ + +#ifndef MC_H +#define MC_H + +/* ---------------------------------------------------------------------- */ + +class MC { + public: + int naccept; // # of accepted MC events + int nattempt; // # of attempted MC events + + MC(char *, void *); + ~MC(); + void run(); + + private: + int nsteps; // total # of MD steps + int ndynamics; // steps in one short dynamics run + int nloop; // nsteps/ndynamics + int natoms; // # of MD atoms + + double delta; // MC displacement distance + double temperature; // MC temperature for Boltzmann criterion + double *x; // atom coords as 3N 1d vector + double energy; // global potential energy + + int seed; // RNG seed + class RanPark *random; + + void *cs_void; // messaging library + + void options(char *); +}; + +#endif diff --git a/examples/COUPLE/lammps_mc/random_park.cpp b/examples/COUPLE/lammps_mc/random_park.cpp new file mode 100644 index 00000000000..61ac18c6c00 --- /dev/null +++ b/examples/COUPLE/lammps_mc/random_park.cpp @@ -0,0 +1,72 @@ +/* ---------------------------------------------------------------------- + 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. +------------------------------------------------------------------------- */ + +// Park/Miller RNG + +#include +#include "random_park.h" +//#include "error.h" + +#define IA 16807 +#define IM 2147483647 +#define AM (1.0/IM) +#define IQ 127773 +#define IR 2836 + +/* ---------------------------------------------------------------------- */ + +RanPark::RanPark(int seed_init) +{ + //if (seed_init <= 0) + // error->one(FLERR,"Invalid seed for Park random # generator"); + seed = seed_init; + save = 0; +} + +/* ---------------------------------------------------------------------- + uniform RN +------------------------------------------------------------------------- */ + +double RanPark::uniform() +{ + int k = seed/IQ; + seed = IA*(seed-k*IQ) - IR*k; + if (seed < 0) seed += IM; + double ans = AM*seed; + return ans; +} + +/* ---------------------------------------------------------------------- + gaussian RN +------------------------------------------------------------------------- */ + +double RanPark::gaussian() +{ + double first,v1,v2,rsq,fac; + + if (!save) { + do { + v1 = 2.0*uniform()-1.0; + v2 = 2.0*uniform()-1.0; + rsq = v1*v1 + v2*v2; + } while ((rsq >= 1.0) || (rsq == 0.0)); + fac = sqrt(-2.0*log(rsq)/rsq); + second = v1*fac; + first = v2*fac; + save = 1; + } else { + first = second; + save = 0; + } + return first; +} diff --git a/examples/COUPLE/lammps_mc/random_park.h b/examples/COUPLE/lammps_mc/random_park.h new file mode 100644 index 00000000000..0dc20817687 --- /dev/null +++ b/examples/COUPLE/lammps_mc/random_park.h @@ -0,0 +1,28 @@ +/* ---------------------------------------------------------------------- + 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 RANPARK_H +#define RANPARK_H + +class RanPark { + public: + RanPark(int); + double uniform(); + double gaussian(); + + private: + int seed,save; + double second; +}; + +#endif diff --git a/examples/COUPLE/lammps_vasp/INCAR b/examples/COUPLE/lammps_vasp/INCAR new file mode 100644 index 00000000000..ac2358e5fbd --- /dev/null +++ b/examples/COUPLE/lammps_vasp/INCAR @@ -0,0 +1,53 @@ +# Startparameter for this run: + NWRITE = 2 write-flag & timer + PREC = normal normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + +# Electronic Relaxation 1 + ENCUT = 600.0 eV #Plane wave energy cutoff + ENINI = 600.0 initial cutoff + NELM = 100; NELMIN= 2; NELMDL= -5 # of ELM steps + EDIFF = 0.1E-05 stopping-criterion for ELM +# Ionic relaxation + EDIFFG = 0.1E-02 stopping-criterion for IOM + NSW = 0 number of steps for IOM + NBLOCK = 1; KBLOCK = 1 inner block; outer block + IBRION = -1 ionic relax: 0-MD 1-quasi-New 2-CG #No ion relaxation with -1 + NFREE = 0 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation # 2: F-yes Sts-yes RlxIon-yes cellshape-no cellvol-no + IWAVPR = 10 prediction: 0-non 1-charg 2-wave 3-comb # 10: TMPCAR stored in memory rather than file + + POTIM = 0.5000 time-step for ionic-motion + TEBEG = 3500.0; TEEND = 3500.0 temperature during run # Finite Temperature variables if AI-MD is on + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.366E-27a.u. + PSTRESS= 0.0 pullay stress + +# DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 0; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + +# Electronic relaxation 2 (details) + IALGO = 48 algorithm + +# Write flags + LWAVE = T write WAVECAR + LCHARG = T write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + +# Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = F correct potential (dipole corrections) + IDIPOL = 0 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + +# Exchange correlation treatment: + GGA = -- GGA type + diff --git a/examples/COUPLE/lammps_vasp/KPOINTS b/examples/COUPLE/lammps_vasp/KPOINTS new file mode 100644 index 00000000000..322509da300 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/KPOINTS @@ -0,0 +1,6 @@ +K-Points + 0 +Monkhorst Pack + 15 15 15 + 0 0 0 + diff --git a/examples/COUPLE/lammps_vasp/POSCAR_W b/examples/COUPLE/lammps_vasp/POSCAR_W new file mode 100644 index 00000000000..aba5df54a02 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/POSCAR_W @@ -0,0 +1,11 @@ +W unit cell +1.0 +3.16 0.00000000 0.00000000 +0.00000000 3.16 0.00000000 +0.00000000 0.00000000 3.16 +W +2 +Direct + 0.00000000 0.00000000 0.00000000 + 0.50000000 0.50000000 0.50000000 + diff --git a/examples/COUPLE/lammps_vasp/README b/examples/COUPLE/lammps_vasp/README new file mode 100644 index 00000000000..e942d52535d --- /dev/null +++ b/examples/COUPLE/lammps_vasp/README @@ -0,0 +1,149 @@ +Sample LAMMPS MD wrapper on VASP quantum DFT via client/server +coupling + +See the MESSAGE package (doc/Section_messages.html#MESSAGE) and +Section_howto.html#howto10 for more details on how client/server +coupling works in LAMMPS. + +In this dir, the vasp_wrap.py is a wrapper on the VASP quantum DFT +code so it can work as a "server" code which LAMMPS drives as a +"client" code to perform ab initio MD. LAMMPS performs the MD +timestepping, sends VASP a current set of coordinates each timestep, +VASP computes forces and energy and virial and returns that info to +LAMMPS. + +Messages are exchanged between MC and LAMMPS via a client/server +library (CSlib), which is included in the LAMMPS distribution in +lib/message. As explained below you can choose to exchange data +between the two programs either via files or sockets (ZMQ). If the +vasp_wrap.py program became parallel, or the CSlib library calls were +integrated into VASP directly, then data could also be exchanged via +MPI. + +---------------- + +Build LAMMPS with its MESSAGE package installed: + +See the Build extras doc page and its MESSAGE package +section for details. + +CMake: + +-D PKG_MESSAGE=yes # include the MESSAGE package +-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes + +Traditional make: + +cd lammps/lib/message +python Install.py -m -z # build CSlib with MPI and ZMQ support +cd lammps/src +make yes-message +make mpi + +You can leave off the -z if you do not have ZMQ on your system. + +---------------- + +Build the CSlib in a form usable by the vasp_wrapper.py script: + +% cd lammps/lib/message/cslib/src +% make shlib # build serial and parallel shared lib with ZMQ support +% make shlib zmq=no # build serial and parallel shared lib w/out ZMQ support + +This will make a shared library versions of the CSlib, which Python +requires. Python must be able to find both the cslib.py script and +the libcsnompi.so library in your lammps/lib/message/cslib/src +directory. If it is not able to do this, you will get an error when +you run vasp_wrapper.py. + +You can do this by augmenting two environment variables, either +from the command line, or in your shell start-up script. +Here is the sample syntax for the csh or tcsh shells: + +setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/lib/message/cslib/src +setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/lib/message/cslib/src + +---------------- + +Prepare to use VASP and the vasp_wrapper.py script + +You can run the vasp_wrap.py script as-is to test that the coupling +between it and LAMMPS is functional. This will use the included +vasprun.xml file output by a previous VASP run. + +But note that the as-is version of vasp_wrap.py will not attempt to +run VASP. + +To do this, you must edit the 1st vaspcmd line at the top of +vasp_wrapper.py to be the launch command needed to run VASP on your +system. It can be a command to run VASP in serial or in parallel, +e.g. an mpirun command. Then comment out the 2nd vaspcmd line +immediately following it. + +Insure you have the necessary VASP input files in this +directory, suitable for the VASP calculation you want to perform: + +INCAR +KPOINTS +POSCAR_template +POTCAR + +Examples of all but the POTCAR file are provided. As explained below, +POSCAR_W is an input file for a 2-atom unit cell of tungsten and can +be used to test the LAMMPS/VASP coupling. The POTCAR file is a +proprietary VASP file, so use one from your VASP installation. + +Note that the POSCAR_template file should be matched to the LAMMPS +input script (# of atoms and atom types, box size, etc). The provided +POSCAR_W matches in.client.W. + +Once you run VASP yourself, the vasprun.xml file will be overwritten. + +---------------- + +To run in client/server mode: + +NOTE: The vasp_wrap.py script must be run with Python version 2, not +3. This is because it used the CSlib python wrapper, which only +supports version 2. We plan to upgrade CSlib to support Python 3. + +Both the client (LAMMPS) and server (vasp_wrap.py) must use the same +messaging mode, namely file or zmq. This is an argument to the +vasp_wrap.py code; it can be selected by setting the "mode" variable +when you run LAMMPS. The default mode = file. + +Here we assume LAMMPS was built to run in parallel, and the MESSAGE +package was installed with socket (ZMQ) support. This means either of +the messaging modes can be used and LAMMPS can be run in serial or +parallel. The vasp_wrap.py code is always run in serial, but it +launches VASP from Python via an mpirun command which can run VASP +itself in parallel. + +When you run, the server should print out thermodynamic info every +timestep which corresponds to the forces and virial computed by VASP. +VASP will also generate output files each timestep. The vasp_wrapper.py +script could be generalized to archive these. + +The examples below are commands you should use in two different +terminal windows. The order of the two commands (client or server +launch) does not matter. You can run them both in the same window if +you append a "&" character to the first one to run it in the +background. + +-------------- + +File mode of messaging: + +% mpirun -np 1 lmp_mpi -v mode file < in.client.W +% python vasp_wrap.py file POSCAR_W + +% mpirun -np 2 lmp_mpi -v mode file < in.client.W +% python vasp_wrap.py file POSCAR_W + +ZMQ mode of messaging: + +% mpirun -np 1 lmp_mpi -v mode zmq < in.client.W +% python vasp_wrap.py zmq POSCAR_W + +% mpirun -np 2 lmp_mpi -v mode zmq < in.client.W +% python vasp_wrap.py zmq POSCAR_W diff --git a/examples/COUPLE/lammps_vasp/data.W b/examples/COUPLE/lammps_vasp/data.W new file mode 100644 index 00000000000..8accd9ca790 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/data.W @@ -0,0 +1,15 @@ +LAMMPS W data file + +2 atoms + +1 atom types + +0.0 3.16 xlo xhi +0.0 3.16 ylo yhi +0.0 3.16 zlo zhi + +Atoms + +1 1 0.000 0.000 0.000 +2 1 1.58 1.58 1.58 + diff --git a/examples/COUPLE/lammps_vasp/in.client.W b/examples/COUPLE/lammps_vasp/in.client.W new file mode 100644 index 00000000000..3eaf99dcbb1 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/in.client.W @@ -0,0 +1,34 @@ +# small W unit cell for use with VASP + +variable mode index file + +if "${mode} == file" then & + "message client md file tmp.couple" & +elif "${mode} == zmq" & + "message client md zmq localhost:5555" & + +variable x index 1 +variable y index 1 +variable z index 1 + +units metal +atom_style atomic +atom_modify sort 0 0.0 map yes + +read_data data.W +mass 1 183.85 + +replicate $x $y $z + +velocity all create 300.0 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 10 check no + +fix 1 all nve +fix 2 all client/md +fix_modify 2 energy yes + +thermo 1 +run 3 + diff --git a/examples/COUPLE/lammps_vasp/log.client.output b/examples/COUPLE/lammps_vasp/log.client.output new file mode 100644 index 00000000000..fa8f4f920ae --- /dev/null +++ b/examples/COUPLE/lammps_vasp/log.client.output @@ -0,0 +1,76 @@ +LAMMPS (22 Aug 2018) +# small W unit cell for use with VASP + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" +message client md zmq localhost:5555 +variable x index 1 +variable y index 1 +variable z index 1 + +units metal +atom_style atomic +atom_modify sort 0 0.0 map yes + +read_data data.W + orthogonal box = (0 0 0) to (3.16 3.16 3.16) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 2 atoms +mass 1 183.85 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 + orthogonal box = (0 0 0) to (3.16 3.16 3.16) + 1 by 1 by 2 MPI processor grid + 2 atoms + Time spent = 0.000148058 secs + +velocity all create 300.0 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 10 check no + +fix 1 all nve +fix 2 all client/md +fix_modify 2 energy yes + +thermo 1 +run 3 +Per MPI rank memory allocation (min/avg/max) = 1.8 | 1.8 | 1.8 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 0 0 -48.030793 -78159.503 + 1 298.24318 0 0 -48.03102 -78167.19 + 2 296.85584 0 0 -48.031199 -78173.26 + 3 295.83795 0 0 -48.031331 -78177.714 +Loop time of 0.457491 on 2 procs for 3 steps with 2 atoms + +Performance: 0.567 ns/day, 42.360 hours/ns, 6.558 timesteps/s +50.1% CPU use with 2 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 | 1.3828e-05 | 2.9922e-05 | 4.6015e-05 | 0.0 | 0.01 +Output | 7.5817e-05 | 9.3937e-05 | 0.00011206 | 0.0 | 0.02 +Modify | 0.45735 | 0.45736 | 0.45736 | 0.0 | 99.97 +Other | | 1.204e-05 | | | 0.00 + +Nlocal: 1 ave 1 max 1 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 4 ave 4 max 4 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 0 +Dangerous builds not checked + +Total wall time: 0:01:21 diff --git a/examples/COUPLE/lammps_vasp/vasp_wrap.py b/examples/COUPLE/lammps_vasp/vasp_wrap.py new file mode 100644 index 00000000000..1e2c52aa46d --- /dev/null +++ b/examples/COUPLE/lammps_vasp/vasp_wrap.py @@ -0,0 +1,300 @@ +#!/usr/bin/env python + +# ---------------------------------------------------------------------- +# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +# http://lammps.sandia.gov, Sandia National Laboratories +# Steve Plimpton, sjplimp@sandia.gov +# ---------------------------------------------------------------------- + +# Syntax: vasp_wrap.py file/zmq POSCARfile + +# wrapper on VASP to act as server program using CSlib +# receives message with list of coords from client +# creates VASP inputs +# invokes VASP to calculate self-consistent energy of that config +# reads VASP outputs +# sends message with energy, forces, pressure to client + +# NOTES: +# check to insure basic VASP input files are in place? +# could archive VASP input/output in special filenames or dirs? +# need to check that POTCAR file is consistent with atom ordering? +# could make syntax for launching VASP more flexible +# e.g. command-line arg for # of procs +# detect if VASP had an error and return ERROR field, e.g. non-convergence ?? + +from __future__ import print_function +import sys + +version = sys.version_info[0] +if version == 3: + sys.exit("The CSlib python wrapper does not yet support python 3") + +import subprocess +import xml.etree.ElementTree as ET +from cslib import CSlib + +# comment out 2nd line once 1st line is correct for your system + +vaspcmd = "srun -N 1 --ntasks-per-node=4 " + \ + "-n 4 /projects/vasp/2017-build/cts1/vasp5.4.4/vasp_tfermi/bin/vasp_std" +vaspcmd = "touch tmp" + +# enums matching FixClientMD class in LAMMPS + +SETUP,STEP = range(1,2+1) +DIM,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE = range(1,10+1) +FORCES,ENERGY,VIRIAL,ERROR = range(1,4+1) + +# ------------------------------------- +# functions + +# error message and exit + +def error(txt): + print("ERROR:",txt) + sys.exit(1) + +# ------------------------------------- +# read initial VASP POSCAR file to setup problem +# return natoms,ntypes,box + +def vasp_setup(poscar): + + ps = open(poscar,'r').readlines() + + # box size + + words = ps[2].split() + xbox = float(words[0]) + words = ps[3].split() + ybox = float(words[1]) + words = ps[4].split() + zbox = float(words[2]) + box = [xbox,ybox,zbox] + + ntypes = 0 + natoms = 0 + words = ps[6].split() + for word in words: + if word == '#': break + ntypes += 1 + natoms += int(word) + + return natoms,ntypes,box + +# ------------------------------------- +# write a new POSCAR file for VASP + +def poscar_write(poscar,natoms,ntypes,types,coords,box): + + psold = open(poscar,'r').readlines() + psnew = open("POSCAR",'w') + + # header, including box size + + psnew.write(psold[0]) + psnew.write(psold[1]) + psnew.write("%g %g %g\n" % (box[0],box[1],box[2])) + psnew.write("%g %g %g\n" % (box[3],box[4],box[5])) + psnew.write("%g %g %g\n" % (box[6],box[7],box[8])) + psnew.write(psold[5]) + psnew.write(psold[6]) + + # per-atom coords + # grouped by types + + psnew.write("Cartesian\n") + + for itype in range(1,ntypes+1): + for i in range(natoms): + if types[i] != itype: continue + x = coords[3*i+0] + y = coords[3*i+1] + z = coords[3*i+2] + aline = " %g %g %g\n" % (x,y,z) + psnew.write(aline) + + psnew.close() + +# ------------------------------------- +# read a VASP output vasprun.xml file +# uses ElementTree module +# see https://docs.python.org/2/library/xml.etree.elementtree.html + +def vasprun_read(): + tree = ET.parse('vasprun.xml') + root = tree.getroot() + + #fp = open("vasprun.xml","r") + #root = ET.parse(fp) + + scsteps = root.findall('calculation/scstep') + energy = scsteps[-1].find('energy') + for child in energy: + if child.attrib["name"] == "e_0_energy": + eout = float(child.text) + + fout = [] + sout = [] + + varrays = root.findall('calculation/varray') + for varray in varrays: + if varray.attrib["name"] == "forces": + forces = varray.findall("v") + for line in forces: + fxyz = line.text.split() + fxyz = [float(value) for value in fxyz] + fout += fxyz + if varray.attrib["name"] == "stress": + tensor = varray.findall("v") + stensor = [] + for line in tensor: + sxyz = line.text.split() + sxyz = [float(value) for value in sxyz] + stensor.append(sxyz) + sxx = stensor[0][0] + syy = stensor[1][1] + szz = stensor[2][2] + # symmetrize off-diagonal components + sxy = 0.5 * (stensor[0][1] + stensor[1][0]) + sxz = 0.5 * (stensor[0][2] + stensor[2][0]) + syz = 0.5 * (stensor[1][2] + stensor[2][1]) + sout = [sxx,syy,szz,sxy,sxz,syz] + + #fp.close() + + return eout,fout,sout + +# ------------------------------------- +# main program + +# command-line args + +if len(sys.argv) != 3: + print("Syntax: python vasp_wrap.py file/zmq POSCARfile") + sys.exit(1) + +mode = sys.argv[1] +poscar_template = sys.argv[2] + +if mode == "file": cs = CSlib(1,mode,"tmp.couple",None) +elif mode == "zmq": cs = CSlib(1,mode,"*:5555",None) +else: + print("Syntax: python vasp_wrap.py file/zmq POSCARfile") + sys.exit(1) + +natoms,ntypes,box = vasp_setup(poscar_template) + +# initial message for MD protocol + +msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv() +if msgID != 0: error("Bad initial client/server handshake") +protocol = cs.unpack_string(1) +if protocol != "md": error("Mismatch in client/server protocol") +cs.send(0,0) + +# endless server loop + +while 1: + + # recv message from client + # msgID = 0 = all-done message + + msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv() + if msgID < 0: break + + # SETUP receive at beginning of each run + # required fields: DIM, PERIODICTY, ORIGIN, BOX, + # NATOMS, NTYPES, TYPES, COORDS + # optional fields: others in enum above, but VASP ignores them + + if msgID == SETUP: + + origin = [] + box = [] + natoms_recv = ntypes_recv = 0 + types = [] + coords = [] + + for field in fieldID: + if field == DIM: + dim = cs.unpack_int(DIM) + if dim != 3: error("VASP only performs 3d simulations") + elif field == PERIODICITY: + periodicity = cs.unpack(PERIODICITY,1) + if not periodicity[0] or not periodicity[1] or not periodicity[2]: + error("VASP wrapper only currently supports fully periodic systems") + elif field == ORIGIN: + origin = cs.unpack(ORIGIN,1) + elif field == BOX: + box = cs.unpack(BOX,1) + elif field == NATOMS: + natoms_recv = cs.unpack_int(NATOMS) + if natoms != natoms_recv: + error("VASP wrapper mis-match in number of atoms") + elif field == NTYPES: + ntypes_recv = cs.unpack_int(NTYPES) + if ntypes != ntypes_recv: + error("VASP wrapper mis-match in number of atom types") + elif field == TYPES: + types = cs.unpack(TYPES,1) + elif field == COORDS: + coords = cs.unpack(COORDS,1) + + if not origin or not box or not natoms or not ntypes or \ + not types or not coords: + error("Required VASP wrapper setup field not received"); + + # STEP receive at each timestep of run or minimization + # required fields: COORDS + # optional fields: ORIGIN, BOX + + elif msgID == STEP: + + coords = [] + + for field in fieldID: + if field == COORDS: + coords = cs.unpack(COORDS,1) + elif field == ORIGIN: + origin = cs.unpack(ORIGIN,1) + elif field == BOX: + box = cs.unpack(BOX,1) + + if not coords: error("Required VASP wrapper step field not received"); + + else: error("VASP wrapper received unrecognized message") + + # create POSCAR file + + poscar_write(poscar_template,natoms,ntypes,types,coords,box) + + # invoke VASP + + print("\nLaunching VASP ...") + print(vaspcmd) + subprocess.check_output(vaspcmd,stderr=subprocess.STDOUT,shell=True) + + # process VASP output + + energy,forces,virial = vasprun_read() + + # convert VASP kilobars to bars + + for i,value in enumerate(virial): virial[i] *= 1000.0 + + # return forces, energy, pressure to client + + cs.send(msgID,3); + cs.pack(FORCES,4,3*natoms,forces) + cs.pack_double(ENERGY,energy) + cs.pack(VIRIAL,4,6,virial) + +# final reply to client + +cs.send(0,0) + +# clean-up + +del cs diff --git a/examples/COUPLE/lammps_vasp/vasprun.xml b/examples/COUPLE/lammps_vasp/vasprun.xml new file mode 100644 index 00000000000..0f15c871b41 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/vasprun.xml @@ -0,0 +1,12329 @@ + + + + vasp + 5.4.4.18Apr17-6-g9f103f2a35 + (build Aug 01 2017 10:32:50) complex parallel + LinuxIFC + 2017 12 19 + 15:22:45 + + + 0 + normal normal or accurate (medium, h + 48 + F + 1 + 2 + 1 + 100 + -5 + 2 + -1 + 0 + 0.00000100 + 0.00100000 + 0 + 2 + 10 + 1 + 1 + 600.00000000 + 600.00000000 + 0.50000000 + 3500.00000000 + 3500.00000000 + -3.00000000 + 10.00000000 + -10.00000000 + 0.00000000 + 0 + 0.10000000 + 2 + 0.00000000 + T + T + F + F + F + -1 0 0 0 + 100 + -- GGA type + F + F + 0 + 1.00000000 + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 -0.50000000 -0.50000000 + -0.50000000 0.00000000 -0.50000000 + -0.50000000 -0.50000000 0.00000000 + + + + 1 + 2 + 3 + 4 + + + + 15 15 15 + 0.00000000 0.00000000 0.00000000 + 0.06666667 0.00000000 0.00000000 + 0.00000000 0.06666667 0.00000000 + 0.00000000 0.00000000 0.06666667 + 0.00000000 0.00000000 0.00000000 + + + 0.00000000 0.00000000 0.00000000 + 0.06666667 0.00000000 0.00000000 + 0.13333333 0.00000000 0.00000000 + 0.20000000 0.00000000 0.00000000 + 0.26666667 0.00000000 0.00000000 + 0.33333333 0.00000000 0.00000000 + 0.40000000 0.00000000 0.00000000 + 0.46666667 0.00000000 0.00000000 + 0.00000000 0.06666667 0.00000000 + 0.06666667 0.06666667 0.00000000 + 0.13333333 0.06666667 0.00000000 + 0.20000000 0.06666667 0.00000000 + 0.26666667 0.06666667 0.00000000 + 0.33333333 0.06666667 0.00000000 + 0.40000000 0.06666667 0.00000000 + 0.46666667 0.06666667 0.00000000 + 0.00000000 0.13333333 0.00000000 + 0.06666667 0.13333333 0.00000000 + 0.13333333 0.13333333 0.00000000 + 0.20000000 0.13333333 0.00000000 + 0.26666667 0.13333333 0.00000000 + 0.33333333 0.13333333 0.00000000 + 0.40000000 0.13333333 0.00000000 + 0.46666667 0.13333333 0.00000000 + 0.00000000 0.20000000 0.00000000 + 0.06666667 0.20000000 0.00000000 + 0.13333333 0.20000000 0.00000000 + 0.20000000 0.20000000 0.00000000 + 0.26666667 0.20000000 0.00000000 + 0.33333333 0.20000000 0.00000000 + 0.40000000 0.20000000 0.00000000 + 0.46666667 0.20000000 0.00000000 + 0.00000000 0.26666667 0.00000000 + 0.06666667 0.26666667 0.00000000 + 0.13333333 0.26666667 0.00000000 + 0.20000000 0.26666667 0.00000000 + 0.26666667 0.26666667 0.00000000 + 0.33333333 0.26666667 0.00000000 + 0.40000000 0.26666667 0.00000000 + 0.46666667 0.26666667 0.00000000 + 0.00000000 0.33333333 0.00000000 + 0.06666667 0.33333333 0.00000000 + 0.13333333 0.33333333 0.00000000 + 0.20000000 0.33333333 0.00000000 + 0.26666667 0.33333333 0.00000000 + 0.33333333 0.33333333 0.00000000 + 0.40000000 0.33333333 0.00000000 + 0.46666667 0.33333333 0.00000000 + 0.00000000 0.40000000 0.00000000 + 0.06666667 0.40000000 0.00000000 + 0.13333333 0.40000000 0.00000000 + 0.20000000 0.40000000 0.00000000 + 0.26666667 0.40000000 0.00000000 + 0.33333333 0.40000000 0.00000000 + 0.40000000 0.40000000 0.00000000 + 0.46666667 0.40000000 0.00000000 + 0.00000000 0.46666667 0.00000000 + 0.06666667 0.46666667 0.00000000 + 0.13333333 0.46666667 0.00000000 + 0.20000000 0.46666667 0.00000000 + 0.26666667 0.46666667 0.00000000 + 0.33333333 0.46666667 0.00000000 + 0.40000000 0.46666667 0.00000000 + 0.46666667 0.46666667 0.00000000 + 0.00000000 0.00000000 0.06666667 + 0.06666667 0.00000000 0.06666667 + 0.13333333 0.00000000 0.06666667 + 0.20000000 0.00000000 0.06666667 + 0.26666667 0.00000000 0.06666667 + 0.33333333 0.00000000 0.06666667 + 0.40000000 0.00000000 0.06666667 + 0.46666667 0.00000000 0.06666667 + 0.00000000 0.06666667 0.06666667 + 0.06666667 0.06666667 0.06666667 + 0.13333333 0.06666667 0.06666667 + 0.20000000 0.06666667 0.06666667 + 0.26666667 0.06666667 0.06666667 + 0.33333333 0.06666667 0.06666667 + 0.40000000 0.06666667 0.06666667 + 0.46666667 0.06666667 0.06666667 + 0.00000000 0.13333333 0.06666667 + 0.06666667 0.13333333 0.06666667 + 0.13333333 0.13333333 0.06666667 + 0.20000000 0.13333333 0.06666667 + 0.26666667 0.13333333 0.06666667 + 0.33333333 0.13333333 0.06666667 + 0.40000000 0.13333333 0.06666667 + 0.46666667 0.13333333 0.06666667 + 0.00000000 0.20000000 0.06666667 + 0.06666667 0.20000000 0.06666667 + 0.13333333 0.20000000 0.06666667 + 0.20000000 0.20000000 0.06666667 + 0.26666667 0.20000000 0.06666667 + 0.33333333 0.20000000 0.06666667 + 0.40000000 0.20000000 0.06666667 + 0.46666667 0.20000000 0.06666667 + 0.00000000 0.26666667 0.06666667 + 0.06666667 0.26666667 0.06666667 + 0.13333333 0.26666667 0.06666667 + 0.20000000 0.26666667 0.06666667 + 0.26666667 0.26666667 0.06666667 + 0.33333333 0.26666667 0.06666667 + 0.40000000 0.26666667 0.06666667 + 0.46666667 0.26666667 0.06666667 + 0.00000000 0.33333333 0.06666667 + 0.06666667 0.33333333 0.06666667 + 0.13333333 0.33333333 0.06666667 + 0.20000000 0.33333333 0.06666667 + 0.26666667 0.33333333 0.06666667 + 0.33333333 0.33333333 0.06666667 + 0.40000000 0.33333333 0.06666667 + 0.46666667 0.33333333 0.06666667 + 0.00000000 0.40000000 0.06666667 + 0.06666667 0.40000000 0.06666667 + 0.13333333 0.40000000 0.06666667 + 0.20000000 0.40000000 0.06666667 + 0.26666667 0.40000000 0.06666667 + 0.33333333 0.40000000 0.06666667 + 0.40000000 0.40000000 0.06666667 + 0.46666667 0.40000000 0.06666667 + 0.00000000 0.46666667 0.06666667 + 0.06666667 0.46666667 0.06666667 + 0.13333333 0.46666667 0.06666667 + 0.20000000 0.46666667 0.06666667 + 0.26666667 0.46666667 0.06666667 + 0.33333333 0.46666667 0.06666667 + 0.40000000 0.46666667 0.06666667 + 0.46666667 0.46666667 0.06666667 + 0.00000000 0.00000000 0.13333333 + 0.06666667 0.00000000 0.13333333 + 0.13333333 0.00000000 0.13333333 + 0.20000000 0.00000000 0.13333333 + 0.26666667 0.00000000 0.13333333 + 0.33333333 0.00000000 0.13333333 + 0.40000000 0.00000000 0.13333333 + 0.46666667 0.00000000 0.13333333 + 0.00000000 0.06666667 0.13333333 + 0.06666667 0.06666667 0.13333333 + 0.13333333 0.06666667 0.13333333 + 0.20000000 0.06666667 0.13333333 + 0.26666667 0.06666667 0.13333333 + 0.33333333 0.06666667 0.13333333 + 0.40000000 0.06666667 0.13333333 + 0.46666667 0.06666667 0.13333333 + 0.00000000 0.13333333 0.13333333 + 0.06666667 0.13333333 0.13333333 + 0.13333333 0.13333333 0.13333333 + 0.20000000 0.13333333 0.13333333 + 0.26666667 0.13333333 0.13333333 + 0.33333333 0.13333333 0.13333333 + 0.40000000 0.13333333 0.13333333 + 0.46666667 0.13333333 0.13333333 + 0.00000000 0.20000000 0.13333333 + 0.06666667 0.20000000 0.13333333 + 0.13333333 0.20000000 0.13333333 + 0.20000000 0.20000000 0.13333333 + 0.26666667 0.20000000 0.13333333 + 0.33333333 0.20000000 0.13333333 + 0.40000000 0.20000000 0.13333333 + 0.46666667 0.20000000 0.13333333 + 0.00000000 0.26666667 0.13333333 + 0.06666667 0.26666667 0.13333333 + 0.13333333 0.26666667 0.13333333 + 0.20000000 0.26666667 0.13333333 + 0.26666667 0.26666667 0.13333333 + 0.33333333 0.26666667 0.13333333 + 0.40000000 0.26666667 0.13333333 + 0.46666667 0.26666667 0.13333333 + 0.00000000 0.33333333 0.13333333 + 0.06666667 0.33333333 0.13333333 + 0.13333333 0.33333333 0.13333333 + 0.20000000 0.33333333 0.13333333 + 0.26666667 0.33333333 0.13333333 + 0.33333333 0.33333333 0.13333333 + 0.40000000 0.33333333 0.13333333 + 0.46666667 0.33333333 0.13333333 + 0.00000000 0.40000000 0.13333333 + 0.06666667 0.40000000 0.13333333 + 0.13333333 0.40000000 0.13333333 + 0.20000000 0.40000000 0.13333333 + 0.26666667 0.40000000 0.13333333 + 0.33333333 0.40000000 0.13333333 + 0.40000000 0.40000000 0.13333333 + 0.46666667 0.40000000 0.13333333 + 0.00000000 0.46666667 0.13333333 + 0.06666667 0.46666667 0.13333333 + 0.13333333 0.46666667 0.13333333 + 0.20000000 0.46666667 0.13333333 + 0.26666667 0.46666667 0.13333333 + 0.33333333 0.46666667 0.13333333 + 0.40000000 0.46666667 0.13333333 + 0.46666667 0.46666667 0.13333333 + 0.00000000 0.00000000 0.20000000 + 0.06666667 0.00000000 0.20000000 + 0.13333333 0.00000000 0.20000000 + 0.20000000 0.00000000 0.20000000 + 0.26666667 0.00000000 0.20000000 + 0.33333333 0.00000000 0.20000000 + 0.40000000 0.00000000 0.20000000 + 0.46666667 0.00000000 0.20000000 + 0.00000000 0.06666667 0.20000000 + 0.06666667 0.06666667 0.20000000 + 0.13333333 0.06666667 0.20000000 + 0.20000000 0.06666667 0.20000000 + 0.26666667 0.06666667 0.20000000 + 0.33333333 0.06666667 0.20000000 + 0.40000000 0.06666667 0.20000000 + 0.46666667 0.06666667 0.20000000 + 0.00000000 0.13333333 0.20000000 + 0.06666667 0.13333333 0.20000000 + 0.13333333 0.13333333 0.20000000 + 0.20000000 0.13333333 0.20000000 + 0.26666667 0.13333333 0.20000000 + 0.33333333 0.13333333 0.20000000 + 0.40000000 0.13333333 0.20000000 + 0.46666667 0.13333333 0.20000000 + 0.00000000 0.20000000 0.20000000 + 0.06666667 0.20000000 0.20000000 + 0.13333333 0.20000000 0.20000000 + 0.20000000 0.20000000 0.20000000 + 0.26666667 0.20000000 0.20000000 + 0.33333333 0.20000000 0.20000000 + 0.40000000 0.20000000 0.20000000 + 0.46666667 0.20000000 0.20000000 + 0.00000000 0.26666667 0.20000000 + 0.06666667 0.26666667 0.20000000 + 0.13333333 0.26666667 0.20000000 + 0.20000000 0.26666667 0.20000000 + 0.26666667 0.26666667 0.20000000 + 0.33333333 0.26666667 0.20000000 + 0.40000000 0.26666667 0.20000000 + 0.46666667 0.26666667 0.20000000 + 0.00000000 0.33333333 0.20000000 + 0.06666667 0.33333333 0.20000000 + 0.13333333 0.33333333 0.20000000 + 0.20000000 0.33333333 0.20000000 + 0.26666667 0.33333333 0.20000000 + 0.33333333 0.33333333 0.20000000 + 0.40000000 0.33333333 0.20000000 + 0.46666667 0.33333333 0.20000000 + 0.00000000 0.40000000 0.20000000 + 0.06666667 0.40000000 0.20000000 + 0.13333333 0.40000000 0.20000000 + 0.20000000 0.40000000 0.20000000 + 0.26666667 0.40000000 0.20000000 + 0.33333333 0.40000000 0.20000000 + 0.40000000 0.40000000 0.20000000 + 0.46666667 0.40000000 0.20000000 + 0.00000000 0.46666667 0.20000000 + 0.06666667 0.46666667 0.20000000 + 0.13333333 0.46666667 0.20000000 + 0.20000000 0.46666667 0.20000000 + 0.26666667 0.46666667 0.20000000 + 0.33333333 0.46666667 0.20000000 + 0.40000000 0.46666667 0.20000000 + 0.46666667 0.46666667 0.20000000 + 0.00000000 0.00000000 0.26666667 + 0.06666667 0.00000000 0.26666667 + 0.13333333 0.00000000 0.26666667 + 0.20000000 0.00000000 0.26666667 + 0.26666667 0.00000000 0.26666667 + 0.33333333 0.00000000 0.26666667 + 0.40000000 0.00000000 0.26666667 + 0.46666667 0.00000000 0.26666667 + 0.00000000 0.06666667 0.26666667 + 0.06666667 0.06666667 0.26666667 + 0.13333333 0.06666667 0.26666667 + 0.20000000 0.06666667 0.26666667 + 0.26666667 0.06666667 0.26666667 + 0.33333333 0.06666667 0.26666667 + 0.40000000 0.06666667 0.26666667 + 0.46666667 0.06666667 0.26666667 + 0.00000000 0.13333333 0.26666667 + 0.06666667 0.13333333 0.26666667 + 0.13333333 0.13333333 0.26666667 + 0.20000000 0.13333333 0.26666667 + 0.26666667 0.13333333 0.26666667 + 0.33333333 0.13333333 0.26666667 + 0.40000000 0.13333333 0.26666667 + 0.46666667 0.13333333 0.26666667 + 0.00000000 0.20000000 0.26666667 + 0.06666667 0.20000000 0.26666667 + 0.13333333 0.20000000 0.26666667 + 0.20000000 0.20000000 0.26666667 + 0.26666667 0.20000000 0.26666667 + 0.33333333 0.20000000 0.26666667 + 0.40000000 0.20000000 0.26666667 + 0.46666667 0.20000000 0.26666667 + 0.00000000 0.26666667 0.26666667 + 0.06666667 0.26666667 0.26666667 + 0.13333333 0.26666667 0.26666667 + 0.20000000 0.26666667 0.26666667 + 0.26666667 0.26666667 0.26666667 + 0.33333333 0.26666667 0.26666667 + 0.40000000 0.26666667 0.26666667 + 0.46666667 0.26666667 0.26666667 + 0.00000000 0.33333333 0.26666667 + 0.06666667 0.33333333 0.26666667 + 0.13333333 0.33333333 0.26666667 + 0.20000000 0.33333333 0.26666667 + 0.26666667 0.33333333 0.26666667 + 0.33333333 0.33333333 0.26666667 + 0.40000000 0.33333333 0.26666667 + 0.46666667 0.33333333 0.26666667 + 0.00000000 0.40000000 0.26666667 + 0.06666667 0.40000000 0.26666667 + 0.13333333 0.40000000 0.26666667 + 0.20000000 0.40000000 0.26666667 + 0.26666667 0.40000000 0.26666667 + 0.33333333 0.40000000 0.26666667 + 0.40000000 0.40000000 0.26666667 + 0.46666667 0.40000000 0.26666667 + 0.00000000 0.46666667 0.26666667 + 0.06666667 0.46666667 0.26666667 + 0.13333333 0.46666667 0.26666667 + 0.20000000 0.46666667 0.26666667 + 0.26666667 0.46666667 0.26666667 + 0.33333333 0.46666667 0.26666667 + 0.40000000 0.46666667 0.26666667 + 0.46666667 0.46666667 0.26666667 + 0.00000000 0.00000000 0.33333333 + 0.06666667 0.00000000 0.33333333 + 0.13333333 0.00000000 0.33333333 + 0.20000000 0.00000000 0.33333333 + 0.26666667 0.00000000 0.33333333 + 0.33333333 0.00000000 0.33333333 + 0.40000000 0.00000000 0.33333333 + 0.46666667 0.00000000 0.33333333 + 0.00000000 0.06666667 0.33333333 + 0.06666667 0.06666667 0.33333333 + 0.13333333 0.06666667 0.33333333 + 0.20000000 0.06666667 0.33333333 + 0.26666667 0.06666667 0.33333333 + 0.33333333 0.06666667 0.33333333 + 0.40000000 0.06666667 0.33333333 + 0.46666667 0.06666667 0.33333333 + 0.00000000 0.13333333 0.33333333 + 0.06666667 0.13333333 0.33333333 + 0.13333333 0.13333333 0.33333333 + 0.20000000 0.13333333 0.33333333 + 0.26666667 0.13333333 0.33333333 + 0.33333333 0.13333333 0.33333333 + 0.40000000 0.13333333 0.33333333 + 0.46666667 0.13333333 0.33333333 + 0.00000000 0.20000000 0.33333333 + 0.06666667 0.20000000 0.33333333 + 0.13333333 0.20000000 0.33333333 + 0.20000000 0.20000000 0.33333333 + 0.26666667 0.20000000 0.33333333 + 0.33333333 0.20000000 0.33333333 + 0.40000000 0.20000000 0.33333333 + 0.46666667 0.20000000 0.33333333 + 0.00000000 0.26666667 0.33333333 + 0.06666667 0.26666667 0.33333333 + 0.13333333 0.26666667 0.33333333 + 0.20000000 0.26666667 0.33333333 + 0.26666667 0.26666667 0.33333333 + 0.33333333 0.26666667 0.33333333 + 0.40000000 0.26666667 0.33333333 + 0.46666667 0.26666667 0.33333333 + 0.00000000 0.33333333 0.33333333 + 0.06666667 0.33333333 0.33333333 + 0.13333333 0.33333333 0.33333333 + 0.20000000 0.33333333 0.33333333 + 0.26666667 0.33333333 0.33333333 + 0.33333333 0.33333333 0.33333333 + 0.40000000 0.33333333 0.33333333 + 0.46666667 0.33333333 0.33333333 + 0.00000000 0.40000000 0.33333333 + 0.06666667 0.40000000 0.33333333 + 0.13333333 0.40000000 0.33333333 + 0.20000000 0.40000000 0.33333333 + 0.26666667 0.40000000 0.33333333 + 0.33333333 0.40000000 0.33333333 + 0.40000000 0.40000000 0.33333333 + 0.46666667 0.40000000 0.33333333 + 0.00000000 0.46666667 0.33333333 + 0.06666667 0.46666667 0.33333333 + 0.13333333 0.46666667 0.33333333 + 0.20000000 0.46666667 0.33333333 + 0.26666667 0.46666667 0.33333333 + 0.33333333 0.46666667 0.33333333 + 0.40000000 0.46666667 0.33333333 + 0.46666667 0.46666667 0.33333333 + 0.00000000 0.00000000 0.40000000 + 0.06666667 0.00000000 0.40000000 + 0.13333333 0.00000000 0.40000000 + 0.20000000 0.00000000 0.40000000 + 0.26666667 0.00000000 0.40000000 + 0.33333333 0.00000000 0.40000000 + 0.40000000 0.00000000 0.40000000 + 0.46666667 0.00000000 0.40000000 + 0.00000000 0.06666667 0.40000000 + 0.06666667 0.06666667 0.40000000 + 0.13333333 0.06666667 0.40000000 + 0.20000000 0.06666667 0.40000000 + 0.26666667 0.06666667 0.40000000 + 0.33333333 0.06666667 0.40000000 + 0.40000000 0.06666667 0.40000000 + 0.46666667 0.06666667 0.40000000 + 0.00000000 0.13333333 0.40000000 + 0.06666667 0.13333333 0.40000000 + 0.13333333 0.13333333 0.40000000 + 0.20000000 0.13333333 0.40000000 + 0.26666667 0.13333333 0.40000000 + 0.33333333 0.13333333 0.40000000 + 0.40000000 0.13333333 0.40000000 + 0.46666667 0.13333333 0.40000000 + 0.00000000 0.20000000 0.40000000 + 0.06666667 0.20000000 0.40000000 + 0.13333333 0.20000000 0.40000000 + 0.20000000 0.20000000 0.40000000 + 0.26666667 0.20000000 0.40000000 + 0.33333333 0.20000000 0.40000000 + 0.40000000 0.20000000 0.40000000 + 0.46666667 0.20000000 0.40000000 + 0.00000000 0.26666667 0.40000000 + 0.06666667 0.26666667 0.40000000 + 0.13333333 0.26666667 0.40000000 + 0.20000000 0.26666667 0.40000000 + 0.26666667 0.26666667 0.40000000 + 0.33333333 0.26666667 0.40000000 + 0.40000000 0.26666667 0.40000000 + 0.46666667 0.26666667 0.40000000 + 0.00000000 0.33333333 0.40000000 + 0.06666667 0.33333333 0.40000000 + 0.13333333 0.33333333 0.40000000 + 0.20000000 0.33333333 0.40000000 + 0.26666667 0.33333333 0.40000000 + 0.33333333 0.33333333 0.40000000 + 0.40000000 0.33333333 0.40000000 + 0.46666667 0.33333333 0.40000000 + 0.00000000 0.40000000 0.40000000 + 0.06666667 0.40000000 0.40000000 + 0.13333333 0.40000000 0.40000000 + 0.20000000 0.40000000 0.40000000 + 0.26666667 0.40000000 0.40000000 + 0.33333333 0.40000000 0.40000000 + 0.40000000 0.40000000 0.40000000 + 0.46666667 0.40000000 0.40000000 + 0.00000000 0.46666667 0.40000000 + 0.06666667 0.46666667 0.40000000 + 0.13333333 0.46666667 0.40000000 + 0.20000000 0.46666667 0.40000000 + 0.26666667 0.46666667 0.40000000 + 0.33333333 0.46666667 0.40000000 + 0.40000000 0.46666667 0.40000000 + 0.46666667 0.46666667 0.40000000 + 0.00000000 0.00000000 0.46666667 + 0.06666667 0.00000000 0.46666667 + 0.13333333 0.00000000 0.46666667 + 0.20000000 0.00000000 0.46666667 + 0.26666667 0.00000000 0.46666667 + 0.33333333 0.00000000 0.46666667 + 0.40000000 0.00000000 0.46666667 + 0.46666667 0.00000000 0.46666667 + 0.00000000 0.06666667 0.46666667 + 0.06666667 0.06666667 0.46666667 + 0.13333333 0.06666667 0.46666667 + 0.20000000 0.06666667 0.46666667 + 0.26666667 0.06666667 0.46666667 + 0.33333333 0.06666667 0.46666667 + 0.40000000 0.06666667 0.46666667 + 0.46666667 0.06666667 0.46666667 + 0.00000000 0.13333333 0.46666667 + 0.06666667 0.13333333 0.46666667 + 0.13333333 0.13333333 0.46666667 + 0.20000000 0.13333333 0.46666667 + 0.26666667 0.13333333 0.46666667 + 0.33333333 0.13333333 0.46666667 + 0.40000000 0.13333333 0.46666667 + 0.46666667 0.13333333 0.46666667 + 0.00000000 0.20000000 0.46666667 + 0.06666667 0.20000000 0.46666667 + 0.13333333 0.20000000 0.46666667 + 0.20000000 0.20000000 0.46666667 + 0.26666667 0.20000000 0.46666667 + 0.33333333 0.20000000 0.46666667 + 0.40000000 0.20000000 0.46666667 + 0.46666667 0.20000000 0.46666667 + 0.00000000 0.26666667 0.46666667 + 0.06666667 0.26666667 0.46666667 + 0.13333333 0.26666667 0.46666667 + 0.20000000 0.26666667 0.46666667 + 0.26666667 0.26666667 0.46666667 + 0.33333333 0.26666667 0.46666667 + 0.40000000 0.26666667 0.46666667 + 0.46666667 0.26666667 0.46666667 + 0.00000000 0.33333333 0.46666667 + 0.06666667 0.33333333 0.46666667 + 0.13333333 0.33333333 0.46666667 + 0.20000000 0.33333333 0.46666667 + 0.26666667 0.33333333 0.46666667 + 0.33333333 0.33333333 0.46666667 + 0.40000000 0.33333333 0.46666667 + 0.46666667 0.33333333 0.46666667 + 0.00000000 0.40000000 0.46666667 + 0.06666667 0.40000000 0.46666667 + 0.13333333 0.40000000 0.46666667 + 0.20000000 0.40000000 0.46666667 + 0.26666667 0.40000000 0.46666667 + 0.33333333 0.40000000 0.46666667 + 0.40000000 0.40000000 0.46666667 + 0.46666667 0.40000000 0.46666667 + 0.00000000 0.46666667 0.46666667 + 0.06666667 0.46666667 0.46666667 + 0.13333333 0.46666667 0.46666667 + 0.20000000 0.46666667 0.46666667 + 0.26666667 0.46666667 0.46666667 + 0.33333333 0.46666667 0.46666667 + 0.40000000 0.46666667 0.46666667 + 0.46666667 0.46666667 0.46666667 + + + 0.00029630 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + + + + + unknown system + F + + + normal + 600.00000000 + 1293.44900000 + 0.00000100 + 48 + 10 + 18 + 26.00000000 + 0 + 0 + 0 + 0 + 0.00000000 + + 0 + 0.10000000 + 0.50000000 + T + + + F + 0.00000000 0.00000000 + -100 + 2 + F + + + 0 + 2 + 1 + + + 1 + F + 1.00000000 1.00000000 1.00000000 1.00000000 + -1.00000000 + F + 0.00000000 0.00000000 1.00000000 + F + 0.00000000 0.00000000 0.00000000 + F + + + F + F + + + 100 + -5 + 2 + 600.00000000 + + T + F + 0.00000000 + 0.00000001 + 0.30000000 + 4 + 0.40000000 + + + + 0.40000000 + 1.00000000 + 0.10000000 + 1.60000000 + 1.00000000 + + 4 + F + -45 + 100.00000000 + 1 + 1 + 5 + + + + F + F + 0 + 1.00000000 + -100.00000000 -100.00000000 -100.00000000 + 0.00000000 + + + + 24 + 24 + 20 + 48 + 48 + 40 + F + + + 0 + -1 + 0 + 2 + 0.00000000 + 0.00100000 + 0 + 0.50000000 + -3.00000000 + 1.00000000 + + + 3500.00000000 + 3500.00000000 + 1 + 1 + 256 + 16.00000000 + + + 2 + 0.00001000 + + + 0 + -1.00000000 -1.00000000 + 301 + 10.00000000 + -10.00000000 + 0.00000000 + + + 2 + T + F + T + F + F + F + F + F + 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 + + + 9 + 4 + -1 + T + T + F + F + F + F + + + 3 + 0 + F + 183.85000000 9.01300000 + 0.00000000 0.00000000 + 1.00000000 1.00000000 + T + + T + F + 0 + F + 0 + + -- + 0 + F + + F + F + F + F + F + -1.00000000 + 0 + 0 + 0.00000000 + 0.00000000 + 0.00000000 + 1.00000000 + 1.00000000 + 1.00000000 + 1.00000000 + 1 + 1 + 1 + F + F + F + 0 + 0 + F + 0.00000000 + 0.00000000 + 0 + + + F + -0.84910000 + 0.12340000 + 1.00000000 + 0.00000000 + + + 0 + 6.22065547 + 1.00000000 + + + F + F + F + F + 0 + 0.10000000 + -1.00000000 + 0.00200000 + -0.10000000 + 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 + + + F + 0.00000000 0.00000000 0.00000000 + T + F + F + F + T + 0 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + + + F + F + F + T + 0 + -1 0 0 0 + F + F + F + F + F + 2 + F + F + F + -2.00000000 + -2.00000000 + -1.00000000 + -1 + 0.00000000 + 0 + 0 + -1 + -1 + -1 + 100 + 1 + 3 + 0 + -30.00000000 + -30.00000000 + -200.00000000 + 140 + -0.10000000 + F + F + F + F + F + F + F + 1 + 1 + 1 + 2800 + 0 + 1 + -1 + 1.00000000 + + + 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 + 0.00000000 + 0.00000000 + + + + 4 + 2 + + ion + element + atomtype + + W 1 + Be 2 + Be 2 + Be 2 + + + + type + atomspertype + element + mass + valence + pseudopotential + + 1W 183.85000000 14.00000000 PAW_PBE W_sv_GW 23Mar2010 + 3Be 9.01300000 4.00000000 PAW_PBE Be_sv_GW 31Mar2010 + + + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.50000000 0.50000000 + 0.50000000 0.00000000 0.50000000 + 0.50000000 0.50000000 0.00000000 + + + + + + + + + + 131.43308500 + -1959.85115532 + -527.41646070 + 35.33916255 + 1941.62980019 + -1939.43826086 + -0.00530052 + -1293.52360327 + 3036.59145287 + -575.24128006 + -575.23597954 + -575.23862980 + + + + + + + + + 102.38566418 + 102.39047960 + 102.38807189 + + + + + + + + + -28.97782713 + -28.97098459 + -28.97440586 + + + + + + + + + -49.69418359 + -49.68840810 + -49.69129585 + + + + + + + + + -51.91588940 + -51.91302415 + -51.91445678 + + + + + + + + + -48.35881744 + -48.35566410 + -48.35724077 + + + + + + + + + -48.54575148 + -48.54295784 + -48.54435466 + + + + + + + + + -48.07609882 + -48.07342458 + -48.07476170 + + + + + + + + + -48.12313644 + -48.12026988 + -48.12170316 + + + + + + + + + -48.09347519 + -48.09050147 + -48.09198833 + + + + + + + + + -48.07191482 + -48.06891772 + -48.07041627 + + + + + + + + + -48.07102791 + -48.06801376 + -48.06952083 + + + + + + + + + -48.07113736 + -48.06809293 + -48.06961515 + + + + + + + + + -48.07118539 + -48.06814100 + -48.06966319 + + + + + + + + + -48.07110546 + -48.06805494 + -48.06958020 + + + + + + + + + -48.07109869 + -48.06804980 + -48.06957425 + + + + + + + + + -48.07109883 + -48.06804872 + -48.06957377 + + + + + + + + + -48.07109628 + -48.06804655 + -48.06957141 + + + + + + + + + 131.43308500 + -1959.85115532 + -480.61520692 + 33.47431066 + 3204.45646866 + -3203.57677692 + -0.00304986 + -809.98022412 + 3036.59145287 + -48.07109596 + -48.06804610 + -48.06957103 + + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.50000000 0.50000000 + 0.50000000 0.00000000 0.50000000 + 0.50000000 0.50000000 0.00000000 + + + + 0.1 -0.2 -0.3 + 0.4 -0.5 -0.6 + + + -214.84833704 0.00000000 0.00000000 + 0.00000000 -123.75352996 0.00000000 + 0.00000000 -0.00000000 100.18545515 + + + -48.07109596 + -48.06957103 + -0.00304986 + + + + + band + kpoint + spin + eigene + occ + + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7478 1.0000 + -30.0216 1.0000 + -29.9884 1.0000 + -29.8113 1.0000 + -2.0041 1.0000 + 4.4237 1.0000 + 4.8277 1.0000 + 6.4981 1.0000 + 6.9617 1.0000 + 8.1586 0.0000 + 8.8821 0.0000 + 8.9648 0.0000 + 9.0855 0.0000 + 13.1593 0.0000 + 14.6689 0.0000 + + + -91.8808 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7478 1.0000 + -30.0237 1.0000 + -29.9882 1.0000 + -29.8111 1.0000 + -1.9535 1.0000 + 4.3336 1.0000 + 4.8001 1.0000 + 6.5232 1.0000 + 6.7555 1.0000 + 8.3862 0.0000 + 8.4025 0.0000 + 8.9705 0.0000 + 9.5855 0.0000 + 13.3605 0.0000 + 14.6572 0.0000 + + + -91.8814 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7477 1.0000 + -30.0297 1.0000 + -29.9877 1.0000 + -29.8105 1.0000 + -1.8058 1.0000 + 4.0326 1.0000 + 4.7589 1.0000 + 6.3613 1.0000 + 6.6323 1.0000 + 7.8755 0.5410 + 8.8446 0.0000 + 8.9868 0.0000 + 10.1754 0.0000 + 14.0117 0.0000 + 14.7252 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7475 1.0000 + -30.0383 1.0000 + -29.9868 1.0000 + -29.8096 1.0000 + -1.5620 1.0000 + 3.5407 1.0000 + 4.7314 1.0000 + 5.9618 1.0000 + 6.8672 1.0000 + 7.4063 1.0000 + 9.0110 0.0000 + 9.3490 0.0000 + 10.7563 0.0000 + 14.0913 0.0000 + 15.1642 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7473 1.0000 + -30.0481 1.0000 + -29.9858 1.0000 + -29.8086 1.0000 + -1.2340 1.0000 + 2.9354 1.0000 + 4.7102 1.0000 + 5.6128 1.0000 + 7.0130 1.0000 + 7.2261 1.0000 + 9.0390 0.0000 + 9.8394 0.0000 + 11.3191 0.0000 + 14.0352 0.0000 + 15.4144 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7471 1.0000 + -30.0576 1.0000 + -29.9848 1.0000 + -29.8076 1.0000 + -0.8326 1.0000 + 2.2914 1.0000 + 4.6917 1.0000 + 5.3376 1.0000 + 6.7081 1.0000 + 7.6717 0.9986 + 9.0662 0.0000 + 10.2804 0.0000 + 11.8535 0.0000 + 13.4527 0.0000 + 14.9300 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7470 1.0000 + -30.0651 1.0000 + -29.9841 1.0000 + -29.8068 1.0000 + -0.3829 1.0000 + 1.6674 1.0000 + 4.6772 1.0000 + 5.1483 1.0000 + 6.5003 1.0000 + 8.1260 0.0003 + 9.0876 0.0000 + 10.6305 0.0000 + 12.3305 0.0000 + 12.9072 0.0000 + 15.1709 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7470 1.0000 + -30.0692 1.0000 + -29.9837 1.0000 + -29.8064 1.0000 + 0.0259 1.0000 + 1.1640 1.0000 + 4.6691 1.0000 + 5.0521 1.0000 + 6.3951 1.0000 + 8.4419 0.0000 + 9.0994 0.0000 + 10.8329 0.0000 + 12.5866 0.0000 + 12.7497 0.0000 + 15.0542 0.0000 + + + -91.8808 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7478 1.0000 + -30.0213 1.0000 + -29.9915 1.0000 + -29.8110 1.0000 + -1.9529 1.0000 + 4.3901 1.0000 + 4.7755 1.0000 + 6.3415 1.0000 + 6.9388 1.0000 + 8.3265 0.0000 + 8.4311 0.0000 + 8.8898 0.0000 + 9.6264 0.0000 + 13.5937 0.0000 + 14.7192 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7477 1.0000 + -30.0234 1.0000 + -29.9912 1.0000 + -29.8108 1.0000 + -1.9023 1.0000 + 4.3246 1.0000 + 4.7293 1.0000 + 6.2087 1.0000 + 6.9819 1.0000 + 8.2546 0.0000 + 8.4565 0.0000 + 8.8007 0.0000 + 9.9214 0.0000 + 13.6485 0.0000 + 14.6504 0.0000 + + + -91.8811 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7476 1.0000 + -30.0294 1.0000 + -29.9906 1.0000 + -29.8102 1.0000 + -1.7528 1.0000 + 4.0516 1.0000 + 4.6663 1.0000 + 5.9785 1.0000 + 7.0276 1.0000 + 7.8427 0.7144 + 8.7719 0.0000 + 8.8056 0.0000 + 10.4508 0.0000 + 14.3989 0.0000 + 15.1127 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7474 1.0000 + -30.0379 1.0000 + -29.9898 1.0000 + -29.8093 1.0000 + -1.5097 1.0000 + 3.5587 1.0000 + 4.6450 1.0000 + 5.7408 1.0000 + 7.1387 1.0000 + 7.4085 1.0000 + 8.7921 0.0000 + 9.2640 0.0000 + 11.0130 0.0000 + 14.0760 0.0000 + 15.2142 0.0000 + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2903 1.0000 + -65.7472 1.0000 + -30.0478 1.0000 + -29.9888 1.0000 + -29.8083 1.0000 + -1.1815 1.0000 + 2.9494 1.0000 + 4.6412 1.0000 + 5.4944 1.0000 + 7.0285 1.0000 + 7.3926 1.0000 + 8.8271 0.0000 + 9.7408 0.0000 + 11.5692 0.0000 + 13.8620 0.0000 + 14.8771 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7471 1.0000 + -30.0573 1.0000 + -29.9878 1.0000 + -29.8073 1.0000 + -0.7815 1.0000 + 2.3062 1.0000 + 4.6436 1.0000 + 5.2669 1.0000 + 6.7293 1.0000 + 7.7653 0.9516 + 8.8638 0.0000 + 10.1806 0.0000 + 12.1051 0.0000 + 13.3952 0.0000 + 14.8765 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7470 1.0000 + -30.0648 1.0000 + -29.9871 1.0000 + -29.8065 1.0000 + -0.3310 1.0000 + 1.6815 1.0000 + 4.6514 1.0000 + 5.0908 1.0000 + 6.5240 1.0000 + 8.1695 0.0000 + 8.8934 0.0000 + 10.5364 0.0000 + 12.5997 0.0000 + 12.8998 0.0000 + 15.5154 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7469 1.0000 + -30.0689 1.0000 + -29.9867 1.0000 + -29.8062 1.0000 + 0.0847 1.0000 + 1.1741 1.0000 + 4.6613 1.0000 + 4.9916 1.0000 + 6.4197 1.0000 + 8.4555 0.0000 + 8.9099 0.0000 + 10.7473 0.0000 + 12.4480 0.0000 + 12.9600 0.0000 + 14.8774 0.0000 + + + -91.8810 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7476 1.0000 + -30.0204 1.0000 + -29.9998 1.0000 + -29.8102 1.0000 + -1.7946 1.0000 + 4.2094 1.0000 + 4.6772 1.0000 + 5.9995 1.0000 + 6.9517 1.0000 + 7.8739 0.5498 + 8.7041 0.0000 + 8.9110 0.0000 + 10.2112 0.0000 + 14.2659 0.0000 + 14.8795 0.0000 + + + -91.8814 1.0000 + -91.4263 1.0000 + -91.2912 1.0000 + -65.7476 1.0000 + -30.0226 1.0000 + -29.9996 1.0000 + -29.8099 1.0000 + -1.7450 1.0000 + 4.2129 1.0000 + 4.5661 1.0000 + 5.8355 1.0000 + 7.1501 1.0000 + 7.8382 0.7357 + 8.7026 0.0000 + 8.7336 0.0000 + 10.4623 0.0000 + 13.8631 0.0000 + 14.8598 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7475 1.0000 + -30.0285 1.0000 + -29.9991 1.0000 + -29.8093 1.0000 + -1.5968 1.0000 + 4.0989 1.0000 + 4.3522 1.0000 + 5.6129 1.0000 + 7.4328 1.0000 + 7.6870 0.9972 + 8.4839 0.0000 + 8.7940 0.0000 + 10.9754 0.0000 + 14.1029 0.0000 + 15.2039 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7473 1.0000 + -30.0371 1.0000 + -29.9982 1.0000 + -29.8084 1.0000 + -1.3533 1.0000 + 3.5980 1.0000 + 4.3620 1.0000 + 5.4512 1.0000 + 7.3952 1.0000 + 7.5979 1.0000 + 8.3845 0.0000 + 9.0910 0.0000 + 11.5502 0.0000 + 14.7238 0.0000 + 15.9954 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7471 1.0000 + -30.0470 1.0000 + -29.9972 1.0000 + -29.8074 1.0000 + -1.0273 1.0000 + 2.9802 1.0000 + 4.4181 1.0000 + 5.2968 1.0000 + 7.0683 1.0000 + 7.7534 0.9663 + 8.3858 0.0000 + 9.5100 0.0000 + 12.1157 0.0000 + 13.7017 0.0000 + 16.0755 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2911 1.0000 + -65.7470 1.0000 + -30.0566 1.0000 + -29.9963 1.0000 + -29.8065 1.0000 + -0.6301 1.0000 + 2.3392 1.0000 + 4.4826 1.0000 + 5.1281 1.0000 + 6.7895 1.0000 + 7.9927 0.0600 + 8.4203 0.0000 + 9.9342 0.0000 + 12.6686 0.0000 + 14.6904 0.0000 + 16.3415 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7468 1.0000 + -30.0640 1.0000 + -29.9955 1.0000 + -29.8057 1.0000 + -0.1783 1.0000 + 1.7219 1.0000 + 4.5543 1.0000 + 4.9634 1.0000 + 6.5924 1.0000 + 8.2811 0.0000 + 8.4564 0.0000 + 10.2930 0.0000 + 12.6655 0.0000 + 13.2024 0.0000 + 15.4432 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7467 1.0000 + -30.0681 1.0000 + -29.9951 1.0000 + -29.8053 1.0000 + 0.2566 1.0000 + 1.2033 1.0000 + 4.6272 1.0000 + 4.8360 1.0000 + 6.4912 1.0000 + 8.4783 0.0000 + 8.4935 0.0000 + 10.5194 0.0000 + 12.2814 0.0000 + 13.6544 0.0000 + 14.8524 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7473 1.0000 + -30.0191 1.0000 + -30.0121 1.0000 + -29.8089 1.0000 + -1.5376 1.0000 + 3.7788 1.0000 + 4.6305 1.0000 + 5.6232 1.0000 + 7.1210 1.0000 + 7.3732 1.0000 + 8.9428 0.0000 + 9.1443 0.0000 + 10.7771 0.0000 + 14.0933 0.0000 + 15.6423 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7473 1.0000 + -30.0213 1.0000 + -30.0119 1.0000 + -29.8086 1.0000 + -1.4880 1.0000 + 3.7961 1.0000 + 4.5072 1.0000 + 5.5227 1.0000 + 7.3126 1.0000 + 7.3745 1.0000 + 8.7532 0.0000 + 9.0824 0.0000 + 11.0146 0.0000 + 13.9004 0.0000 + 15.4021 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7472 1.0000 + -30.0271 1.0000 + -30.0113 1.0000 + -29.8080 1.0000 + -1.3394 1.0000 + 3.8230 1.0000 + 4.1696 1.0000 + 5.3756 1.0000 + 7.3639 1.0000 + 7.6935 0.9963 + 8.3844 0.0000 + 8.9738 0.0000 + 11.5333 0.0000 + 14.0395 0.0000 + 15.4431 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7470 1.0000 + -30.0358 1.0000 + -30.0105 1.0000 + -29.8072 1.0000 + -1.1004 1.0000 + 3.5412 1.0000 + 4.0159 1.0000 + 5.2627 1.0000 + 7.2896 1.0000 + 7.9988 0.0504 + 8.0788 0.0028 + 9.0073 0.0000 + 12.1244 0.0000 + 13.7520 0.0000 + 16.7152 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7468 1.0000 + -30.0459 1.0000 + -30.0096 1.0000 + -29.8061 1.0000 + -0.7790 1.0000 + 2.9721 1.0000 + 4.1076 1.0000 + 5.1462 1.0000 + 7.1030 1.0000 + 7.9500 0.1708 + 8.1422 0.0001 + 9.2822 0.0000 + 12.7110 0.0000 + 13.3886 0.0000 + 15.6710 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7467 1.0000 + -30.0554 1.0000 + -30.0087 1.0000 + -29.8053 1.0000 + -0.3863 1.0000 + 2.3710 1.0000 + 4.2299 1.0000 + 5.0035 1.0000 + 6.8764 1.0000 + 7.9435 0.1954 + 8.2650 0.0000 + 9.6513 0.0000 + 12.8907 0.0000 + 13.2663 0.0000 + 15.5200 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7465 1.0000 + -30.0629 1.0000 + -30.0079 1.0000 + -29.8045 1.0000 + 0.0623 1.0000 + 1.7821 1.0000 + 4.3653 1.0000 + 4.8399 1.0000 + 6.6971 1.0000 + 7.9722 0.1031 + 8.4241 0.0000 + 9.9878 0.0000 + 12.3795 0.0000 + 13.7744 0.0000 + 15.4918 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7464 1.0000 + -30.0669 1.0000 + -30.0075 1.0000 + -29.8040 1.0000 + 0.5200 1.0000 + 1.2543 1.0000 + 4.5122 1.0000 + 4.6723 1.0000 + 6.6015 1.0000 + 7.9946 0.0570 + 8.5494 0.0000 + 10.2089 0.0000 + 12.0275 0.0000 + 14.4133 0.0000 + 15.6167 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2908 1.0000 + -65.7470 1.0000 + -30.0263 1.0000 + -30.0177 1.0000 + -29.8073 1.0000 + -1.1910 1.0000 + 3.1811 1.0000 + 4.6122 1.0000 + 5.2814 1.0000 + 6.9503 1.0000 + 7.4746 1.0000 + 8.9798 0.0000 + 9.5814 0.0000 + 11.3283 0.0000 + 13.6460 0.0000 + 15.5948 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7470 1.0000 + -30.0261 1.0000 + -30.0198 1.0000 + -29.8072 1.0000 + -1.1414 1.0000 + 3.1889 1.0000 + 4.5083 1.0000 + 5.2434 1.0000 + 6.9639 1.0000 + 7.6097 0.9999 + 8.7962 0.0000 + 9.4992 0.0000 + 11.5568 0.0000 + 13.6608 0.0000 + 15.2250 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7469 1.0000 + -30.0257 1.0000 + -30.0255 1.0000 + -29.8066 1.0000 + -0.9957 1.0000 + 3.1942 1.0000 + 4.2418 1.0000 + 5.1757 1.0000 + 7.0004 1.0000 + 7.9287 0.2579 + 8.4011 0.0000 + 9.3080 0.0000 + 12.0788 0.0000 + 13.5578 0.0000 + 15.2519 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7467 1.0000 + -30.0345 1.0000 + -30.0247 1.0000 + -29.8057 1.0000 + -0.7602 1.0000 + 3.1062 1.0000 + 3.9790 1.0000 + 5.1030 1.0000 + 7.0431 1.0000 + 7.9901 0.0646 + 8.2728 0.0000 + 9.1426 0.0000 + 12.6730 0.0000 + 13.3289 0.0000 + 15.7896 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7465 1.0000 + -30.0445 1.0000 + -30.0237 1.0000 + -29.8047 1.0000 + -0.4475 1.0000 + 2.8028 1.0000 + 3.9098 1.0000 + 5.0079 1.0000 + 7.0489 1.0000 + 7.6784 0.9981 + 8.4720 0.0000 + 9.1821 0.0000 + 12.9563 0.0000 + 13.5965 0.0000 + 17.2388 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7463 1.0000 + -30.0541 1.0000 + -30.0228 1.0000 + -29.8038 1.0000 + -0.0679 1.0000 + 2.3493 1.0000 + 3.9944 1.0000 + 4.8777 1.0000 + 6.9573 1.0000 + 7.5462 1.0000 + 8.5230 0.0000 + 9.4304 0.0000 + 12.4873 0.0000 + 13.6262 0.0000 + 16.0306 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7461 1.0000 + -30.0615 1.0000 + -30.0221 1.0000 + -29.8030 1.0000 + 0.3633 1.0000 + 1.8487 1.0000 + 4.1415 1.0000 + 4.7166 1.0000 + 6.8214 1.0000 + 7.5399 1.0000 + 8.5695 0.0000 + 9.7014 0.0000 + 12.0422 0.0000 + 13.9068 0.0000 + 16.1837 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7461 1.0000 + -30.0656 1.0000 + -30.0217 1.0000 + -29.8026 1.0000 + 0.8283 1.0000 + 1.3477 1.0000 + 4.3004 1.0000 + 4.5506 1.0000 + 6.7365 1.0000 + 7.5567 1.0000 + 8.6157 0.0000 + 9.8832 0.0000 + 11.7458 0.0000 + 14.0429 0.0000 + 16.0539 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7468 1.0000 + -30.0398 1.0000 + -30.0163 1.0000 + -29.8059 1.0000 + -0.7675 1.0000 + 2.5196 1.0000 + 4.5999 1.0000 + 5.0061 1.0000 + 6.6208 1.0000 + 7.9708 0.1066 + 9.0157 0.0000 + 9.9775 0.0000 + 11.8614 0.0000 + 13.1993 0.0000 + 15.3650 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7467 1.0000 + -30.0395 1.0000 + -30.0184 1.0000 + -29.8057 1.0000 + -0.7188 1.0000 + 2.5262 1.0000 + 4.5193 1.0000 + 4.9986 1.0000 + 6.6392 1.0000 + 8.0523 0.0083 + 8.8426 0.0000 + 9.8894 0.0000 + 12.0868 0.0000 + 13.1663 0.0000 + 16.1220 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7466 1.0000 + -30.0390 1.0000 + -30.0243 1.0000 + -29.8052 1.0000 + -0.5758 1.0000 + 2.5363 1.0000 + 4.3168 1.0000 + 4.9744 1.0000 + 6.6919 1.0000 + 8.2598 0.0000 + 8.4520 0.0000 + 9.6694 0.0000 + 12.6304 0.0000 + 13.0732 0.0000 + 15.6443 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7465 1.0000 + -30.0382 1.0000 + -30.0332 1.0000 + -29.8043 1.0000 + -0.3483 1.0000 + 2.5183 1.0000 + 4.0832 1.0000 + 4.9265 1.0000 + 6.7709 1.0000 + 8.0186 0.0274 + 8.5126 0.0000 + 9.4183 0.0000 + 12.8043 0.0000 + 13.1910 0.0000 + 15.7181 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7462 1.0000 + -30.0432 1.0000 + -30.0373 1.0000 + -29.8034 1.0000 + -0.0478 1.0000 + 2.4216 1.0000 + 3.9190 1.0000 + 4.8440 1.0000 + 6.8610 1.0000 + 7.6333 0.9998 + 8.7054 0.0000 + 9.2656 0.0000 + 12.4562 0.0000 + 13.6001 0.0000 + 16.2032 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7460 1.0000 + -30.0528 1.0000 + -30.0364 1.0000 + -29.8024 1.0000 + 0.3045 1.0000 + 2.2066 1.0000 + 3.8869 1.0000 + 4.7195 1.0000 + 6.9324 1.0000 + 7.3479 1.0000 + 8.7335 0.0000 + 9.3281 0.0000 + 12.0629 0.0000 + 13.7569 0.0000 + 16.5710 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7459 1.0000 + -30.0602 1.0000 + -30.0357 1.0000 + -29.8017 1.0000 + 0.6908 1.0000 + 1.8937 1.0000 + 3.9664 1.0000 + 4.5594 1.0000 + 6.9277 1.0000 + 7.2186 1.0000 + 8.6985 0.0000 + 9.4867 0.0000 + 11.7099 0.0000 + 13.7542 0.0000 + 16.7032 0.0000 + + + -91.8786 1.0000 + -91.4236 1.0000 + -91.2886 1.0000 + -65.7457 1.0000 + -30.0642 1.0000 + -30.0352 1.0000 + -29.8012 1.0000 + 1.0768 1.0000 + 1.5402 1.0000 + 4.0958 1.0000 + 4.3989 1.0000 + 6.8746 1.0000 + 7.2086 1.0000 + 8.6828 0.0000 + 9.6000 0.0000 + 11.4903 0.0000 + 13.7171 0.0000 + 16.6030 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7465 1.0000 + -30.0502 1.0000 + -30.0152 1.0000 + -29.8048 1.0000 + -0.2969 1.0000 + 1.8722 1.0000 + 4.5904 1.0000 + 4.8147 1.0000 + 6.3956 1.0000 + 8.5207 0.0000 + 9.0442 0.0000 + 10.2923 0.0000 + 12.3631 0.0000 + 12.6799 0.0000 + 15.4633 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7465 1.0000 + -30.0501 1.0000 + -30.0173 1.0000 + -29.8046 1.0000 + -0.2476 1.0000 + 1.8793 1.0000 + 4.5376 1.0000 + 4.8080 1.0000 + 6.4159 1.0000 + 8.5593 0.0000 + 8.8804 0.0000 + 10.2052 0.0000 + 12.5854 0.0000 + 12.5895 0.0000 + 14.7751 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7464 1.0000 + -30.0496 1.0000 + -30.0233 1.0000 + -29.8041 1.0000 + -0.1045 1.0000 + 1.8964 1.0000 + 4.3983 1.0000 + 4.7846 1.0000 + 6.4746 1.0000 + 8.5014 0.0000 + 8.6596 0.0000 + 9.9796 0.0000 + 12.4726 0.0000 + 13.1496 0.0000 + 15.1815 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7462 1.0000 + -30.0487 1.0000 + -30.0321 1.0000 + -29.8032 1.0000 + 0.1204 1.0000 + 1.9197 1.0000 + 4.2177 1.0000 + 4.7361 1.0000 + 6.5646 1.0000 + 8.0702 0.0040 + 8.7844 0.0000 + 9.6958 0.0000 + 12.2586 0.0000 + 13.7021 0.0000 + 15.4427 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7460 1.0000 + -30.0478 1.0000 + -30.0422 1.0000 + -29.8023 1.0000 + 0.4035 1.0000 + 1.9363 1.0000 + 4.0468 1.0000 + 4.6515 1.0000 + 6.6739 1.0000 + 7.6760 0.9983 + 8.8822 0.0000 + 9.4477 0.0000 + 11.9748 0.0000 + 13.8742 0.0000 + 16.0112 0.0000 + + + -91.8797 1.0000 + -91.4248 1.0000 + -91.2897 1.0000 + -65.7458 1.0000 + -30.0517 1.0000 + -30.0469 1.0000 + -29.8013 1.0000 + 0.7108 1.0000 + 1.9297 1.0000 + 3.9336 1.0000 + 4.5238 1.0000 + 6.7857 1.0000 + 7.3592 1.0000 + 8.8793 0.0000 + 9.3398 0.0000 + 11.6821 0.0000 + 13.7440 0.0000 + 16.5307 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7456 1.0000 + -30.0593 1.0000 + -30.0463 1.0000 + -29.8006 1.0000 + 0.9965 1.0000 + 1.8877 1.0000 + 3.9039 1.0000 + 4.3616 1.0000 + 6.8809 1.0000 + 7.1374 1.0000 + 8.7963 0.0000 + 9.3615 0.0000 + 11.4387 0.0000 + 13.5583 0.0000 + 16.9470 0.0000 + + + -91.8787 1.0000 + -91.4238 1.0000 + -91.2887 1.0000 + -65.7455 1.0000 + -30.0632 1.0000 + -30.0459 1.0000 + -29.8002 1.0000 + 1.1916 1.0000 + 1.8308 1.0000 + 3.9520 1.0000 + 4.2094 1.0000 + 6.9473 1.0000 + 7.0123 1.0000 + 8.7381 0.0000 + 9.3978 0.0000 + 11.2989 0.0000 + 13.4437 0.0000 + 16.5925 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7463 1.0000 + -30.0559 1.0000 + -30.0145 1.0000 + -29.8042 1.0000 + 0.1293 1.0000 + 1.3542 1.0000 + 4.5849 1.0000 + 4.7168 1.0000 + 6.2814 1.0000 + 8.9385 0.0000 + 9.0598 0.0000 + 10.4726 0.0000 + 12.1850 0.0000 + 12.8255 0.0000 + 15.1774 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7463 1.0000 + -30.0557 1.0000 + -30.0167 1.0000 + -29.8040 1.0000 + 0.1836 1.0000 + 1.3565 1.0000 + 4.5671 1.0000 + 4.6874 1.0000 + 6.3024 1.0000 + 8.9015 0.0000 + 8.9469 0.0000 + 10.3933 0.0000 + 12.1353 0.0000 + 13.0125 0.0000 + 15.3429 0.0000 + + + -91.8806 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7462 1.0000 + -30.0552 1.0000 + -30.0227 1.0000 + -29.8035 1.0000 + 0.3435 1.0000 + 1.3655 1.0000 + 4.4967 1.0000 + 4.6242 1.0000 + 6.3631 1.0000 + 8.5307 0.0000 + 8.9685 0.0000 + 10.1791 0.0000 + 12.0342 0.0000 + 13.5893 0.0000 + 16.0045 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7460 1.0000 + -30.0544 1.0000 + -30.0315 1.0000 + -29.8026 1.0000 + 0.5914 1.0000 + 1.3832 1.0000 + 4.3674 1.0000 + 4.5524 1.0000 + 6.4562 1.0000 + 8.1044 0.0009 + 8.9932 0.0000 + 9.8884 0.0000 + 11.8622 0.0000 + 14.2861 0.0000 + 15.0487 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7459 1.0000 + -30.0535 1.0000 + -30.0416 1.0000 + -29.8017 1.0000 + 0.8833 1.0000 + 1.4308 1.0000 + 4.2192 1.0000 + 4.4522 1.0000 + 6.5696 1.0000 + 7.7127 0.9919 + 9.0016 0.0000 + 9.5963 0.0000 + 11.6488 0.0000 + 14.0297 0.0000 + 15.9577 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7457 1.0000 + -30.0528 1.0000 + -30.0512 1.0000 + -29.8008 1.0000 + 1.1157 1.0000 + 1.5761 1.0000 + 4.0844 1.0000 + 4.3103 1.0000 + 6.6854 1.0000 + 7.3974 1.0000 + 8.9559 0.0000 + 9.3894 0.0000 + 11.4424 0.0000 + 13.7001 0.0000 + 16.5151 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7455 1.0000 + -30.0587 1.0000 + -30.0521 1.0000 + -29.8000 1.0000 + 1.2081 1.0000 + 1.8399 1.0000 + 3.9754 1.0000 + 4.1492 1.0000 + 6.7823 1.0000 + 7.1786 1.0000 + 8.8498 0.0000 + 9.3109 0.0000 + 11.2830 0.0000 + 13.4354 0.0000 + 16.6304 0.0000 + + + -91.8793 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7454 1.0000 + -30.0627 1.0000 + -30.0518 1.0000 + -29.7996 1.0000 + 1.2328 1.0000 + 2.0507 1.0000 + 3.8985 1.0000 + 4.0417 1.0000 + 6.8389 1.0000 + 7.0660 1.0000 + 8.7690 0.0000 + 9.2970 0.0000 + 11.2437 0.0000 + 14.1131 0.0000 + 18.0681 0.0000 + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7474 1.0000 + -30.0205 1.0000 + -29.9874 1.0000 + -29.8211 1.0000 + -1.9380 1.0000 + 4.4295 1.0000 + 4.8508 1.0000 + 6.3792 1.0000 + 6.8138 1.0000 + 8.1771 0.0000 + 8.8386 0.0000 + 8.9434 0.0000 + 9.0466 0.0000 + 13.4689 0.0000 + 14.8465 0.0000 + + + -91.8802 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7474 1.0000 + -30.0226 1.0000 + -29.9872 1.0000 + -29.8209 1.0000 + -1.8859 1.0000 + 4.3438 1.0000 + 4.8274 1.0000 + 6.3656 1.0000 + 6.6651 1.0000 + 8.2366 0.0000 + 8.4561 0.0000 + 9.1702 0.0000 + 9.3749 0.0000 + 14.6979 0.0000 + 15.1035 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7473 1.0000 + -30.0286 1.0000 + -29.9866 1.0000 + -29.8203 1.0000 + -1.7375 1.0000 + 4.0528 1.0000 + 4.7878 1.0000 + 6.3364 1.0000 + 6.3830 1.0000 + 8.0619 0.0057 + 8.3336 0.0000 + 9.5014 0.0000 + 9.9115 0.0000 + 14.1815 0.0000 + 14.9183 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7471 1.0000 + -30.0372 1.0000 + -29.9857 1.0000 + -29.8195 1.0000 + -1.4939 1.0000 + 3.5647 1.0000 + 4.7595 1.0000 + 5.9723 1.0000 + 6.4743 1.0000 + 7.7497 0.9700 + 8.4147 0.0000 + 9.9423 0.0000 + 10.4794 0.0000 + 14.3282 0.0000 + 15.0758 0.0000 + + + -91.8796 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7469 1.0000 + -30.0470 1.0000 + -29.9846 1.0000 + -29.8185 1.0000 + -1.1660 1.0000 + 2.9634 1.0000 + 4.7389 1.0000 + 5.6413 1.0000 + 6.5416 1.0000 + 7.6483 0.9995 + 8.4831 0.0000 + 10.4090 0.0000 + 11.0447 0.0000 + 15.0305 0.0000 + 15.6832 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7468 1.0000 + -30.0566 1.0000 + -29.9837 1.0000 + -29.8176 1.0000 + -0.7654 1.0000 + 2.3210 1.0000 + 4.7218 1.0000 + 5.3752 1.0000 + 6.4754 1.0000 + 7.8474 0.6915 + 8.5405 0.0000 + 10.8486 0.0000 + 11.5771 0.0000 + 13.5613 0.0000 + 15.1290 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7467 1.0000 + -30.0642 1.0000 + -29.9830 1.0000 + -29.8168 1.0000 + -0.3160 1.0000 + 1.6951 1.0000 + 4.7092 1.0000 + 5.1905 1.0000 + 6.3590 1.0000 + 8.1987 0.0000 + 8.5831 0.0000 + 11.2134 0.0000 + 12.0304 0.0000 + 12.9684 0.0000 + 14.5851 0.0000 + + + -91.8817 1.0000 + -91.4266 1.0000 + -91.2917 1.0000 + -65.7467 1.0000 + -30.0683 1.0000 + -29.9826 1.0000 + -29.8165 1.0000 + 0.1015 1.0000 + 1.1853 1.0000 + 4.7026 1.0000 + 5.0962 1.0000 + 6.2848 1.0000 + 8.4738 0.0000 + 8.6059 0.0000 + 11.4369 0.0000 + 12.3087 0.0000 + 12.6173 0.0000 + 14.4394 0.0000 + + + -91.8803 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7474 1.0000 + -30.0202 1.0000 + -29.9904 1.0000 + -29.8208 1.0000 + -1.8853 1.0000 + 4.3956 1.0000 + 4.8088 1.0000 + 6.2602 1.0000 + 6.7341 1.0000 + 8.1965 0.0000 + 8.5252 0.0000 + 9.0697 0.0000 + 9.4119 0.0000 + 13.8616 0.0000 + 15.2576 0.0000 + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7473 1.0000 + -30.0223 1.0000 + -29.9901 1.0000 + -29.8206 1.0000 + -1.8347 1.0000 + 4.3325 1.0000 + 4.7685 1.0000 + 6.1044 1.0000 + 6.8162 1.0000 + 7.9710 0.1061 + 8.7574 0.0000 + 8.9151 0.0000 + 9.6966 0.0000 + 13.8495 0.0000 + 14.8611 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7473 1.0000 + -30.0283 1.0000 + -29.9896 1.0000 + -29.8200 1.0000 + -1.6854 1.0000 + 4.0715 1.0000 + 4.7055 1.0000 + 5.8924 1.0000 + 6.8149 1.0000 + 7.7859 0.9146 + 8.5439 0.0000 + 9.2979 0.0000 + 10.1790 0.0000 + 14.4429 0.0000 + 14.9450 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7471 1.0000 + -30.0369 1.0000 + -29.9887 1.0000 + -29.8192 1.0000 + -1.4415 1.0000 + 3.5859 1.0000 + 4.6793 1.0000 + 5.7131 1.0000 + 6.7163 1.0000 + 7.7038 0.9943 + 8.3889 0.0000 + 9.7722 0.0000 + 10.7211 0.0000 + 14.3964 0.0000 + 15.0087 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7469 1.0000 + -30.0468 1.0000 + -29.9877 1.0000 + -29.8182 1.0000 + -1.1142 1.0000 + 2.9798 1.0000 + 4.6736 1.0000 + 5.5108 1.0000 + 6.6199 1.0000 + 7.7221 0.9885 + 8.3636 0.0000 + 10.2499 0.0000 + 11.2691 0.0000 + 14.1095 0.0000 + 16.1309 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7467 1.0000 + -30.0564 1.0000 + -29.9867 1.0000 + -29.8173 1.0000 + -0.7140 1.0000 + 2.3366 1.0000 + 4.6761 1.0000 + 5.3013 1.0000 + 6.5008 1.0000 + 7.9230 0.2850 + 8.3953 0.0000 + 10.6940 0.0000 + 11.7823 0.0000 + 13.5487 0.0000 + 15.0697 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7466 1.0000 + -30.0639 1.0000 + -29.9860 1.0000 + -29.8166 1.0000 + -0.2628 1.0000 + 1.7117 1.0000 + 4.6852 1.0000 + 5.1307 1.0000 + 6.3817 1.0000 + 8.2332 0.0000 + 8.4366 0.0000 + 11.0609 0.0000 + 12.1858 0.0000 + 13.0336 0.0000 + 14.9369 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7466 1.0000 + -30.0680 1.0000 + -29.9856 1.0000 + -29.8162 1.0000 + 0.1614 1.0000 + 1.1971 1.0000 + 4.6963 1.0000 + 5.0329 1.0000 + 6.3108 1.0000 + 8.4305 0.0000 + 8.5088 0.0000 + 11.2905 0.0000 + 12.2531 0.0000 + 13.6523 0.0000 + 15.0165 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7472 1.0000 + -30.0193 1.0000 + -29.9987 1.0000 + -29.8199 1.0000 + -1.7259 1.0000 + 4.2208 1.0000 + 4.7206 1.0000 + 5.9736 1.0000 + 6.6199 1.0000 + 8.1432 0.0001 + 8.2436 0.0000 + 9.3875 0.0000 + 9.9330 0.0000 + 14.2783 0.0000 + 14.9326 0.0000 + + + -91.8805 1.0000 + -91.4253 1.0000 + -91.2904 1.0000 + -65.7472 1.0000 + -30.0214 1.0000 + -29.9985 1.0000 + -29.8197 1.0000 + -1.6767 1.0000 + 4.2223 1.0000 + 4.6204 1.0000 + 5.7734 1.0000 + 6.8479 1.0000 + 7.7918 0.9010 + 8.5549 0.0000 + 9.2077 0.0000 + 10.1836 0.0000 + 14.6923 0.0000 + 15.0199 0.0000 + + + -91.8807 1.0000 + -91.4255 1.0000 + -91.2906 1.0000 + -65.7471 1.0000 + -30.0274 1.0000 + -29.9980 1.0000 + -29.8192 1.0000 + -1.5287 1.0000 + 4.1177 1.0000 + 4.4062 1.0000 + 5.5506 1.0000 + 7.1483 1.0000 + 7.4218 1.0000 + 8.7268 0.0000 + 9.0973 0.0000 + 10.6622 0.0000 + 14.4498 0.0000 + 15.1810 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7469 1.0000 + -30.0361 1.0000 + -29.9971 1.0000 + -29.8183 1.0000 + -1.2856 1.0000 + 3.6350 1.0000 + 4.3984 1.0000 + 5.4250 1.0000 + 6.9924 1.0000 + 7.5022 1.0000 + 8.4908 0.0000 + 9.4686 0.0000 + 11.2024 0.0000 + 14.4000 0.0000 + 15.1855 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7467 1.0000 + -30.0460 1.0000 + -29.9962 1.0000 + -29.8174 1.0000 + -0.9603 1.0000 + 3.0182 1.0000 + 4.4522 1.0000 + 5.3087 1.0000 + 6.7413 1.0000 + 7.7217 0.9886 + 8.3005 0.0000 + 9.9206 0.0000 + 11.7328 0.0000 + 13.9753 0.0000 + 15.3830 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7465 1.0000 + -30.0556 1.0000 + -29.9952 1.0000 + -29.8164 1.0000 + -0.5617 1.0000 + 2.3790 1.0000 + 4.5170 1.0000 + 5.1603 1.0000 + 6.5656 1.0000 + 7.9200 0.2994 + 8.2560 0.0000 + 10.3547 0.0000 + 12.1577 0.0000 + 13.5549 0.0000 + 17.9977 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7464 1.0000 + -30.0631 1.0000 + -29.9945 1.0000 + -29.8157 1.0000 + -0.1093 1.0000 + 1.7590 1.0000 + 4.5897 1.0000 + 5.0004 1.0000 + 6.4473 1.0000 + 8.0381 0.0140 + 8.3802 0.0000 + 10.7217 0.0000 + 12.2601 0.0000 + 13.3666 0.0000 + 15.0205 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7464 1.0000 + -30.0672 1.0000 + -29.9941 1.0000 + -29.8153 1.0000 + 0.3334 1.0000 + 1.2318 1.0000 + 4.6652 1.0000 + 4.8709 1.0000 + 6.3846 1.0000 + 8.0775 0.0029 + 8.5356 0.0000 + 10.9631 0.0000 + 12.0560 0.0000 + 14.6802 0.0000 + 15.7986 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7470 1.0000 + -30.0181 1.0000 + -30.0111 1.0000 + -29.8187 1.0000 + -1.4695 1.0000 + 3.7994 1.0000 + 4.6693 1.0000 + 5.6325 1.0000 + 6.5974 1.0000 + 7.8461 0.6978 + 8.3061 0.0000 + 9.7917 0.0000 + 10.4886 0.0000 + 14.2428 0.0000 + 15.3871 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7469 1.0000 + -30.0202 1.0000 + -30.0109 1.0000 + -29.8185 1.0000 + -1.4195 1.0000 + 3.8193 1.0000 + 4.5504 1.0000 + 5.5098 1.0000 + 6.7466 1.0000 + 7.7637 0.9539 + 8.3458 0.0000 + 9.6384 0.0000 + 10.7162 0.0000 + 14.2161 0.0000 + 15.3807 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7468 1.0000 + -30.0261 1.0000 + -30.0103 1.0000 + -29.8179 1.0000 + -1.2729 1.0000 + 3.8625 1.0000 + 4.2037 1.0000 + 5.3571 1.0000 + 6.9709 1.0000 + 7.5306 1.0000 + 8.5275 0.0000 + 9.3693 0.0000 + 11.1903 0.0000 + 14.9903 0.0000 + 31.3493 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7467 1.0000 + -30.0349 1.0000 + -30.0095 1.0000 + -29.8171 1.0000 + -1.0337 1.0000 + 3.6024 1.0000 + 4.0290 1.0000 + 5.2643 1.0000 + 7.0029 1.0000 + 7.3935 1.0000 + 8.6571 0.0000 + 9.2934 0.0000 + 11.7135 0.0000 + 14.0675 0.0000 + 15.4038 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7464 1.0000 + -30.0448 1.0000 + -30.0085 1.0000 + -29.8161 1.0000 + -0.7114 1.0000 + 3.0260 1.0000 + 4.1301 1.0000 + 5.1712 1.0000 + 6.8136 1.0000 + 7.4784 1.0000 + 8.5466 0.0000 + 9.5926 0.0000 + 12.1469 0.0000 + 13.8100 0.0000 + 15.8147 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7463 1.0000 + -30.0544 1.0000 + -30.0076 1.0000 + -29.8152 1.0000 + -0.3183 1.0000 + 2.4223 1.0000 + 4.2569 1.0000 + 5.0412 1.0000 + 6.6493 1.0000 + 7.5743 1.0000 + 8.4765 0.0000 + 9.9779 0.0000 + 12.2811 0.0000 + 13.6749 0.0000 + 15.6480 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7461 1.0000 + -30.0619 1.0000 + -30.0069 1.0000 + -29.8145 1.0000 + 0.1309 1.0000 + 1.8302 1.0000 + 4.3950 1.0000 + 4.8792 1.0000 + 6.5467 1.0000 + 7.6338 0.9998 + 8.5191 0.0000 + 10.3234 0.0000 + 12.0332 0.0000 + 13.9324 0.0000 + 15.8350 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7461 1.0000 + -30.0660 1.0000 + -30.0065 1.0000 + -29.8141 1.0000 + 0.5962 1.0000 + 1.2931 1.0000 + 4.5437 1.0000 + 4.7091 1.0000 + 6.4966 1.0000 + 7.6617 0.9991 + 8.5908 0.0000 + 10.5605 0.0000 + 11.7454 0.0000 + 14.3195 0.0000 + 15.4240 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7467 1.0000 + -30.0253 1.0000 + -30.0166 1.0000 + -29.8173 1.0000 + -1.1232 1.0000 + 3.2045 1.0000 + 4.6486 1.0000 + 5.3096 1.0000 + 6.5657 1.0000 + 7.8108 0.8458 + 8.3758 0.0000 + 10.2111 0.0000 + 11.0400 0.0000 + 13.9258 0.0000 + 15.5259 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7466 1.0000 + -30.0251 1.0000 + -30.0187 1.0000 + -29.8171 1.0000 + -1.0740 1.0000 + 3.2169 1.0000 + 4.5463 1.0000 + 5.2645 1.0000 + 6.6130 1.0000 + 7.8637 0.6062 + 8.2993 0.0000 + 10.0666 0.0000 + 11.2485 0.0000 + 13.8793 0.0000 + 15.1310 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7465 1.0000 + -30.0247 1.0000 + -30.0245 1.0000 + -29.8165 1.0000 + -0.9278 1.0000 + 3.2332 1.0000 + 4.2746 1.0000 + 5.1943 1.0000 + 6.7018 1.0000 + 7.7714 0.9424 + 8.3727 0.0000 + 9.7624 0.0000 + 11.6929 0.0000 + 13.8341 0.0000 + 15.2470 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7463 1.0000 + -30.0335 1.0000 + -30.0237 1.0000 + -29.8157 1.0000 + -0.6936 1.0000 + 3.1651 1.0000 + 3.9951 1.0000 + 5.1310 1.0000 + 6.7693 1.0000 + 7.5109 1.0000 + 8.6573 0.0000 + 9.4680 0.0000 + 12.1191 0.0000 + 13.7501 0.0000 + 16.2199 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7461 1.0000 + -30.0435 1.0000 + -30.0228 1.0000 + -29.8147 1.0000 + -0.3808 1.0000 + 2.8709 1.0000 + 3.9188 1.0000 + 5.0470 1.0000 + 6.7750 1.0000 + 7.3303 1.0000 + 8.7957 0.0000 + 9.4194 0.0000 + 12.2854 0.0000 + 15.1004 0.0000 + 16.6631 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7460 1.0000 + -30.0531 1.0000 + -30.0219 1.0000 + -29.8138 1.0000 + -0.0012 1.0000 + 2.4149 1.0000 + 4.0086 1.0000 + 4.9212 1.0000 + 6.7199 1.0000 + 7.2772 1.0000 + 8.7185 0.0000 + 9.6676 0.0000 + 12.0399 0.0000 + 13.9078 0.0000 + 16.1396 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7458 1.0000 + -30.0605 1.0000 + -30.0212 1.0000 + -29.8131 1.0000 + 0.4304 1.0000 + 1.9114 1.0000 + 4.1602 1.0000 + 4.7577 1.0000 + 6.6629 1.0000 + 7.2826 1.0000 + 8.6633 0.0000 + 9.9472 0.0000 + 11.6785 0.0000 + 15.2726 0.0000 + 16.0488 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7457 1.0000 + -30.0646 1.0000 + -30.0207 1.0000 + -29.8127 1.0000 + 0.8992 1.0000 + 1.4048 1.0000 + 4.3197 1.0000 + 4.5902 1.0000 + 6.6327 1.0000 + 7.2942 1.0000 + 8.6558 0.0000 + 10.1424 0.0000 + 11.4034 0.0000 + 14.2472 0.0000 + 41.7288 0.0000 + + + -91.8814 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7464 1.0000 + -30.0388 1.0000 + -30.0152 1.0000 + -29.8160 1.0000 + -0.7011 1.0000 + 2.5446 1.0000 + 4.6365 1.0000 + 5.0441 1.0000 + 6.4285 1.0000 + 8.1110 0.0006 + 8.4422 0.0000 + 10.6018 0.0000 + 11.5597 0.0000 + 13.3506 0.0000 + 15.1051 0.0000 + + + -91.8812 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7464 1.0000 + -30.0386 1.0000 + -30.0173 1.0000 + -29.8158 1.0000 + -0.6526 1.0000 + 2.5545 1.0000 + 4.5567 1.0000 + 5.0344 1.0000 + 6.4474 1.0000 + 8.1580 0.0000 + 8.3450 0.0000 + 10.4604 0.0000 + 11.7435 0.0000 + 13.3794 0.0000 + 15.8365 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7462 1.0000 + -30.0381 1.0000 + -30.0233 1.0000 + -29.8152 1.0000 + -0.5089 1.0000 + 2.5736 1.0000 + 4.3507 1.0000 + 5.0102 1.0000 + 6.4989 1.0000 + 7.9569 0.1473 + 8.4473 0.0000 + 10.1404 0.0000 + 12.0883 0.0000 + 13.4032 0.0000 + 15.1473 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7461 1.0000 + -30.0373 1.0000 + -30.0321 1.0000 + -29.8143 1.0000 + -0.2806 1.0000 + 2.5705 1.0000 + 4.1067 1.0000 + 4.9666 1.0000 + 6.5721 1.0000 + 7.6198 0.9999 + 8.7017 0.0000 + 9.7782 0.0000 + 12.2391 0.0000 + 13.5917 0.0000 + 15.4441 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7459 1.0000 + -30.0422 1.0000 + -30.0363 1.0000 + -29.8134 1.0000 + 0.0188 1.0000 + 2.4896 1.0000 + 3.9304 1.0000 + 4.8876 1.0000 + 6.6514 1.0000 + 7.3330 1.0000 + 8.9105 0.0000 + 9.5027 0.0000 + 12.0077 0.0000 + 14.3536 0.0000 + 16.5093 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7457 1.0000 + -30.0518 1.0000 + -30.0354 1.0000 + -29.8125 1.0000 + 0.3709 1.0000 + 2.2835 1.0000 + 3.8916 1.0000 + 4.7617 1.0000 + 6.7183 1.0000 + 7.1436 1.0000 + 8.9049 0.0000 + 9.4941 0.0000 + 11.7396 0.0000 + 15.6793 0.0000 + 16.9345 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7455 1.0000 + -30.0593 1.0000 + -30.0348 1.0000 + -29.8117 1.0000 + 0.7545 1.0000 + 1.9742 1.0000 + 3.9744 1.0000 + 4.5954 1.0000 + 6.7577 1.0000 + 7.0518 1.0000 + 8.7886 0.0000 + 9.6473 0.0000 + 11.3101 0.0000 + 14.0340 0.0000 + 16.7643 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7454 1.0000 + -30.0633 1.0000 + -30.0343 1.0000 + -29.8114 1.0000 + 1.1319 1.0000 + 1.6271 1.0000 + 4.1052 1.0000 + 4.4298 1.0000 + 6.7711 1.0000 + 7.0239 1.0000 + 8.7206 0.0000 + 9.7665 0.0000 + 11.0890 0.0000 + 13.9788 0.0000 + 16.9520 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7462 1.0000 + -30.0493 1.0000 + -30.0141 1.0000 + -29.8149 1.0000 + -0.2288 1.0000 + 1.8983 1.0000 + 4.6283 1.0000 + 4.8575 1.0000 + 6.2772 1.0000 + 8.4945 0.0000 + 8.5804 0.0000 + 10.9224 0.0000 + 11.9786 0.0000 + 12.7899 0.0000 + 14.9087 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7461 1.0000 + -30.0491 1.0000 + -30.0162 1.0000 + -29.8147 1.0000 + -0.1792 1.0000 + 1.9074 1.0000 + 4.5762 1.0000 + 4.8487 1.0000 + 6.2969 1.0000 + 8.3585 0.0000 + 8.6284 0.0000 + 10.7823 0.0000 + 12.0806 0.0000 + 12.8868 0.0000 + 15.2348 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7460 1.0000 + -30.0486 1.0000 + -30.0222 1.0000 + -29.8141 1.0000 + -0.0352 1.0000 + 1.9332 1.0000 + 4.4339 1.0000 + 4.8242 1.0000 + 6.3536 1.0000 + 8.0475 0.0099 + 8.7378 0.0000 + 10.4554 0.0000 + 12.1158 0.0000 + 13.2657 0.0000 + 14.9000 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7458 1.0000 + -30.0478 1.0000 + -30.0311 1.0000 + -29.8133 1.0000 + 0.1893 1.0000 + 1.9679 1.0000 + 4.2451 1.0000 + 4.7769 1.0000 + 6.4400 1.0000 + 7.6916 0.9966 + 8.8745 0.0000 + 10.0643 0.0000 + 11.9241 0.0000 + 13.8014 0.0000 + 15.2989 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7456 1.0000 + -30.0469 1.0000 + -30.0412 1.0000 + -29.8123 1.0000 + 0.4706 1.0000 + 1.9998 1.0000 + 4.0636 1.0000 + 4.6916 1.0000 + 6.5446 1.0000 + 7.3787 1.0000 + 8.9926 0.0000 + 9.6981 0.0000 + 11.6104 0.0000 + 14.1038 0.0000 + 15.9363 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7454 1.0000 + -30.0508 1.0000 + -30.0460 1.0000 + -29.8114 1.0000 + 0.7753 1.0000 + 2.0098 1.0000 + 3.9391 1.0000 + 4.5583 1.0000 + 6.6530 1.0000 + 7.1493 1.0000 + 9.0079 0.0000 + 9.4727 0.0000 + 11.2802 0.0000 + 14.0000 0.0000 + 16.5368 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7452 1.0000 + -30.0583 1.0000 + -30.0454 1.0000 + -29.8107 1.0000 + 1.0560 1.0000 + 1.9838 1.0000 + 3.9064 1.0000 + 4.3863 1.0000 + 6.7511 1.0000 + 7.0039 1.0000 + 8.8800 0.0000 + 9.4519 0.0000 + 11.0055 0.0000 + 13.8522 0.0000 + 16.8940 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7452 1.0000 + -30.0624 1.0000 + -30.0450 1.0000 + -29.8103 1.0000 + 1.2424 1.0000 + 1.9383 1.0000 + 3.9540 1.0000 + 4.2239 1.0000 + 6.8299 1.0000 + 6.9158 1.0000 + 8.7739 0.0000 + 9.4832 0.0000 + 10.8480 0.0000 + 13.7576 0.0000 + 16.7488 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7460 1.0000 + -30.0550 1.0000 + -30.0134 1.0000 + -29.8143 1.0000 + 0.2043 1.0000 + 1.3732 1.0000 + 4.6240 1.0000 + 4.7616 1.0000 + 6.1883 1.0000 + 8.5233 0.0000 + 8.9674 0.0000 + 11.1121 0.0000 + 12.0071 0.0000 + 12.6025 0.0000 + 14.7790 0.0000 + + + -91.8807 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7460 1.0000 + -30.0547 1.0000 + -30.0156 1.0000 + -29.8141 1.0000 + 0.2601 1.0000 + 1.3783 1.0000 + 4.6072 1.0000 + 4.7289 1.0000 + 6.2110 1.0000 + 8.3945 0.0000 + 8.9806 0.0000 + 10.9757 0.0000 + 11.9688 0.0000 + 12.8374 0.0000 + 14.6721 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7458 1.0000 + -30.0543 1.0000 + -30.0216 1.0000 + -29.8135 1.0000 + 0.4205 1.0000 + 1.3934 1.0000 + 4.5342 1.0000 + 4.6626 1.0000 + 6.2753 1.0000 + 8.0869 0.0019 + 9.0106 0.0000 + 10.6601 0.0000 + 11.8277 0.0000 + 13.4681 0.0000 + 14.6325 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7457 1.0000 + -30.0535 1.0000 + -30.0305 1.0000 + -29.8127 1.0000 + 0.6680 1.0000 + 1.4216 1.0000 + 4.3948 1.0000 + 4.5926 1.0000 + 6.3719 1.0000 + 7.7299 0.9847 + 9.0457 0.0000 + 10.2612 0.0000 + 11.5905 0.0000 + 14.2426 0.0000 + 14.7492 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7455 1.0000 + -30.0527 1.0000 + -30.0406 1.0000 + -29.8117 1.0000 + 0.9557 1.0000 + 1.4873 1.0000 + 4.2358 1.0000 + 4.4908 1.0000 + 6.4878 1.0000 + 7.4124 1.0000 + 9.0712 0.0000 + 9.8506 0.0000 + 11.3089 0.0000 + 14.3846 0.0000 + 15.5524 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7453 1.0000 + -30.0518 1.0000 + -30.0502 1.0000 + -29.8108 1.0000 + 1.1737 1.0000 + 1.6621 1.0000 + 4.0925 1.0000 + 4.3402 1.0000 + 6.6061 1.0000 + 7.1785 1.0000 + 9.0505 0.0000 + 9.5155 0.0000 + 11.0400 0.0000 + 13.9482 0.0000 + 16.5775 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7451 1.0000 + -30.0577 1.0000 + -30.0512 1.0000 + -29.8101 1.0000 + 1.2606 1.0000 + 1.9475 1.0000 + 3.9805 1.0000 + 4.1622 1.0000 + 6.7058 1.0000 + 7.0369 1.0000 + 8.9273 0.0000 + 9.3617 0.0000 + 10.8310 0.0000 + 13.7460 0.0000 + 17.0707 0.0000 + + + -91.8798 1.0000 + -91.4249 1.0000 + -91.2898 1.0000 + -65.7451 1.0000 + -30.0619 1.0000 + -30.0509 1.0000 + -29.8097 1.0000 + 1.2859 1.0000 + 2.1702 1.0000 + 3.8990 1.0000 + 4.0390 1.0000 + 6.7652 1.0000 + 6.9729 1.0000 + 8.8041 0.0000 + 9.3315 0.0000 + 10.7166 0.0000 + 13.6320 0.0000 + 16.7501 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7464 1.0000 + -30.0175 1.0000 + -29.9844 1.0000 + -29.8488 1.0000 + -1.7370 1.0000 + 4.4422 1.0000 + 4.8585 1.0000 + 6.0714 1.0000 + 6.4466 1.0000 + 8.2302 0.0000 + 8.3749 0.0000 + 9.1175 0.0000 + 9.2619 0.0000 + 14.1349 0.0000 + 15.4013 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7463 1.0000 + -30.0195 1.0000 + -29.9841 1.0000 + -29.8486 1.0000 + -1.6861 1.0000 + 4.3659 1.0000 + 4.8534 1.0000 + 5.9862 1.0000 + 6.3903 1.0000 + 8.0854 0.0021 + 8.4524 0.0000 + 9.1354 0.0000 + 9.5120 0.0000 + 14.3643 0.0000 + 15.3071 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7463 1.0000 + -30.0256 1.0000 + -29.9835 1.0000 + -29.8481 1.0000 + -1.5384 1.0000 + 4.0964 1.0000 + 4.8387 1.0000 + 5.8780 1.0000 + 6.2244 1.0000 + 7.8814 0.5077 + 8.4118 0.0000 + 9.4051 0.0000 + 10.0237 0.0000 + 14.7831 0.0000 + 15.5390 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7461 1.0000 + -30.0342 1.0000 + -29.9826 1.0000 + -29.8473 1.0000 + -1.2961 1.0000 + 3.6243 1.0000 + 4.8224 1.0000 + 5.8880 1.0000 + 5.9794 1.0000 + 7.7697 0.9451 + 8.2240 0.0000 + 9.9152 0.0000 + 10.6017 0.0000 + 14.8981 0.0000 + 15.7528 0.0000 + + + -91.8798 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7459 1.0000 + -30.0442 1.0000 + -29.9816 1.0000 + -29.8464 1.0000 + -0.9701 1.0000 + 3.0306 1.0000 + 4.8098 1.0000 + 5.7145 1.0000 + 5.9645 1.0000 + 7.7405 0.9779 + 8.1068 0.0008 + 10.4758 0.0000 + 11.1795 0.0000 + 14.4320 0.0000 + 15.4052 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7457 1.0000 + -30.0538 1.0000 + -29.9807 1.0000 + -29.8456 1.0000 + -0.5710 1.0000 + 2.3983 1.0000 + 4.8012 1.0000 + 5.4818 1.0000 + 6.0144 1.0000 + 7.7545 0.9652 + 8.1644 0.0000 + 11.0095 0.0000 + 11.7243 0.0000 + 13.7286 0.0000 + 15.7410 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7456 1.0000 + -30.0614 1.0000 + -29.9799 1.0000 + -29.8449 1.0000 + -0.1177 1.0000 + 1.7781 1.0000 + 4.7964 1.0000 + 5.3133 1.0000 + 6.0112 1.0000 + 7.7807 0.9256 + 8.3693 0.0000 + 11.4739 0.0000 + 12.2127 0.0000 + 12.9109 0.0000 + 14.6649 0.0000 + + + -91.8817 1.0000 + -91.4266 1.0000 + -91.2916 1.0000 + -65.7457 1.0000 + -30.0656 1.0000 + -29.9796 1.0000 + -29.8446 1.0000 + 0.3197 1.0000 + 1.2526 1.0000 + 4.7946 1.0000 + 5.2255 1.0000 + 5.9923 1.0000 + 7.7988 0.8824 + 8.5626 0.0000 + 11.8394 0.0000 + 12.3313 0.0000 + 12.5446 0.0000 + 14.3190 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7463 1.0000 + -30.0172 1.0000 + -29.9873 1.0000 + -29.8485 1.0000 + -1.6849 1.0000 + 4.4076 1.0000 + 4.8483 1.0000 + 6.0207 1.0000 + 6.2826 1.0000 + 8.0528 0.0081 + 8.5353 0.0000 + 9.2108 0.0000 + 9.3896 0.0000 + 14.3918 0.0000 + 15.3197 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7463 1.0000 + -30.0193 1.0000 + -29.9870 1.0000 + -29.8483 1.0000 + -1.6339 1.0000 + 4.3516 1.0000 + 4.8346 1.0000 + 5.7996 1.0000 + 6.4178 1.0000 + 7.7836 0.9196 + 8.8250 0.0000 + 9.1722 0.0000 + 9.5353 0.0000 + 14.5019 0.0000 + 15.3716 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7462 1.0000 + -30.0253 1.0000 + -29.9865 1.0000 + -29.8478 1.0000 + -1.4861 1.0000 + 4.1162 1.0000 + 4.7981 1.0000 + 5.5891 1.0000 + 6.4356 1.0000 + 7.5244 1.0000 + 8.7710 0.0000 + 9.5148 0.0000 + 9.9362 0.0000 + 15.1352 0.0000 + 15.4072 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7460 1.0000 + -30.0340 1.0000 + -29.9857 1.0000 + -29.8470 1.0000 + -1.2446 1.0000 + 3.6518 1.0000 + 4.7706 1.0000 + 5.5402 1.0000 + 6.2682 1.0000 + 7.4667 1.0000 + 8.5007 0.0000 + 10.0751 0.0000 + 10.4593 0.0000 + 14.9293 0.0000 + 15.7909 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7458 1.0000 + -30.0439 1.0000 + -29.9846 1.0000 + -29.8461 1.0000 + -0.9180 1.0000 + 3.0555 1.0000 + 4.7621 1.0000 + 5.5144 1.0000 + 6.0975 1.0000 + 7.5228 1.0000 + 8.3066 0.0000 + 10.6374 0.0000 + 11.0036 0.0000 + 14.3882 0.0000 + 15.7788 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7457 1.0000 + -30.0536 1.0000 + -29.9837 1.0000 + -29.8453 1.0000 + -0.5188 1.0000 + 2.4214 1.0000 + 4.7659 1.0000 + 5.3939 1.0000 + 6.0417 1.0000 + 7.5977 1.0000 + 8.2829 0.0000 + 11.1508 0.0000 + 11.5105 0.0000 + 13.7183 0.0000 + 14.9755 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7456 1.0000 + -30.0611 1.0000 + -29.9830 1.0000 + -29.8447 1.0000 + -0.0651 1.0000 + 1.8001 1.0000 + 4.7789 1.0000 + 5.2458 1.0000 + 6.0321 1.0000 + 7.6461 0.9996 + 8.4238 0.0000 + 11.5584 0.0000 + 11.9266 0.0000 + 13.0831 0.0000 + 15.6069 0.0000 + + + -91.8817 1.0000 + -91.4266 1.0000 + -91.2916 1.0000 + -65.7456 1.0000 + -30.0653 1.0000 + -29.9826 1.0000 + -29.8443 1.0000 + 0.3795 1.0000 + 1.2691 1.0000 + 4.7936 1.0000 + 5.1515 1.0000 + 6.0240 1.0000 + 7.6686 0.9988 + 8.5805 0.0000 + 11.7779 0.0000 + 12.1352 0.0000 + 12.7618 0.0000 + 14.3597 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7461 1.0000 + -30.0163 1.0000 + -29.9957 1.0000 + -29.8477 1.0000 + -1.5268 1.0000 + 4.2431 1.0000 + 4.8102 1.0000 + 5.8696 1.0000 + 6.0346 1.0000 + 7.8110 0.8450 + 8.5785 0.0000 + 9.3930 0.0000 + 9.9093 0.0000 + 14.8181 0.0000 + 15.3992 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7461 1.0000 + -30.0184 1.0000 + -29.9955 1.0000 + -29.8475 1.0000 + -1.4775 1.0000 + 4.2438 1.0000 + 4.7542 1.0000 + 5.5293 1.0000 + 6.3522 1.0000 + 7.5150 1.0000 + 8.8801 0.0000 + 9.4592 0.0000 + 9.8752 0.0000 + 15.2792 0.0000 + 15.6628 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7460 1.0000 + -30.0244 1.0000 + -29.9950 1.0000 + -29.8470 1.0000 + -1.3299 1.0000 + 4.1576 1.0000 + 4.5679 1.0000 + 5.2979 1.0000 + 6.6150 1.0000 + 7.0904 1.0000 + 9.1579 0.0000 + 9.5750 0.0000 + 10.0825 0.0000 + 15.1794 0.0000 + 15.4777 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7459 1.0000 + -30.0332 1.0000 + -29.9941 1.0000 + -29.8463 1.0000 + -1.0889 1.0000 + 3.7247 1.0000 + 4.5126 1.0000 + 5.2739 1.0000 + 6.5053 1.0000 + 7.0116 1.0000 + 8.9177 0.0000 + 10.0553 0.0000 + 10.5390 0.0000 + 14.9488 0.0000 + 15.7735 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7457 1.0000 + -30.0432 1.0000 + -29.9932 1.0000 + -29.8454 1.0000 + -0.7637 1.0000 + 3.1184 1.0000 + 4.5570 1.0000 + 5.2947 1.0000 + 6.2309 1.0000 + 7.1569 1.0000 + 8.6614 0.0000 + 10.5778 0.0000 + 11.0215 0.0000 + 14.3672 0.0000 + 16.4135 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7455 1.0000 + -30.0528 1.0000 + -29.9922 1.0000 + -29.8445 1.0000 + -0.3665 1.0000 + 2.4849 1.0000 + 4.6192 1.0000 + 5.2403 1.0000 + 6.0991 1.0000 + 7.2727 1.0000 + 8.5350 0.0000 + 11.0432 0.0000 + 11.4229 0.0000 + 13.8722 0.0000 + 15.2253 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7454 1.0000 + -30.0603 1.0000 + -29.9915 1.0000 + -29.8439 1.0000 + 0.0883 1.0000 + 1.8666 1.0000 + 4.6927 1.0000 + 5.1041 1.0000 + 6.0902 1.0000 + 7.3348 1.0000 + 8.5545 0.0000 + 11.3690 0.0000 + 11.6761 0.0000 + 13.4279 0.0000 + 14.9423 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7454 1.0000 + -30.0645 1.0000 + -29.9911 1.0000 + -29.8436 1.0000 + 0.5523 1.0000 + 1.3197 1.0000 + 4.7737 1.0000 + 4.9700 1.0000 + 6.1067 1.0000 + 7.3584 1.0000 + 8.6259 0.0000 + 11.4672 0.0000 + 11.8083 0.0000 + 13.3060 0.0000 + 14.7773 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7459 1.0000 + -30.0150 1.0000 + -30.0082 1.0000 + -29.8466 1.0000 + -1.2712 1.0000 + 3.8438 1.0000 + 4.7684 1.0000 + 5.6401 1.0000 + 5.9574 1.0000 + 7.6738 0.9984 + 8.3685 0.0000 + 9.9037 0.0000 + 10.4726 0.0000 + 15.0041 0.0000 + 15.6011 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7459 1.0000 + -30.0172 1.0000 + -30.0079 1.0000 + -29.8464 1.0000 + -1.2218 1.0000 + 3.8708 1.0000 + 4.6756 1.0000 + 5.4045 1.0000 + 6.1889 1.0000 + 7.4347 1.0000 + 8.5911 0.0000 + 10.0325 0.0000 + 10.3726 0.0000 + 14.9251 0.0000 + 15.8940 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7457 1.0000 + -30.0231 1.0000 + -30.0074 1.0000 + -29.8459 1.0000 + -1.0751 1.0000 + 3.9445 1.0000 + 4.3254 1.0000 + 5.2342 1.0000 + 6.4457 1.0000 + 7.0265 1.0000 + 8.9822 0.0000 + 9.9608 0.0000 + 10.5366 0.0000 + 15.3724 0.0000 + 16.2209 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7456 1.0000 + -30.0320 1.0000 + -30.0066 1.0000 + -29.8451 1.0000 + -0.8371 1.0000 + 3.7696 1.0000 + 4.0713 1.0000 + 5.2102 1.0000 + 6.5202 1.0000 + 6.7576 1.0000 + 9.2256 0.0000 + 9.8208 0.0000 + 10.9794 0.0000 + 14.6872 0.0000 + 16.0115 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7454 1.0000 + -30.0420 1.0000 + -30.0056 1.0000 + -29.8442 1.0000 + -0.5159 1.0000 + 3.1732 1.0000 + 4.2009 1.0000 + 5.2095 1.0000 + 6.2786 1.0000 + 6.8561 1.0000 + 9.0363 0.0000 + 10.1403 0.0000 + 11.3532 0.0000 + 14.1947 0.0000 + 15.7790 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2902 1.0000 + -65.7452 1.0000 + -30.0516 1.0000 + -30.0047 1.0000 + -29.8434 1.0000 + -0.1232 1.0000 + 2.5651 1.0000 + 4.3406 1.0000 + 5.1419 1.0000 + 6.1556 1.0000 + 6.9535 1.0000 + 8.8219 0.0000 + 10.5329 0.0000 + 11.5193 0.0000 + 13.9904 0.0000 + 15.7124 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7451 1.0000 + -30.0592 1.0000 + -30.0040 1.0000 + -29.8427 1.0000 + 0.3259 1.0000 + 1.9702 1.0000 + 4.4841 1.0000 + 4.9917 1.0000 + 6.1733 1.0000 + 7.0010 1.0000 + 8.7133 0.0000 + 10.8431 0.0000 + 11.4585 0.0000 + 13.9770 0.0000 + 15.7545 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7450 1.0000 + -30.0633 1.0000 + -30.0036 1.0000 + -29.8424 1.0000 + 0.8108 1.0000 + 1.4140 1.0000 + 4.6313 1.0000 + 4.8202 1.0000 + 6.2227 1.0000 + 7.0116 1.0000 + 8.6872 0.0000 + 11.0198 0.0000 + 11.3364 0.0000 + 14.1763 0.0000 + 15.9685 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7456 1.0000 + -30.0224 1.0000 + -30.0136 1.0000 + -29.8453 1.0000 + -0.9268 1.0000 + 3.2623 1.0000 + 4.7464 1.0000 + 5.3834 1.0000 + 5.9960 1.0000 + 7.6341 0.9998 + 8.2611 0.0000 + 10.4569 0.0000 + 11.0184 0.0000 + 14.2330 0.0000 + 15.5535 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7456 1.0000 + -30.0222 1.0000 + -30.0157 1.0000 + -29.8451 1.0000 + -0.8773 1.0000 + 3.2832 1.0000 + 4.6571 1.0000 + 5.2991 1.0000 + 6.0714 1.0000 + 7.4689 1.0000 + 8.4217 0.0000 + 10.5908 0.0000 + 10.8787 0.0000 + 14.2953 0.0000 + 16.5961 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7455 1.0000 + -30.0218 1.0000 + -30.0216 1.0000 + -29.8446 1.0000 + -0.7317 1.0000 + 3.3310 1.0000 + 4.3786 1.0000 + 5.2110 1.0000 + 6.1851 1.0000 + 7.1526 1.0000 + 8.7615 0.0000 + 10.4513 0.0000 + 10.9940 0.0000 + 14.2699 0.0000 + 15.4567 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7453 1.0000 + -30.0306 1.0000 + -30.0209 1.0000 + -29.8438 1.0000 + -0.4981 1.0000 + 3.3273 1.0000 + 4.0470 1.0000 + 5.1832 1.0000 + 6.2401 1.0000 + 6.8777 1.0000 + 9.1353 0.0000 + 10.0431 0.0000 + 11.3235 0.0000 + 14.1794 0.0000 + 15.5671 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7451 1.0000 + -30.0407 1.0000 + -30.0200 1.0000 + -29.8429 1.0000 + -0.1859 1.0000 + 3.0693 1.0000 + 3.9456 1.0000 + 5.1491 1.0000 + 6.2051 1.0000 + 6.7650 1.0000 + 9.2971 0.0000 + 9.8622 0.0000 + 11.4431 0.0000 + 14.0899 0.0000 + 16.4426 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7449 1.0000 + -30.0503 1.0000 + -30.0191 1.0000 + -29.8421 1.0000 + 0.1920 1.0000 + 2.6071 1.0000 + 4.0528 1.0000 + 5.0472 1.0000 + 6.1874 1.0000 + 6.7639 1.0000 + 9.0797 0.0000 + 10.0903 0.0000 + 11.2974 0.0000 + 14.2166 0.0000 + 15.6033 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7448 1.0000 + -30.0579 1.0000 + -30.0184 1.0000 + -29.8414 1.0000 + 0.6211 1.0000 + 2.0968 1.0000 + 4.2164 1.0000 + 4.8791 1.0000 + 6.2614 1.0000 + 6.7657 1.0000 + 8.8662 0.0000 + 10.3491 0.0000 + 11.0306 0.0000 + 14.4108 0.0000 + 15.3788 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7447 1.0000 + -30.0620 1.0000 + -30.0180 1.0000 + -29.8411 1.0000 + 1.0880 1.0000 + 1.5873 1.0000 + 4.3747 1.0000 + 4.7100 1.0000 + 6.3575 1.0000 + 6.7421 1.0000 + 8.7550 0.0000 + 10.5500 0.0000 + 10.7906 0.0000 + 14.5624 0.0000 + 15.1655 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7454 1.0000 + -30.0360 1.0000 + -30.0122 1.0000 + -29.8440 1.0000 + -0.5057 1.0000 + 2.6136 1.0000 + 4.7370 1.0000 + 5.1523 1.0000 + 6.0130 1.0000 + 7.6494 0.9995 + 8.3935 0.0000 + 10.9701 0.0000 + 11.5187 0.0000 + 13.5916 0.0000 + 15.0632 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7453 1.0000 + -30.0358 1.0000 + -30.0143 1.0000 + -29.8438 1.0000 + -0.4569 1.0000 + 2.6313 1.0000 + 4.6641 1.0000 + 5.1321 1.0000 + 6.0295 1.0000 + 7.5280 1.0000 + 8.4922 0.0000 + 11.0888 0.0000 + 11.3355 0.0000 + 13.6775 0.0000 + 15.0131 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7452 1.0000 + -30.0353 1.0000 + -30.0204 1.0000 + -29.8433 1.0000 + -0.3133 1.0000 + 2.6752 1.0000 + 4.4540 1.0000 + 5.1041 1.0000 + 6.0697 1.0000 + 7.2554 1.0000 + 8.7315 0.0000 + 10.8888 0.0000 + 11.3448 0.0000 + 13.6890 0.0000 + 15.8847 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7450 1.0000 + -30.0345 1.0000 + -30.0292 1.0000 + -29.8426 1.0000 + -0.0859 1.0000 + 2.7166 1.0000 + 4.1804 1.0000 + 5.0770 1.0000 + 6.1163 1.0000 + 6.9765 1.0000 + 9.0212 0.0000 + 10.3917 0.0000 + 11.4336 0.0000 + 13.9055 0.0000 + 15.2813 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7448 1.0000 + -30.0394 1.0000 + -30.0336 1.0000 + -29.8417 1.0000 + 0.2123 1.0000 + 2.6878 1.0000 + 3.9634 1.0000 + 5.0147 1.0000 + 6.1592 1.0000 + 6.7920 1.0000 + 9.2662 0.0000 + 9.9512 0.0000 + 11.2415 0.0000 + 14.1593 0.0000 + 15.4866 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7446 1.0000 + -30.0491 1.0000 + -30.0327 1.0000 + -29.8408 1.0000 + 0.5609 1.0000 + 2.5137 1.0000 + 3.9070 1.0000 + 4.8851 1.0000 + 6.2238 1.0000 + 6.7173 1.0000 + 9.2451 0.0000 + 9.8021 0.0000 + 10.8954 0.0000 + 14.4228 0.0000 + 16.8868 0.0000 + + + -91.8798 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7444 1.0000 + -30.0566 1.0000 + -30.0320 1.0000 + -29.8402 1.0000 + 0.9361 1.0000 + 2.2131 1.0000 + 3.9968 1.0000 + 4.7012 1.0000 + 6.3401 1.0000 + 6.6831 1.0000 + 8.9915 0.0000 + 9.9352 0.0000 + 10.5511 0.0000 + 14.6648 0.0000 + 16.6490 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7444 1.0000 + -30.0607 1.0000 + -30.0317 1.0000 + -29.8398 1.0000 + 1.2854 1.0000 + 1.8883 1.0000 + 4.1342 1.0000 + 4.5244 1.0000 + 6.4820 1.0000 + 6.6213 1.0000 + 8.8197 0.0000 + 10.0947 0.0000 + 10.2879 0.0000 + 14.4258 0.0000 + 16.1813 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7451 1.0000 + -30.0466 1.0000 + -30.0111 1.0000 + -29.8430 1.0000 + -0.0307 1.0000 + 1.9718 1.0000 + 4.7340 1.0000 + 4.9824 1.0000 + 5.9781 1.0000 + 7.6817 0.9978 + 8.7276 0.0000 + 11.3873 0.0000 + 11.9478 0.0000 + 12.7854 0.0000 + 23.9436 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7451 1.0000 + -30.0464 1.0000 + -30.0132 1.0000 + -29.8428 1.0000 + 0.0185 1.0000 + 1.9888 1.0000 + 4.6859 1.0000 + 4.9653 1.0000 + 5.9970 1.0000 + 7.5729 1.0000 + 8.7751 0.0000 + 11.4491 0.0000 + 11.7029 0.0000 + 13.0190 0.0000 + 14.7782 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7450 1.0000 + -30.0459 1.0000 + -30.0193 1.0000 + -29.8423 1.0000 + 0.1624 1.0000 + 2.0359 1.0000 + 4.5378 1.0000 + 4.9360 1.0000 + 6.0484 1.0000 + 7.3135 1.0000 + 8.8969 0.0000 + 11.2099 0.0000 + 11.4930 0.0000 + 13.3525 0.0000 + 14.7482 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7448 1.0000 + -30.0451 1.0000 + -30.0282 1.0000 + -29.8416 1.0000 + 0.3853 1.0000 + 2.1069 1.0000 + 4.3253 1.0000 + 4.8953 1.0000 + 6.1228 1.0000 + 7.0290 1.0000 + 9.0504 0.0000 + 10.6735 0.0000 + 11.2840 0.0000 + 13.8208 0.0000 + 15.4677 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7446 1.0000 + -30.0442 1.0000 + -30.0384 1.0000 + -29.8407 1.0000 + 0.6619 1.0000 + 2.1867 1.0000 + 4.1117 1.0000 + 4.8111 1.0000 + 6.2095 1.0000 + 6.8181 1.0000 + 9.1919 0.0000 + 10.1602 0.0000 + 10.8993 0.0000 + 15.1026 0.0000 + 15.8962 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7444 1.0000 + -30.0481 1.0000 + -30.0434 1.0000 + -29.8399 1.0000 + 0.9577 1.0000 + 2.2499 1.0000 + 3.9565 1.0000 + 4.6608 1.0000 + 6.3079 1.0000 + 6.7191 1.0000 + 9.2475 0.0000 + 9.7542 0.0000 + 10.4853 0.0000 + 14.4236 0.0000 + 15.9769 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7442 1.0000 + -30.0556 1.0000 + -30.0428 1.0000 + -29.8392 1.0000 + 1.2239 1.0000 + 2.2689 1.0000 + 3.9080 1.0000 + 4.4598 1.0000 + 6.4254 1.0000 + 6.6915 1.0000 + 9.0705 0.0000 + 9.6405 0.0000 + 10.1444 0.0000 + 14.3430 0.0000 + 17.2812 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7442 1.0000 + -30.0598 1.0000 + -30.0424 1.0000 + -29.8388 1.0000 + 1.3946 1.0000 + 2.2508 1.0000 + 3.9615 1.0000 + 4.2707 1.0000 + 6.5390 1.0000 + 6.6669 1.0000 + 8.8711 0.0000 + 9.6833 0.0000 + 9.9342 0.0000 + 14.2821 0.0000 + 16.8667 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7450 1.0000 + -30.0524 1.0000 + -30.0105 1.0000 + -29.8425 1.0000 + 0.4229 1.0000 + 1.4332 1.0000 + 4.7335 1.0000 + 4.8932 1.0000 + 5.9406 1.0000 + 7.7046 0.9941 + 9.0485 0.0000 + 11.6113 0.0000 + 12.2365 0.0000 + 12.4166 0.0000 + 14.4069 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7450 1.0000 + -30.0522 1.0000 + -30.0126 1.0000 + -29.8423 1.0000 + 0.4791 1.0000 + 1.4433 1.0000 + 4.7207 1.0000 + 4.8490 1.0000 + 5.9697 1.0000 + 7.5985 1.0000 + 9.0623 0.0000 + 11.5449 0.0000 + 11.9351 0.0000 + 12.6346 0.0000 + 14.4028 0.0000 + + + -91.8811 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7449 1.0000 + -30.0517 1.0000 + -30.0187 1.0000 + -29.8418 1.0000 + 0.6406 1.0000 + 1.4754 1.0000 + 4.6393 1.0000 + 4.7744 1.0000 + 6.0463 1.0000 + 7.3409 1.0000 + 9.0974 0.0000 + 11.2685 0.0000 + 11.5426 0.0000 + 13.2087 0.0000 + 14.4572 0.0000 + + + -91.8808 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7447 1.0000 + -30.0509 1.0000 + -30.0276 1.0000 + -29.8411 1.0000 + 0.8849 1.0000 + 1.5379 1.0000 + 4.4679 1.0000 + 4.7154 1.0000 + 6.1524 1.0000 + 7.0495 1.0000 + 9.1423 0.0000 + 10.8507 0.0000 + 11.0603 0.0000 + 14.0298 0.0000 + 14.7766 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7445 1.0000 + -30.0501 1.0000 + -30.0378 1.0000 + -29.8402 1.0000 + 1.1502 1.0000 + 1.6634 1.0000 + 4.2778 1.0000 + 4.6118 1.0000 + 6.2733 1.0000 + 6.8222 1.0000 + 9.1840 0.0000 + 10.3474 0.0000 + 10.5871 0.0000 + 14.4557 0.0000 + 15.2545 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7443 1.0000 + -30.0493 1.0000 + -30.0475 1.0000 + -29.8393 1.0000 + 1.3315 1.0000 + 1.9197 1.0000 + 4.1103 1.0000 + 4.4350 1.0000 + 6.3954 1.0000 + 6.7111 1.0000 + 9.1975 0.0000 + 9.8332 0.0000 + 10.1952 0.0000 + 14.3744 0.0000 + 15.8908 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7441 1.0000 + -30.0551 1.0000 + -30.0487 1.0000 + -29.8387 1.0000 + 1.4141 1.0000 + 2.2587 1.0000 + 3.9834 1.0000 + 4.2083 1.0000 + 6.5037 1.0000 + 6.7025 1.0000 + 9.0928 0.0000 + 9.5006 0.0000 + 9.9082 0.0000 + 14.2642 0.0000 + 16.9205 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7441 1.0000 + -30.0593 1.0000 + -30.0483 1.0000 + -29.8383 1.0000 + 1.4457 1.0000 + 2.5199 1.0000 + 3.9004 1.0000 + 4.0331 1.0000 + 6.5737 1.0000 + 6.7304 1.0000 + 8.8995 0.0000 + 9.4301 0.0000 + 9.7525 0.0000 + 14.2685 0.0000 + 34.2814 0.0000 + + + -91.8795 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7449 1.0000 + -30.0129 1.0000 + -29.9797 1.0000 + -29.8895 1.0000 + -1.4187 1.0000 + 4.4601 1.0000 + 4.6731 1.0000 + 5.6743 1.0000 + 5.9932 1.0000 + 8.1576 0.0001 + 8.3102 0.0000 + 9.3878 0.0000 + 9.5739 0.0000 + 14.6169 0.0000 + 15.2950 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2900 1.0000 + -65.7449 1.0000 + -30.0151 1.0000 + -29.9795 1.0000 + -29.8894 1.0000 + -1.3679 1.0000 + 4.3898 1.0000 + 4.6848 1.0000 + 5.5775 1.0000 + 5.9882 1.0000 + 8.0710 0.0039 + 8.3358 0.0000 + 9.2963 0.0000 + 9.8808 0.0000 + 14.7640 0.0000 + 15.2851 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7447 1.0000 + -30.0211 1.0000 + -29.9789 1.0000 + -29.8889 1.0000 + -1.2205 1.0000 + 4.1260 1.0000 + 4.7341 1.0000 + 5.4333 1.0000 + 5.9646 1.0000 + 7.6673 0.9988 + 8.7032 0.0000 + 9.1336 0.0000 + 10.4886 0.0000 + 14.8840 0.0000 + 16.1247 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2897 1.0000 + -65.7446 1.0000 + -30.0299 1.0000 + -29.9782 1.0000 + -29.8882 1.0000 + -0.9808 1.0000 + 3.6652 1.0000 + 4.7987 1.0000 + 5.3993 1.0000 + 5.9001 1.0000 + 7.3364 1.0000 + 8.6839 0.0000 + 9.4310 0.0000 + 11.1616 0.0000 + 14.7250 0.0000 + 16.1963 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2899 1.0000 + -65.7444 1.0000 + -30.0400 1.0000 + -29.9771 1.0000 + -29.8874 1.0000 + -0.6587 1.0000 + 3.0989 1.0000 + 4.8498 1.0000 + 5.4590 1.0000 + 5.7806 1.0000 + 7.1397 1.0000 + 8.5209 0.0000 + 9.9588 0.0000 + 11.8236 0.0000 + 14.2014 0.0000 + 16.2147 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7442 1.0000 + -30.0497 1.0000 + -29.9762 1.0000 + -29.8866 1.0000 + -0.2656 1.0000 + 2.4987 1.0000 + 4.8835 1.0000 + 5.5379 1.0000 + 5.6319 1.0000 + 7.0597 1.0000 + 8.4828 0.0000 + 10.4687 0.0000 + 12.4416 0.0000 + 13.3290 0.0000 + 15.1337 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7441 1.0000 + -30.0573 1.0000 + -29.9754 1.0000 + -29.8860 1.0000 + 0.1849 1.0000 + 1.9035 1.0000 + 4.9056 1.0000 + 5.5030 1.0000 + 5.5861 1.0000 + 7.0432 1.0000 + 8.5758 0.0000 + 10.9253 0.0000 + 12.5527 0.0000 + 13.0088 0.0000 + 14.8073 0.0000 + + + -91.8812 1.0000 + -91.4261 1.0000 + -91.2912 1.0000 + -65.7441 1.0000 + -30.0615 1.0000 + -29.9750 1.0000 + -29.8857 1.0000 + 0.6491 1.0000 + 1.3651 1.0000 + 4.9176 1.0000 + 5.4303 1.0000 + 5.6017 1.0000 + 7.0458 1.0000 + 8.6931 0.0000 + 11.3271 0.0000 + 11.9366 0.0000 + 13.5779 0.0000 + 14.3517 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7449 1.0000 + -30.0127 1.0000 + -29.9828 1.0000 + -29.8893 1.0000 + -1.3666 1.0000 + 4.4223 1.0000 + 4.6934 1.0000 + 5.6697 1.0000 + 5.8285 1.0000 + 8.0271 0.0206 + 8.3692 0.0000 + 9.4509 0.0000 + 9.7370 0.0000 + 14.9651 0.0000 + 15.3421 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2901 1.0000 + -65.7448 1.0000 + -30.0148 1.0000 + -29.9826 1.0000 + -29.8892 1.0000 + -1.3163 1.0000 + 4.3772 1.0000 + 4.7020 1.0000 + 5.4537 1.0000 + 5.9491 1.0000 + 7.7861 0.9142 + 8.5756 0.0000 + 9.5058 0.0000 + 9.8346 0.0000 + 15.0595 0.0000 + 16.2568 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7447 1.0000 + -30.0208 1.0000 + -29.9819 1.0000 + -29.8886 1.0000 + -1.1678 1.0000 + 4.1541 1.0000 + 4.7483 1.0000 + 5.2311 1.0000 + 6.0125 1.0000 + 7.4085 1.0000 + 8.9608 0.0000 + 9.3188 0.0000 + 10.3531 0.0000 + 15.1264 0.0000 + 15.6355 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7445 1.0000 + -30.0296 1.0000 + -29.9811 1.0000 + -29.8879 1.0000 + -0.9290 1.0000 + 3.7034 1.0000 + 4.8102 1.0000 + 5.1970 1.0000 + 5.9664 1.0000 + 7.1173 1.0000 + 8.9157 0.0000 + 9.5830 0.0000 + 14.0696 0.0000 + 15.5381 0.0000 + 16.0450 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7443 1.0000 + -30.0398 1.0000 + -29.9802 1.0000 + -29.8871 1.0000 + -0.6068 1.0000 + 3.1346 1.0000 + 4.8473 1.0000 + 5.3098 1.0000 + 5.8138 1.0000 + 6.9753 1.0000 + 8.6937 0.0000 + 10.0930 0.0000 + 11.5987 0.0000 + 14.2851 0.0000 + 15.4916 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7442 1.0000 + -30.0495 1.0000 + -29.9792 1.0000 + -29.8864 1.0000 + -0.2132 1.0000 + 2.5322 1.0000 + 4.8734 1.0000 + 5.4530 1.0000 + 5.6251 1.0000 + 6.9349 1.0000 + 8.5950 0.0000 + 10.5671 0.0000 + 12.1071 0.0000 + 13.6101 0.0000 + 15.2056 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7441 1.0000 + -30.0571 1.0000 + -29.9785 1.0000 + -29.8858 1.0000 + 0.2373 1.0000 + 1.9361 1.0000 + 4.9016 1.0000 + 5.4135 1.0000 + 5.6118 1.0000 + 6.9300 1.0000 + 8.6308 0.0000 + 10.9545 0.0000 + 12.2321 0.0000 + 13.3411 0.0000 + 14.6028 0.0000 + + + -91.8813 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7440 1.0000 + -30.0612 1.0000 + -29.9781 1.0000 + -29.8855 1.0000 + 0.7080 1.0000 + 1.3914 1.0000 + 4.9262 1.0000 + 5.3148 1.0000 + 5.6677 1.0000 + 6.9317 1.0000 + 8.7105 0.0000 + 11.2069 0.0000 + 11.9941 0.0000 + 13.6247 0.0000 + 14.2566 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7447 1.0000 + -30.0118 1.0000 + -29.9913 1.0000 + -29.8886 1.0000 + -1.2087 1.0000 + 4.2480 1.0000 + 4.7537 1.0000 + 5.5479 1.0000 + 5.6464 1.0000 + 7.5854 1.0000 + 8.8369 0.0000 + 9.1686 0.0000 + 10.3783 0.0000 + 15.1703 0.0000 + 16.5372 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7446 1.0000 + -30.0140 1.0000 + -29.9911 1.0000 + -29.8884 1.0000 + -1.1599 1.0000 + 4.2600 1.0000 + 4.7624 1.0000 + 5.1876 1.0000 + 5.8950 1.0000 + 7.3708 1.0000 + 9.0334 0.0000 + 9.3519 0.0000 + 10.2679 0.0000 + 15.3111 0.0000 + 15.6587 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7445 1.0000 + -30.0200 1.0000 + -29.9906 1.0000 + -29.8880 1.0000 + -1.0132 1.0000 + 4.2030 1.0000 + 4.7943 1.0000 + 4.8011 1.0000 + 6.0641 1.0000 + 6.9806 1.0000 + 9.4178 0.0000 + 9.6455 0.0000 + 10.1655 0.0000 + 15.5541 0.0000 + 16.0175 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7444 1.0000 + -30.0289 1.0000 + -29.9897 1.0000 + -29.8872 1.0000 + -0.7738 1.0000 + 3.8102 1.0000 + 4.7014 1.0000 + 4.8920 1.0000 + 6.0747 1.0000 + 6.6867 1.0000 + 9.3773 0.0000 + 9.9364 0.0000 + 10.5923 0.0000 + 15.0458 0.0000 + 15.9243 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7441 1.0000 + -30.0390 1.0000 + -29.9887 1.0000 + -29.8864 1.0000 + -0.4528 1.0000 + 3.2344 1.0000 + 4.7338 1.0000 + 5.0752 1.0000 + 5.8733 1.0000 + 6.6224 1.0000 + 9.0753 0.0000 + 10.3673 0.0000 + 11.1413 0.0000 + 14.3495 0.0000 + 16.6028 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7440 1.0000 + -30.0487 1.0000 + -29.9878 1.0000 + -29.8857 1.0000 + -0.0611 1.0000 + 2.6291 1.0000 + 4.7819 1.0000 + 5.2693 1.0000 + 5.6458 1.0000 + 6.6483 1.0000 + 8.8604 0.0000 + 10.6806 0.0000 + 11.6275 0.0000 + 13.8130 0.0000 + 15.2714 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7438 1.0000 + -30.0563 1.0000 + -29.9871 1.0000 + -29.8850 1.0000 + 0.3892 1.0000 + 2.0335 1.0000 + 4.8463 1.0000 + 5.2455 1.0000 + 5.6563 1.0000 + 6.6606 1.0000 + 8.7680 0.0000 + 10.8072 0.0000 + 11.9897 0.0000 + 13.5317 0.0000 + 14.8625 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7438 1.0000 + -30.0604 1.0000 + -29.9867 1.0000 + -29.8847 1.0000 + 0.8747 1.0000 + 1.4744 1.0000 + 4.9295 1.0000 + 5.1004 1.0000 + 5.7671 1.0000 + 6.6527 1.0000 + 8.7570 0.0000 + 10.8011 0.0000 + 12.1859 0.0000 + 13.5593 0.0000 + 14.6572 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7444 1.0000 + -30.0105 1.0000 + -30.0038 1.0000 + -29.8876 1.0000 + -0.9548 1.0000 + 3.8567 1.0000 + 4.8138 1.0000 + 5.4323 1.0000 + 5.5813 1.0000 + 7.2363 1.0000 + 8.8397 0.0000 + 9.4096 0.0000 + 11.0606 0.0000 + 14.9041 0.0000 + 15.9154 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7444 1.0000 + -30.0127 1.0000 + -30.0037 1.0000 + -29.8874 1.0000 + -0.9054 1.0000 + 3.8932 1.0000 + 4.8113 1.0000 + 5.0970 1.0000 + 5.8095 1.0000 + 7.0569 1.0000 + 9.0275 0.0000 + 9.5614 0.0000 + 10.9012 0.0000 + 15.3640 0.0000 + 16.2477 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7443 1.0000 + -30.0188 1.0000 + -30.0031 1.0000 + -29.8869 1.0000 + -0.7600 1.0000 + 3.9970 1.0000 + 4.5299 1.0000 + 4.9001 1.0000 + 6.0104 1.0000 + 6.6764 1.0000 + 9.4299 0.0000 + 9.9366 0.0000 + 10.5322 0.0000 + 15.0414 0.0000 + 15.7405 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7441 1.0000 + -30.0277 1.0000 + -30.0023 1.0000 + -29.8862 1.0000 + -0.5239 1.0000 + 3.9586 1.0000 + 4.1573 1.0000 + 4.9630 1.0000 + 6.1585 1.0000 + 6.2704 1.0000 + 9.7369 0.0000 + 10.1887 0.0000 + 10.4392 0.0000 + 14.6116 0.0000 + 15.8892 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7439 1.0000 + -30.0379 1.0000 + -30.0014 1.0000 + -29.8854 1.0000 + -0.2066 1.0000 + 3.3648 1.0000 + 4.3281 1.0000 + 5.0858 1.0000 + 5.8933 1.0000 + 6.2876 1.0000 + 9.4924 0.0000 + 10.3513 0.0000 + 10.9098 0.0000 + 14.1968 0.0000 + 15.6095 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7437 1.0000 + -30.0476 1.0000 + -30.0005 1.0000 + -29.8847 1.0000 + 0.1788 1.0000 + 2.7700 1.0000 + 4.4886 1.0000 + 5.2214 1.0000 + 5.6433 1.0000 + 6.3659 1.0000 + 9.1667 0.0000 + 10.4414 0.0000 + 11.3646 0.0000 + 13.8896 0.0000 + 16.6031 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7436 1.0000 + -30.0552 1.0000 + -29.9998 1.0000 + -29.8840 1.0000 + 0.6216 1.0000 + 2.1905 1.0000 + 4.6276 1.0000 + 5.1554 1.0000 + 5.7004 1.0000 + 6.3833 1.0000 + 8.9358 0.0000 + 10.3679 0.0000 + 11.7330 0.0000 + 13.7871 0.0000 + 15.4993 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2905 1.0000 + -65.7435 1.0000 + -30.0593 1.0000 + -29.9994 1.0000 + -29.8837 1.0000 + 1.1087 1.0000 + 1.6347 1.0000 + 4.7486 1.0000 + 4.9984 1.0000 + 5.8749 1.0000 + 6.3442 1.0000 + 8.8213 0.0000 + 10.2716 0.0000 + 11.9440 0.0000 + 13.8193 0.0000 + 14.8856 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7441 1.0000 + -30.0183 1.0000 + -30.0091 1.0000 + -29.8863 1.0000 + -0.6139 1.0000 + 3.3047 1.0000 + 4.8442 1.0000 + 5.4603 1.0000 + 5.4868 1.0000 + 7.0343 1.0000 + 8.6590 0.0000 + 9.9415 0.0000 + 11.7134 0.0000 + 14.2240 0.0000 + 15.8795 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7441 1.0000 + -30.0181 1.0000 + -30.0113 1.0000 + -29.8862 1.0000 + -0.5649 1.0000 + 3.3377 1.0000 + 4.8084 1.0000 + 5.2074 1.0000 + 5.6705 1.0000 + 6.9017 1.0000 + 8.8064 0.0000 + 10.0721 0.0000 + 11.5068 0.0000 + 14.3145 0.0000 + 15.6369 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7440 1.0000 + -30.0176 1.0000 + -30.0174 1.0000 + -29.8857 1.0000 + -0.4208 1.0000 + 3.4287 1.0000 + 4.5635 1.0000 + 5.0640 1.0000 + 5.7943 1.0000 + 6.6030 1.0000 + 9.1559 0.0000 + 10.3672 0.0000 + 11.0498 0.0000 + 14.3100 0.0000 + 15.6899 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7438 1.0000 + -30.0263 1.0000 + -30.0168 1.0000 + -29.8850 1.0000 + -0.1891 1.0000 + 3.5310 1.0000 + 4.1526 1.0000 + 5.0962 1.0000 + 5.8378 1.0000 + 6.3101 1.0000 + 9.5515 0.0000 + 10.4117 0.0000 + 10.7785 0.0000 + 14.0757 0.0000 + 16.4690 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7436 1.0000 + -30.0365 1.0000 + -30.0159 1.0000 + -29.8842 1.0000 + 0.1197 1.0000 + 3.3712 1.0000 + 3.9854 1.0000 + 5.1910 1.0000 + 5.7030 1.0000 + 6.2124 1.0000 + 9.7686 0.0000 + 10.0355 0.0000 + 10.9145 0.0000 + 13.9867 0.0000 + 15.9162 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7434 1.0000 + -30.0463 1.0000 + -30.0150 1.0000 + -29.8835 1.0000 + 0.4894 1.0000 + 2.9018 1.0000 + 4.1317 1.0000 + 5.2339 1.0000 + 5.5776 1.0000 + 6.2422 1.0000 + 9.4373 0.0000 + 9.9987 0.0000 + 11.0336 0.0000 + 14.2044 0.0000 + 15.5874 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7433 1.0000 + -30.0539 1.0000 + -30.0143 1.0000 + -29.8829 1.0000 + 0.9061 1.0000 + 2.3921 1.0000 + 4.3127 1.0000 + 5.0699 1.0000 + 5.7376 1.0000 + 6.2494 1.0000 + 9.0950 0.0000 + 9.8623 0.0000 + 11.1873 0.0000 + 15.0131 0.0000 + 17.2295 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7431 1.0000 + -30.0580 1.0000 + -30.0139 1.0000 + -29.8825 1.0000 + 1.3392 1.0000 + 1.9119 1.0000 + 4.4535 1.0000 + 4.9101 1.0000 + 5.9724 1.0000 + 6.1724 1.0000 + 8.8920 0.0000 + 9.7378 0.0000 + 11.2934 0.0000 + 14.5094 0.0000 + 14.9006 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7438 1.0000 + -30.0320 1.0000 + -30.0077 1.0000 + -29.8852 1.0000 + -0.1990 1.0000 + 2.6933 1.0000 + 4.8622 1.0000 + 5.3088 1.0000 + 5.5698 1.0000 + 6.9576 1.0000 + 8.6840 0.0000 + 10.4231 0.0000 + 12.3103 0.0000 + 13.3388 0.0000 + 15.0063 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7438 1.0000 + -30.0318 1.0000 + -30.0099 1.0000 + -29.8850 1.0000 + -0.1505 1.0000 + 2.7229 1.0000 + 4.8168 1.0000 + 5.2487 1.0000 + 5.5888 1.0000 + 6.8570 1.0000 + 8.7830 0.0000 + 10.5162 0.0000 + 12.0017 0.0000 + 13.5605 0.0000 + 14.9311 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2902 1.0000 + -65.7436 1.0000 + -30.0312 1.0000 + -30.0160 1.0000 + -29.8846 1.0000 + -0.0083 1.0000 + 2.8063 1.0000 + 4.6280 1.0000 + 5.1868 1.0000 + 5.6156 1.0000 + 6.6210 1.0000 + 9.0297 0.0000 + 10.6548 0.0000 + 11.4979 0.0000 + 13.6805 0.0000 + 16.1680 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7435 1.0000 + -30.0305 1.0000 + -30.0249 1.0000 + -29.8838 1.0000 + 0.2176 1.0000 + 2.9196 1.0000 + 4.3150 1.0000 + 5.2001 1.0000 + 5.6107 1.0000 + 6.3844 1.0000 + 9.3223 0.0000 + 10.4868 0.0000 + 11.1488 0.0000 + 13.7394 0.0000 + 15.2525 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7433 1.0000 + -30.0353 1.0000 + -30.0296 1.0000 + -29.8831 1.0000 + 0.5095 1.0000 + 2.9934 1.0000 + 4.0235 1.0000 + 5.2081 1.0000 + 5.5733 1.0000 + 6.2653 1.0000 + 9.5540 0.0000 + 10.0537 0.0000 + 10.8460 0.0000 + 14.0317 0.0000 + 16.9865 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7431 1.0000 + -30.0450 1.0000 + -30.0288 1.0000 + -29.8823 1.0000 + 0.8493 1.0000 + 2.8878 1.0000 + 3.9281 1.0000 + 5.0740 1.0000 + 5.6506 1.0000 + 6.2584 1.0000 + 9.5863 0.0000 + 9.6119 0.0000 + 10.5896 0.0000 + 14.5477 0.0000 + 16.1231 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7430 1.0000 + -30.0527 1.0000 + -30.0281 1.0000 + -29.8818 1.0000 + 1.2065 1.0000 + 2.5979 1.0000 + 4.0342 1.0000 + 4.8601 1.0000 + 5.8427 1.0000 + 6.2709 1.0000 + 9.2185 0.0000 + 9.4083 0.0000 + 10.5443 0.0000 + 14.9799 0.0000 + 16.9946 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7429 1.0000 + -30.0568 1.0000 + -30.0277 1.0000 + -29.8814 1.0000 + 1.5149 1.0000 + 2.3015 1.0000 + 4.1783 1.0000 + 4.6820 1.0000 + 6.0499 1.0000 + 6.2287 1.0000 + 8.9581 0.0000 + 9.2598 0.0000 + 10.5742 0.0000 + 14.8199 0.0000 + 15.4551 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7436 1.0000 + -30.0427 1.0000 + -30.0068 1.0000 + -29.8843 1.0000 + 0.2722 1.0000 + 2.0800 1.0000 + 4.8773 1.0000 + 5.1767 1.0000 + 5.6077 1.0000 + 6.9482 1.0000 + 8.9102 0.0000 + 10.8202 0.0000 + 12.5032 0.0000 + 12.8741 0.0000 + 14.6540 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7436 1.0000 + -30.0425 1.0000 + -30.0088 1.0000 + -29.8842 1.0000 + 0.3219 1.0000 + 2.1086 1.0000 + 4.8435 1.0000 + 5.1373 1.0000 + 5.6282 1.0000 + 6.8548 1.0000 + 8.9591 0.0000 + 10.8385 0.0000 + 12.1616 0.0000 + 13.3887 0.0000 + 14.7173 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7434 1.0000 + -30.0420 1.0000 + -30.0149 1.0000 + -29.8837 1.0000 + 0.4637 1.0000 + 2.1902 1.0000 + 4.6998 1.0000 + 5.0929 1.0000 + 5.6713 1.0000 + 6.6315 1.0000 + 9.0845 0.0000 + 10.7099 0.0000 + 11.8347 0.0000 + 13.3260 0.0000 + 14.8037 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2904 1.0000 + -65.7433 1.0000 + -30.0412 1.0000 + -30.0239 1.0000 + -29.8830 1.0000 + 0.6817 1.0000 + 2.3190 1.0000 + 4.4554 1.0000 + 5.0740 1.0000 + 5.7125 1.0000 + 6.4023 1.0000 + 9.2380 0.0000 + 10.3235 0.0000 + 11.4656 0.0000 + 13.6342 0.0000 + 15.3546 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7431 1.0000 + -30.0404 1.0000 + -30.0342 1.0000 + -29.8822 1.0000 + 0.9487 1.0000 + 2.4808 1.0000 + 4.1899 1.0000 + 5.0008 1.0000 + 5.7567 1.0000 + 6.2838 1.0000 + 9.3589 0.0000 + 9.8771 0.0000 + 10.8863 0.0000 + 14.2986 0.0000 + 15.7162 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7429 1.0000 + -30.0441 1.0000 + -30.0396 1.0000 + -29.8814 1.0000 + 1.2299 1.0000 + 2.6376 1.0000 + 3.9806 1.0000 + 4.8199 1.0000 + 5.8594 1.0000 + 6.2868 1.0000 + 9.3046 0.0000 + 9.5580 0.0000 + 10.2980 0.0000 + 14.7255 0.0000 + 15.1041 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7427 1.0000 + -30.0517 1.0000 + -30.0390 1.0000 + -29.8808 1.0000 + 1.4810 1.0000 + 2.7241 1.0000 + 3.9050 1.0000 + 4.5774 1.0000 + 6.0293 1.0000 + 6.3312 1.0000 + 9.0511 0.0000 + 9.2924 0.0000 + 9.9968 0.0000 + 14.8542 0.0000 + 17.0014 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7427 1.0000 + -30.0559 1.0000 + -30.0387 1.0000 + -29.8806 1.0000 + 1.6404 1.0000 + 2.7265 1.0000 + 3.9706 1.0000 + 4.3593 1.0000 + 6.1919 1.0000 + 6.3459 1.0000 + 8.8868 0.0000 + 9.0124 0.0000 + 9.9580 0.0000 + 16.6992 0.0000 + 18.2794 0.0000 + + + -91.8816 1.0000 + -91.4266 1.0000 + -91.2915 1.0000 + -65.7435 1.0000 + -30.0485 1.0000 + -30.0062 1.0000 + -29.8839 1.0000 + 0.7508 1.0000 + 1.5290 1.0000 + 4.8872 1.0000 + 5.1019 1.0000 + 5.6111 1.0000 + 6.9563 1.0000 + 9.1684 0.0000 + 11.0963 0.0000 + 11.8845 0.0000 + 13.4542 0.0000 + 13.9816 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7434 1.0000 + -30.0483 1.0000 + -30.0082 1.0000 + -29.8836 1.0000 + 0.8074 1.0000 + 1.5503 1.0000 + 4.8837 1.0000 + 5.0282 1.0000 + 5.6611 1.0000 + 6.8614 1.0000 + 9.1821 0.0000 + 10.9712 0.0000 + 11.9443 0.0000 + 13.3175 0.0000 + 14.0111 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7433 1.0000 + -30.0478 1.0000 + -30.0143 1.0000 + -29.8832 1.0000 + 0.9654 1.0000 + 1.6153 1.0000 + 4.7866 1.0000 + 4.9431 1.0000 + 5.7637 1.0000 + 6.6281 1.0000 + 9.2181 0.0000 + 10.6031 0.0000 + 12.0239 0.0000 + 13.2393 0.0000 + 14.3926 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7432 1.0000 + -30.0471 1.0000 + -30.0234 1.0000 + -29.8825 1.0000 + 1.1904 1.0000 + 1.7430 1.0000 + 4.5650 1.0000 + 4.9174 1.0000 + 5.8769 1.0000 + 6.3717 1.0000 + 9.2652 0.0000 + 10.1220 0.0000 + 11.6464 0.0000 + 13.6165 0.0000 + 14.7417 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7430 1.0000 + -30.0463 1.0000 + -30.0337 1.0000 + -29.8817 1.0000 + 1.4108 1.0000 + 1.9753 1.0000 + 4.3324 1.0000 + 4.8220 1.0000 + 5.9828 1.0000 + 6.2221 1.0000 + 9.3061 0.0000 + 9.6403 0.0000 + 10.9581 0.0000 + 14.3215 0.0000 + 14.8365 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7428 1.0000 + -30.0455 1.0000 + -30.0435 1.0000 + -29.8809 1.0000 + 1.5658 1.0000 + 2.3279 1.0000 + 4.1275 1.0000 + 4.6077 1.0000 + 6.0847 1.0000 + 6.2409 1.0000 + 9.1753 0.0000 + 9.3638 0.0000 + 10.2421 0.0000 + 14.7264 0.0000 + 15.1864 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7426 1.0000 + -30.0512 1.0000 + -30.0449 1.0000 + -29.8803 1.0000 + 1.6627 1.0000 + 2.7320 1.0000 + 3.9747 1.0000 + 4.3124 1.0000 + 6.2217 1.0000 + 6.3335 1.0000 + 8.8577 0.0000 + 9.2736 0.0000 + 9.7144 0.0000 + 14.6891 0.0000 + 16.0466 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7426 1.0000 + -30.0554 1.0000 + -30.0446 1.0000 + -29.8800 1.0000 + 1.7108 1.0000 + 3.0627 1.0000 + 3.8918 1.0000 + 4.0425 1.0000 + 6.3299 1.0000 + 6.4187 1.0000 + 8.6764 0.0000 + 9.0361 0.0000 + 9.5744 0.0000 + 15.1073 0.0000 + 16.7779 0.0000 + + + -91.8791 1.0000 + -91.4239 1.0000 + -91.2890 1.0000 + -65.7431 1.0000 + -30.0077 1.0000 + -29.9745 1.0000 + -29.9360 1.0000 + -0.9922 1.0000 + 4.1697 1.0000 + 4.4791 1.0000 + 5.2762 1.0000 + 5.5520 1.0000 + 8.4050 0.0000 + 8.4412 0.0000 + 9.7376 0.0000 + 9.9653 0.0000 + 14.6114 0.0000 + 15.5437 0.0000 + + + -91.8795 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7431 1.0000 + -30.0099 1.0000 + -29.9743 1.0000 + -29.9359 1.0000 + -0.9433 1.0000 + 4.1493 1.0000 + 4.4316 1.0000 + 5.2543 1.0000 + 5.5665 1.0000 + 8.1472 0.0001 + 8.5627 0.0000 + 9.6381 0.0000 + 10.2814 0.0000 + 14.5670 0.0000 + 16.3874 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7431 1.0000 + -30.0160 1.0000 + -29.9738 1.0000 + -29.9355 1.0000 + -0.7997 1.0000 + 3.9591 1.0000 + 4.4276 1.0000 + 5.2220 1.0000 + 5.6067 1.0000 + 7.6690 0.9988 + 8.8770 0.0000 + 9.3920 0.0000 + 10.9261 0.0000 + 14.5052 0.0000 + 15.8789 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7429 1.0000 + -30.0250 1.0000 + -29.9729 1.0000 + -29.9348 1.0000 + -0.5652 1.0000 + 3.5680 1.0000 + 4.5355 1.0000 + 5.2114 1.0000 + 5.6623 1.0000 + 7.2067 1.0000 + 9.1059 0.0000 + 9.2908 0.0000 + 11.6363 0.0000 + 14.1697 0.0000 + 15.7589 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7427 1.0000 + -30.0353 1.0000 + -29.9719 1.0000 + -29.9341 1.0000 + -0.2521 1.0000 + 3.0868 1.0000 + 4.6814 1.0000 + 5.2185 1.0000 + 5.7142 1.0000 + 6.8332 1.0000 + 8.8793 0.0000 + 9.7265 0.0000 + 12.2929 0.0000 + 13.5685 0.0000 + 16.1058 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7425 1.0000 + -30.0450 1.0000 + -29.9710 1.0000 + -29.9334 1.0000 + 0.1257 1.0000 + 2.5716 1.0000 + 4.8261 1.0000 + 5.2273 1.0000 + 5.7364 1.0000 + 6.5820 1.0000 + 8.7708 0.0000 + 10.1434 0.0000 + 12.7927 0.0000 + 12.8308 0.0000 + 15.4481 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7424 1.0000 + -30.0526 1.0000 + -29.9703 1.0000 + -29.9329 1.0000 + 0.5574 1.0000 + 2.0489 1.0000 + 4.9438 1.0000 + 5.2220 1.0000 + 5.7179 1.0000 + 6.4574 1.0000 + 8.7837 0.0000 + 10.5245 0.0000 + 12.1279 0.0000 + 13.0743 0.0000 + 15.2254 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7423 1.0000 + -30.0568 1.0000 + -29.9699 1.0000 + -29.9325 1.0000 + 1.0239 1.0000 + 1.5364 1.0000 + 5.0194 1.0000 + 5.2031 1.0000 + 5.6900 1.0000 + 6.4177 1.0000 + 8.8427 0.0000 + 10.8611 0.0000 + 11.5754 0.0000 + 13.1725 0.0000 + 14.7884 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7431 1.0000 + -30.0075 1.0000 + -29.9776 1.0000 + -29.9357 1.0000 + -0.9418 1.0000 + 4.1601 1.0000 + 4.4633 1.0000 + 5.2925 1.0000 + 5.4803 1.0000 + 8.1369 0.0002 + 8.5843 0.0000 + 9.8748 0.0000 + 14.2706 0.0000 + 16.6056 0.0000 + 16.6825 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7431 1.0000 + -30.0097 1.0000 + -29.9774 1.0000 + -29.9356 1.0000 + -0.8921 1.0000 + 4.1617 1.0000 + 4.4064 1.0000 + 5.2343 1.0000 + 5.5218 1.0000 + 7.8744 0.5472 + 8.6852 0.0000 + 9.8973 0.0000 + 10.2230 0.0000 + 14.6840 0.0000 + 15.1549 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7430 1.0000 + -30.0157 1.0000 + -29.9768 1.0000 + -29.9352 1.0000 + -0.7465 1.0000 + 4.0060 1.0000 + 4.3910 1.0000 + 5.1646 1.0000 + 5.5823 1.0000 + 7.4453 1.0000 + 8.9926 0.0000 + 9.6515 0.0000 + 10.7842 0.0000 + 14.7401 0.0000 + 15.9068 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7428 1.0000 + -30.0247 1.0000 + -29.9759 1.0000 + -29.9346 1.0000 + -0.5124 1.0000 + 3.6173 1.0000 + 4.5175 1.0000 + 5.1467 1.0000 + 5.6283 1.0000 + 7.0241 1.0000 + 9.3214 0.0000 + 9.4009 0.0000 + 11.4365 0.0000 + 14.2651 0.0000 + 15.7142 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7426 1.0000 + -30.0350 1.0000 + -29.9750 1.0000 + -29.9339 1.0000 + -0.2008 1.0000 + 3.1352 1.0000 + 4.6826 1.0000 + 5.1753 1.0000 + 5.6422 1.0000 + 6.6940 1.0000 + 9.0514 0.0000 + 9.8080 0.0000 + 13.0238 0.0000 + 15.4136 0.0000 + 16.0797 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7424 1.0000 + -30.0447 1.0000 + -29.9741 1.0000 + -29.9332 1.0000 + 0.1782 1.0000 + 2.6185 1.0000 + 4.8334 1.0000 + 5.2268 1.0000 + 5.6216 1.0000 + 6.4836 1.0000 + 8.8850 0.0000 + 10.1806 0.0000 + 12.1773 0.0000 + 13.4647 0.0000 + 15.3704 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7423 1.0000 + -30.0524 1.0000 + -29.9734 1.0000 + -29.9327 1.0000 + 0.6080 1.0000 + 2.0944 1.0000 + 4.9487 1.0000 + 5.2360 1.0000 + 5.6214 1.0000 + 6.3720 1.0000 + 8.8398 0.0000 + 10.4741 0.0000 + 11.9232 0.0000 + 13.5675 0.0000 + 15.0575 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7422 1.0000 + -30.0566 1.0000 + -29.9730 1.0000 + -29.9323 1.0000 + 1.0767 1.0000 + 1.5797 1.0000 + 5.0331 1.0000 + 5.1824 1.0000 + 5.6559 1.0000 + 6.3220 1.0000 + 8.8601 0.0000 + 10.6497 0.0000 + 11.6448 0.0000 + 13.4921 0.0000 + 14.9068 0.0000 + + + -91.8794 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7429 1.0000 + -30.0066 1.0000 + -29.9862 1.0000 + -29.9351 1.0000 + -0.7866 1.0000 + 4.0335 1.0000 + 4.4889 1.0000 + 5.3371 1.0000 + 5.3463 1.0000 + 7.5604 1.0000 + 8.8667 0.0000 + 9.5757 0.0000 + 10.8119 0.0000 + 15.0193 0.0000 + 16.5679 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7429 1.0000 + -30.0088 1.0000 + -29.9860 1.0000 + -29.9350 1.0000 + -0.7381 1.0000 + 4.0728 1.0000 + 4.4246 1.0000 + 5.1607 1.0000 + 5.4807 1.0000 + 7.3825 1.0000 + 8.9797 0.0000 + 9.7876 0.0000 + 10.6899 0.0000 + 14.8927 0.0000 + 16.0636 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7428 1.0000 + -30.0149 1.0000 + -29.9854 1.0000 + -29.9346 1.0000 + -0.5926 1.0000 + 4.1214 1.0000 + 4.2640 1.0000 + 5.0156 1.0000 + 5.5704 1.0000 + 7.0120 1.0000 + 9.2675 0.0000 + 10.0834 0.0000 + 10.5691 0.0000 + 14.8072 0.0000 + 15.6699 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2899 1.0000 + -65.7426 1.0000 + -30.0239 1.0000 + -29.9846 1.0000 + -29.9340 1.0000 + -0.3590 1.0000 + 3.7621 1.0000 + 4.4212 1.0000 + 4.9587 1.0000 + 5.6136 1.0000 + 6.6438 1.0000 + 9.6171 0.0000 + 9.8168 0.0000 + 11.0150 0.0000 + 14.3910 0.0000 + 16.1444 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7424 1.0000 + -30.0342 1.0000 + -29.9837 1.0000 + -29.9333 1.0000 + -0.0480 1.0000 + 3.2758 1.0000 + 4.6646 1.0000 + 4.9722 1.0000 + 5.5802 1.0000 + 6.3794 1.0000 + 9.4388 0.0000 + 9.9520 0.0000 + 11.4875 0.0000 + 13.9130 0.0000 + 15.6021 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7422 1.0000 + -30.0440 1.0000 + -29.9828 1.0000 + -29.9326 1.0000 + 0.3278 1.0000 + 2.7560 1.0000 + 4.8584 1.0000 + 5.1054 1.0000 + 5.4544 1.0000 + 6.2435 1.0000 + 9.1535 0.0000 + 10.1417 0.0000 + 11.7635 0.0000 + 13.9583 0.0000 + 15.3074 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7421 1.0000 + -30.0516 1.0000 + -29.9821 1.0000 + -29.9320 1.0000 + 0.7545 1.0000 + 2.2317 1.0000 + 4.9434 1.0000 + 5.2715 1.0000 + 5.3901 1.0000 + 6.1613 1.0000 + 8.9788 0.0000 + 10.1660 0.0000 + 11.8759 0.0000 + 14.0401 0.0000 + 14.7589 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7421 1.0000 + -30.0559 1.0000 + -29.9817 1.0000 + -29.9317 1.0000 + 1.2187 1.0000 + 1.7187 1.0000 + 5.0186 1.0000 + 5.1440 1.0000 + 5.6004 1.0000 + 6.0785 1.0000 + 8.9071 0.0000 + 10.1124 0.0000 + 11.9295 0.0000 + 14.1658 0.0000 + 14.5853 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7427 1.0000 + -30.0054 1.0000 + -29.9989 1.0000 + -29.9343 1.0000 + -0.5379 1.0000 + 3.7030 1.0000 + 4.6090 1.0000 + 5.2630 1.0000 + 5.3959 1.0000 + 7.0695 1.0000 + 9.0908 0.0000 + 9.4357 0.0000 + 11.5575 0.0000 + 14.3516 0.0000 + 16.3601 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7426 1.0000 + -30.0076 1.0000 + -29.9987 1.0000 + -29.9341 1.0000 + -0.4887 1.0000 + 3.7492 1.0000 + 4.5743 1.0000 + 5.0985 1.0000 + 5.4857 1.0000 + 6.9239 1.0000 + 9.2263 0.0000 + 9.5939 0.0000 + 11.3727 0.0000 + 14.7170 0.0000 + 16.1538 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7426 1.0000 + -30.0138 1.0000 + -29.9982 1.0000 + -29.9337 1.0000 + -0.3455 1.0000 + 3.8851 1.0000 + 4.3963 1.0000 + 4.8981 1.0000 + 5.5780 1.0000 + 6.6012 1.0000 + 9.5131 0.0000 + 9.9903 0.0000 + 10.9583 0.0000 + 15.0569 0.0000 + 16.3985 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7424 1.0000 + -30.0228 1.0000 + -29.9974 1.0000 + -29.9331 1.0000 + -0.1133 1.0000 + 3.9680 1.0000 + 4.1423 1.0000 + 4.8263 1.0000 + 5.6458 1.0000 + 6.2595 1.0000 + 9.7738 0.0000 + 10.2498 0.0000 + 10.7319 0.0000 + 13.9527 0.0000 + 15.3880 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7422 1.0000 + -30.0330 1.0000 + -29.9965 1.0000 + -29.9323 1.0000 + 0.1946 1.0000 + 3.4921 1.0000 + 4.4185 1.0000 + 4.8251 1.0000 + 5.6324 1.0000 + 6.0245 1.0000 + 9.7715 0.0000 + 9.9943 0.0000 + 11.1510 0.0000 + 13.7014 0.0000 + 16.5495 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7420 1.0000 + -30.0429 1.0000 + -29.9956 1.0000 + -29.9316 1.0000 + 0.5628 1.0000 + 2.9731 1.0000 + 4.7045 1.0000 + 4.9098 1.0000 + 5.4759 1.0000 + 5.9673 1.0000 + 9.4317 0.0000 + 9.8472 0.0000 + 11.5921 0.0000 + 13.6688 0.0000 + 15.3116 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7418 1.0000 + -30.0505 1.0000 + -29.9949 1.0000 + -29.9311 1.0000 + 0.9775 1.0000 + 2.4579 1.0000 + 4.7922 1.0000 + 5.2187 1.0000 + 5.3117 1.0000 + 5.9343 1.0000 + 9.1395 0.0000 + 9.6338 0.0000 + 11.9354 0.0000 + 13.8117 0.0000 + 15.0790 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7418 1.0000 + -30.0548 1.0000 + -29.9946 1.0000 + -29.9308 1.0000 + 1.4086 1.0000 + 1.9761 1.0000 + 4.8168 1.0000 + 5.2061 1.0000 + 5.5597 1.0000 + 5.8151 1.0000 + 8.9724 0.0000 + 9.4790 0.0000 + 12.1291 0.0000 + 14.1071 0.0000 + 15.6601 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7424 1.0000 + -30.0135 1.0000 + -30.0040 1.0000 + -29.9332 1.0000 + -0.2065 1.0000 + 3.2450 1.0000 + 4.7589 1.0000 + 5.2488 1.0000 + 5.4433 1.0000 + 6.6906 1.0000 + 8.9578 0.0000 + 9.7562 0.0000 + 12.2284 0.0000 + 13.6467 0.0000 + 15.6738 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7424 1.0000 + -30.0133 1.0000 + -30.0062 1.0000 + -29.9330 1.0000 + -0.1582 1.0000 + 3.2898 1.0000 + 4.7575 1.0000 + 5.1144 1.0000 + 5.4721 1.0000 + 6.5804 1.0000 + 9.0982 0.0000 + 9.8501 0.0000 + 11.9458 0.0000 + 13.9323 0.0000 + 15.6257 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7422 1.0000 + -30.0128 1.0000 + -30.0124 1.0000 + -29.9326 1.0000 + -0.0156 1.0000 + 3.4223 1.0000 + 4.6865 1.0000 + 4.8536 1.0000 + 5.5334 1.0000 + 6.3183 1.0000 + 9.4083 0.0000 + 10.0693 0.0000 + 11.4327 0.0000 + 13.8385 0.0000 + 15.3753 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7421 1.0000 + -30.0214 1.0000 + -30.0120 1.0000 + -29.9320 1.0000 + 0.2115 1.0000 + 3.6251 1.0000 + 4.2944 1.0000 + 4.8274 1.0000 + 5.6180 1.0000 + 6.0093 1.0000 + 9.6312 0.0000 + 10.2757 0.0000 + 11.0215 0.0000 + 13.6105 0.0000 + 15.5689 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7418 1.0000 + -30.0317 1.0000 + -30.0111 1.0000 + -29.9313 1.0000 + 0.5117 1.0000 + 3.6756 1.0000 + 4.0282 1.0000 + 4.8696 1.0000 + 5.6990 1.0000 + 5.7349 1.0000 + 9.5362 0.0000 + 10.2061 0.0000 + 11.0080 0.0000 + 13.5324 0.0000 + 15.5343 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7417 1.0000 + -30.0416 1.0000 + -30.0103 1.0000 + -29.9306 1.0000 + 0.8642 1.0000 + 3.2318 1.0000 + 4.2558 1.0000 + 4.9684 1.0000 + 5.4836 1.0000 + 5.8019 1.0000 + 9.2565 0.0000 + 9.8056 0.0000 + 11.2920 0.0000 + 13.6768 0.0000 + 15.4872 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7415 1.0000 + -30.0493 1.0000 + -30.0096 1.0000 + -29.9300 1.0000 + 1.2490 1.0000 + 2.7560 1.0000 + 4.4489 1.0000 + 5.1394 1.0000 + 5.3565 1.0000 + 5.8359 1.0000 + 8.9975 0.0000 + 9.3530 0.0000 + 11.5665 0.0000 + 14.0109 0.0000 + 15.4805 0.0000 + + + -91.8796 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7414 1.0000 + -30.0535 1.0000 + -30.0091 1.0000 + -29.9298 1.0000 + 1.6087 1.0000 + 2.3515 1.0000 + 4.5288 1.0000 + 5.1724 1.0000 + 5.4938 1.0000 + 5.7819 1.0000 + 8.8529 0.0000 + 9.0524 0.0000 + 11.7104 0.0000 + 14.0573 0.0000 + 15.0900 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7422 1.0000 + -30.0274 1.0000 + -30.0027 1.0000 + -29.9322 1.0000 + 0.1919 1.0000 + 2.7296 1.0000 + 4.8887 1.0000 + 5.2689 1.0000 + 5.4479 1.0000 + 6.4571 1.0000 + 8.9309 0.0000 + 10.1141 0.0000 + 12.7287 0.0000 + 12.8456 0.0000 + 15.3170 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7421 1.0000 + -30.0272 1.0000 + -30.0048 1.0000 + -29.9320 1.0000 + 0.2409 1.0000 + 2.7729 1.0000 + 4.8898 1.0000 + 5.2223 1.0000 + 5.3965 1.0000 + 6.3796 1.0000 + 9.0274 0.0000 + 10.1593 0.0000 + 12.1501 0.0000 + 13.4325 0.0000 + 15.0368 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7419 1.0000 + -30.0267 1.0000 + -30.0110 1.0000 + -29.9316 1.0000 + 0.3806 1.0000 + 2.8996 1.0000 + 4.8497 1.0000 + 5.0127 1.0000 + 5.3985 1.0000 + 6.1868 1.0000 + 9.2455 0.0000 + 10.1860 0.0000 + 11.6938 0.0000 + 13.6620 0.0000 + 14.8455 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7418 1.0000 + -30.0259 1.0000 + -30.0201 1.0000 + -29.9310 1.0000 + 0.6011 1.0000 + 3.0992 1.0000 + 4.5252 1.0000 + 4.9705 1.0000 + 5.4410 1.0000 + 5.9674 1.0000 + 9.3795 0.0000 + 10.0938 0.0000 + 11.4215 0.0000 + 13.4946 0.0000 + 15.3249 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7416 1.0000 + -30.0305 1.0000 + -30.0251 1.0000 + -29.9303 1.0000 + 0.8844 1.0000 + 3.3282 1.0000 + 4.1307 1.0000 + 4.9976 1.0000 + 5.4432 1.0000 + 5.8368 1.0000 + 9.1709 0.0000 + 10.0960 0.0000 + 11.0760 0.0000 + 13.6019 0.0000 + 15.5760 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7414 1.0000 + -30.0404 1.0000 + -30.0242 1.0000 + -29.9296 1.0000 + 1.2071 1.0000 + 3.3733 1.0000 + 3.9450 1.0000 + 5.0033 1.0000 + 5.4115 1.0000 + 5.8500 1.0000 + 8.8027 0.0000 + 9.9189 0.0000 + 10.8392 0.0000 + 13.9632 0.0000 + 15.2363 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7413 1.0000 + -30.0482 1.0000 + -30.0236 1.0000 + -29.9291 1.0000 + 1.5374 1.0000 + 3.0788 1.0000 + 4.0952 1.0000 + 4.9405 1.0000 + 5.4963 1.0000 + 5.8970 1.0000 + 8.4845 0.0000 + 9.4593 0.0000 + 10.8758 0.0000 + 14.4053 0.0000 + 17.6986 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7411 1.0000 + -30.0524 1.0000 + -30.0233 1.0000 + -29.9289 1.0000 + 1.8017 1.0000 + 2.7984 1.0000 + 4.2319 1.0000 + 4.8727 1.0000 + 5.6545 1.0000 + 5.8902 1.0000 + 8.3046 0.0000 + 9.1174 0.0000 + 10.9361 0.0000 + 14.6714 0.0000 + 15.1061 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7419 1.0000 + -30.0381 1.0000 + -30.0016 1.0000 + -29.9314 1.0000 + 0.6438 1.0000 + 2.1972 1.0000 + 4.9816 1.0000 + 5.2821 1.0000 + 5.4079 1.0000 + 6.3587 1.0000 + 9.0891 0.0000 + 10.4109 0.0000 + 12.0762 0.0000 + 12.9720 0.0000 + 14.7931 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7418 1.0000 + -30.0379 1.0000 + -30.0038 1.0000 + -29.9312 1.0000 + 0.6917 1.0000 + 2.2385 1.0000 + 4.9684 1.0000 + 5.2605 1.0000 + 5.3795 1.0000 + 6.2871 1.0000 + 9.1342 0.0000 + 10.3626 0.0000 + 11.8755 0.0000 + 13.5638 0.0000 + 14.7415 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7417 1.0000 + -30.0374 1.0000 + -30.0100 1.0000 + -29.9308 1.0000 + 0.8289 1.0000 + 2.3628 1.0000 + 4.8680 1.0000 + 5.2167 1.0000 + 5.3487 1.0000 + 6.1151 1.0000 + 9.2333 0.0000 + 10.1098 0.0000 + 11.7864 0.0000 + 13.8645 0.0000 + 14.5821 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7415 1.0000 + -30.0368 1.0000 + -30.0191 1.0000 + -29.9302 1.0000 + 1.0385 1.0000 + 2.5659 1.0000 + 4.6184 1.0000 + 5.2494 1.0000 + 5.2935 1.0000 + 5.9474 1.0000 + 9.2299 0.0000 + 9.7805 0.0000 + 11.7623 0.0000 + 14.6669 0.0000 + 33.9627 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7413 1.0000 + -30.0360 1.0000 + -30.0295 1.0000 + -29.9295 1.0000 + 1.2933 1.0000 + 2.8351 1.0000 + 4.3053 1.0000 + 5.1462 1.0000 + 5.3500 1.0000 + 5.8888 1.0000 + 8.8751 0.0000 + 9.7440 0.0000 + 11.2586 0.0000 + 13.7436 0.0000 + 15.3267 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7412 1.0000 + -30.0394 1.0000 + -30.0352 1.0000 + -29.9289 1.0000 + 1.5626 1.0000 + 3.1227 1.0000 + 4.0176 1.0000 + 4.9307 1.0000 + 5.5039 1.0000 + 5.9329 1.0000 + 8.4289 0.0000 + 9.7601 0.0000 + 10.6018 0.0000 + 14.2919 0.0000 + 15.0899 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7410 1.0000 + -30.0472 1.0000 + -30.0346 1.0000 + -29.9284 1.0000 + 1.8088 1.0000 + 3.2901 1.0000 + 3.8891 1.0000 + 4.7082 1.0000 + 5.7010 1.0000 + 6.0056 1.0000 + 8.0678 0.0044 + 9.5108 0.0000 + 10.2464 0.0000 + 14.9130 0.0000 + 15.6767 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2912 1.0000 + -65.7409 1.0000 + -30.0515 1.0000 + -30.0343 1.0000 + -29.9281 1.0000 + 1.9715 1.0000 + 3.2549 1.0000 + 3.9834 1.0000 + 4.5315 1.0000 + 5.8883 1.0000 + 6.0297 1.0000 + 7.8661 0.5933 + 9.1689 0.0000 + 10.2004 0.0000 + 15.0616 0.0000 + 32.0644 0.0000 + + + -91.8815 1.0000 + -91.4266 1.0000 + -91.2915 1.0000 + -65.7418 1.0000 + -30.0440 1.0000 + -30.0011 1.0000 + -29.9310 1.0000 + 1.1269 1.0000 + 1.6721 1.0000 + 5.0342 1.0000 + 5.2771 1.0000 + 5.3683 1.0000 + 6.3348 1.0000 + 9.3061 0.0000 + 10.6059 0.0000 + 11.5175 0.0000 + 13.0325 0.0000 + 14.6615 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7417 1.0000 + -30.0438 1.0000 + -30.0032 1.0000 + -29.9308 1.0000 + 1.1784 1.0000 + 1.7101 1.0000 + 5.0365 1.0000 + 5.1518 1.0000 + 5.4647 1.0000 + 6.2520 1.0000 + 9.3181 0.0000 + 10.4031 0.0000 + 11.5903 0.0000 + 13.3633 0.0000 + 14.5583 0.0000 + + + -91.8801 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7415 1.0000 + -30.0433 1.0000 + -30.0093 1.0000 + -29.9303 1.0000 + 1.3163 1.0000 + 1.8312 1.0000 + 4.8941 1.0000 + 5.1190 1.0000 + 5.5631 1.0000 + 6.0425 1.0000 + 9.3454 0.0000 + 9.9129 0.0000 + 12.0493 0.0000 + 13.9108 0.0000 + 14.3729 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7414 1.0000 + -30.0427 1.0000 + -30.0185 1.0000 + -29.9297 1.0000 + 1.5003 1.0000 + 2.0569 1.0000 + 4.6455 1.0000 + 5.1693 1.0000 + 5.5995 1.0000 + 5.8371 1.0000 + 9.2378 0.0000 + 9.4800 0.0000 + 11.9139 0.0000 + 13.5604 0.0000 + 14.7551 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7412 1.0000 + -30.0419 1.0000 + -30.0289 1.0000 + -29.9291 1.0000 + 1.6855 1.0000 + 2.3977 1.0000 + 4.3844 1.0000 + 5.1110 1.0000 + 5.5521 1.0000 + 5.8491 1.0000 + 8.7124 0.0000 + 9.4831 0.0000 + 11.3760 0.0000 + 13.8572 0.0000 + 14.9892 0.0000 + + + -91.8810 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7410 1.0000 + -30.0411 1.0000 + -30.0389 1.0000 + -29.9285 1.0000 + 1.8550 1.0000 + 2.8180 1.0000 + 4.1421 1.0000 + 4.8462 1.0000 + 5.6803 1.0000 + 5.9491 1.0000 + 8.2154 0.0000 + 9.5095 0.0000 + 10.5843 0.0000 + 14.5072 0.0000 + 15.0778 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7409 1.0000 + -30.0467 1.0000 + -30.0406 1.0000 + -29.9280 1.0000 + 1.9950 1.0000 + 3.2581 1.0000 + 3.9509 1.0000 + 4.5226 1.0000 + 5.8957 1.0000 + 6.0587 1.0000 + 7.8278 0.7815 + 9.4491 0.0000 + 9.9344 0.0000 + 15.0260 0.0000 + 18.3727 0.0000 + + + -91.8815 1.0000 + -91.4265 1.0000 + -91.2915 1.0000 + -65.7408 1.0000 + -30.0510 1.0000 + -30.0402 1.0000 + -29.9277 1.0000 + 2.0780 1.0000 + 3.6286 1.0000 + 3.8595 1.0000 + 4.2059 1.0000 + 6.0817 1.0000 + 6.1302 1.0000 + 7.6065 1.0000 + 9.1931 0.0000 + 9.7385 0.0000 + 15.0476 0.0000 + 16.6319 0.0000 + + + -91.8793 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7415 1.0000 + -30.0028 1.0000 + -29.9802 1.0000 + -29.9695 1.0000 + -0.4815 1.0000 + 3.4597 1.0000 + 4.4964 1.0000 + 4.9371 1.0000 + 5.1831 1.0000 + 8.4989 0.0000 + 9.1550 0.0000 + 10.1399 0.0000 + 10.4152 0.0000 + 14.2974 0.0000 + 14.8308 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2897 1.0000 + -65.7415 1.0000 + -30.0050 1.0000 + -29.9801 1.0000 + -29.9693 1.0000 + -0.4342 1.0000 + 3.4391 1.0000 + 4.4529 1.0000 + 4.9676 1.0000 + 5.2040 1.0000 + 8.2556 0.0000 + 9.2125 0.0000 + 10.0413 0.0000 + 10.7194 0.0000 + 14.2965 0.0000 + 15.1176 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7414 1.0000 + -30.0112 1.0000 + -29.9796 1.0000 + -29.9688 1.0000 + -0.2928 1.0000 + 3.3540 1.0000 + 4.3881 1.0000 + 5.0261 1.0000 + 5.2648 1.0000 + 7.7736 0.9387 + 9.3605 0.0000 + 9.8023 0.0000 + 11.3678 0.0000 + 13.9531 0.0000 + 14.9554 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7412 1.0000 + -30.0203 1.0000 + -29.9791 1.0000 + -29.9679 1.0000 + -0.0672 1.0000 + 3.1662 1.0000 + 4.3914 1.0000 + 5.0790 1.0000 + 5.3596 1.0000 + 7.2805 1.0000 + 9.4059 0.0000 + 9.6783 0.0000 + 12.0688 0.0000 + 13.4792 0.0000 + 15.2550 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7411 1.0000 + -30.0306 1.0000 + -29.9785 1.0000 + -29.9670 1.0000 + 0.2282 1.0000 + 2.8837 1.0000 + 4.4758 1.0000 + 5.1145 1.0000 + 5.4784 1.0000 + 6.8477 1.0000 + 9.1811 0.0000 + 9.8874 0.0000 + 12.5970 0.0000 + 12.9048 0.0000 + 15.2176 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7408 1.0000 + -30.0404 1.0000 + -29.9778 1.0000 + -29.9661 1.0000 + 0.5762 1.0000 + 2.5428 1.0000 + 4.6037 1.0000 + 5.1264 1.0000 + 5.6095 1.0000 + 6.4965 1.0000 + 9.0211 0.0000 + 10.1220 0.0000 + 12.3062 0.0000 + 12.7724 0.0000 + 15.5499 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7407 1.0000 + -30.0482 1.0000 + -29.9773 1.0000 + -29.9654 1.0000 + 0.9542 1.0000 + 2.1721 1.0000 + 4.7324 1.0000 + 5.1121 1.0000 + 5.7425 1.0000 + 6.2291 1.0000 + 8.9691 0.0000 + 10.3317 0.0000 + 11.7644 0.0000 + 12.7021 0.0000 + 15.1622 0.0000 + + + -91.8793 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7406 1.0000 + -30.0524 1.0000 + -29.9770 1.0000 + -29.9649 1.0000 + 1.3325 1.0000 + 1.8005 1.0000 + 4.8244 1.0000 + 5.0841 1.0000 + 5.8749 1.0000 + 6.0344 1.0000 + 8.9800 0.0000 + 10.4848 0.0000 + 11.3991 0.0000 + 12.6194 0.0000 + 17.5491 0.0000 + + + -91.8794 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7415 1.0000 + -30.0025 1.0000 + -29.9799 1.0000 + -29.9726 1.0000 + -0.4309 1.0000 + 3.4495 1.0000 + 4.4823 1.0000 + 4.9614 1.0000 + 5.1769 1.0000 + 8.1972 0.0000 + 9.2037 0.0000 + 10.3016 0.0000 + 10.5059 0.0000 + 14.3943 0.0000 + 15.2824 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7414 1.0000 + -30.0047 1.0000 + -29.9798 1.0000 + -29.9724 1.0000 + -0.3827 1.0000 + 3.4372 1.0000 + 4.4369 1.0000 + 4.9880 1.0000 + 5.1943 1.0000 + 7.9855 0.0733 + 9.2633 0.0000 + 10.3201 0.0000 + 10.6409 0.0000 + 14.3071 0.0000 + 15.7382 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7413 1.0000 + -30.0109 1.0000 + -29.9795 1.0000 + -29.9718 1.0000 + -0.2406 1.0000 + 3.3744 1.0000 + 4.3644 1.0000 + 5.0412 1.0000 + 5.2443 1.0000 + 7.5476 1.0000 + 9.4153 0.0000 + 10.0599 0.0000 + 11.2380 0.0000 + 14.8208 0.0000 + 16.0819 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7412 1.0000 + -30.0200 1.0000 + -29.9789 1.0000 + -29.9710 1.0000 + -0.0152 1.0000 + 3.2090 1.0000 + 4.3636 1.0000 + 5.0929 1.0000 + 5.3207 1.0000 + 7.0926 1.0000 + 9.5502 0.0000 + 9.7938 0.0000 + 11.8036 0.0000 + 13.5951 0.0000 + 14.9192 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7410 1.0000 + -30.0303 1.0000 + -29.9783 1.0000 + -29.9700 1.0000 + 0.2806 1.0000 + 2.9377 1.0000 + 4.4563 1.0000 + 5.1302 1.0000 + 5.4164 1.0000 + 6.6996 1.0000 + 9.3444 0.0000 + 9.9025 0.0000 + 12.0852 0.0000 + 13.4362 0.0000 + 15.8291 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7407 1.0000 + -30.0402 1.0000 + -29.9776 1.0000 + -29.9691 1.0000 + 0.6271 1.0000 + 2.6012 1.0000 + 4.5958 1.0000 + 5.1415 1.0000 + 5.5298 1.0000 + 6.3932 1.0000 + 9.1313 0.0000 + 10.0660 0.0000 + 11.8833 0.0000 + 13.3141 0.0000 + 15.1866 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7406 1.0000 + -30.0479 1.0000 + -29.9771 1.0000 + -29.9684 1.0000 + 1.0037 1.0000 + 2.2324 1.0000 + 4.7288 1.0000 + 5.1208 1.0000 + 5.6641 1.0000 + 6.1656 1.0000 + 9.0233 0.0000 + 10.1524 0.0000 + 11.6108 0.0000 + 13.1453 0.0000 + 15.2752 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2900 1.0000 + -65.7405 1.0000 + -30.0521 1.0000 + -29.9768 1.0000 + -29.9680 1.0000 + 1.3741 1.0000 + 1.8670 1.0000 + 4.8158 1.0000 + 5.0875 1.0000 + 5.8147 1.0000 + 5.9871 1.0000 + 8.9976 0.0000 + 10.1607 0.0000 + 11.4588 0.0000 + 13.0058 0.0000 + 15.0515 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7413 1.0000 + -30.0017 1.0000 + -29.9814 1.0000 + -29.9793 1.0000 + -0.2798 1.0000 + 3.3917 1.0000 + 4.4650 1.0000 + 5.0319 1.0000 + 5.1692 1.0000 + 7.6464 0.9996 + 9.3147 0.0000 + 10.0458 0.0000 + 11.2372 0.0000 + 14.4922 0.0000 + 15.3633 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7412 1.0000 + -30.0039 1.0000 + -29.9812 1.0000 + -29.9792 1.0000 + -0.2318 1.0000 + 3.4031 1.0000 + 4.4148 1.0000 + 5.0453 1.0000 + 5.1799 1.0000 + 7.4709 1.0000 + 9.3790 0.0000 + 10.2465 0.0000 + 11.0981 0.0000 + 14.1220 0.0000 + 16.8656 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7411 1.0000 + -30.0101 1.0000 + -29.9806 1.0000 + -29.9788 1.0000 + -0.0888 1.0000 + 3.4098 1.0000 + 4.3128 1.0000 + 5.0782 1.0000 + 5.2075 1.0000 + 7.0931 1.0000 + 9.5240 0.0000 + 10.5314 0.0000 + 10.9313 0.0000 + 13.8315 0.0000 + 14.9563 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7410 1.0000 + -30.0192 1.0000 + -29.9798 1.0000 + -29.9782 1.0000 + 0.1365 1.0000 + 3.3258 1.0000 + 4.2788 1.0000 + 5.1226 1.0000 + 5.2385 1.0000 + 6.6994 1.0000 + 9.6594 0.0000 + 10.2232 0.0000 + 11.3212 0.0000 + 13.9202 0.0000 + 16.2795 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7408 1.0000 + -30.0296 1.0000 + -29.9790 1.0000 + -29.9776 1.0000 + 0.4308 1.0000 + 3.0973 1.0000 + 4.3838 1.0000 + 5.1738 1.0000 + 5.2576 1.0000 + 6.3799 1.0000 + 9.6051 0.0000 + 9.9623 0.0000 + 11.5706 0.0000 + 13.6078 0.0000 + 14.8495 0.0000 + + + -91.8796 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7405 1.0000 + -30.0394 1.0000 + -29.9782 1.0000 + -29.9768 1.0000 + 0.7749 1.0000 + 2.7747 1.0000 + 4.5617 1.0000 + 5.1803 1.0000 + 5.3158 1.0000 + 6.1636 1.0000 + 9.3464 0.0000 + 9.8339 0.0000 + 11.6131 0.0000 + 13.9966 0.0000 + 14.7722 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7404 1.0000 + -30.0472 1.0000 + -29.9775 1.0000 + -29.9763 1.0000 + 1.1431 1.0000 + 2.4134 1.0000 + 4.7126 1.0000 + 5.1290 1.0000 + 5.4671 1.0000 + 6.0157 1.0000 + 9.1396 0.0000 + 9.6449 0.0000 + 11.6446 0.0000 + 14.7531 0.0000 + 45.4682 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2902 1.0000 + -65.7404 1.0000 + -30.0514 1.0000 + -29.9772 1.0000 + -29.9760 1.0000 + 1.4899 1.0000 + 2.0701 1.0000 + 4.7840 1.0000 + 5.0904 1.0000 + 5.6669 1.0000 + 5.8686 1.0000 + 9.0434 0.0000 + 9.4853 0.0000 + 11.6814 0.0000 + 13.7976 0.0000 + 15.2308 0.0000 + + + -91.8796 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7410 1.0000 + -30.0005 1.0000 + -29.9942 1.0000 + -29.9785 1.0000 + -0.0384 1.0000 + 3.2400 1.0000 + 4.4989 1.0000 + 5.1411 1.0000 + 5.1734 1.0000 + 7.1079 1.0000 + 9.3512 0.0000 + 9.8771 0.0000 + 11.9958 0.0000 + 13.6113 0.0000 + 21.7136 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7410 1.0000 + -30.0027 1.0000 + -29.9940 1.0000 + -29.9784 1.0000 + 0.0097 1.0000 + 3.2752 1.0000 + 4.4507 1.0000 + 5.1290 1.0000 + 5.1813 1.0000 + 6.9619 1.0000 + 9.4416 0.0000 + 10.0172 0.0000 + 11.7522 0.0000 + 13.6423 0.0000 + 14.9614 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7409 1.0000 + -30.0089 1.0000 + -29.9935 1.0000 + -29.9780 1.0000 + 0.1509 1.0000 + 3.3699 1.0000 + 4.3172 1.0000 + 5.1057 1.0000 + 5.2032 1.0000 + 6.6401 1.0000 + 9.5752 0.0000 + 10.3957 0.0000 + 11.2701 0.0000 + 13.5268 0.0000 + 14.8940 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7407 1.0000 + -30.0180 1.0000 + -29.9927 1.0000 + -29.9775 1.0000 + 0.3757 1.0000 + 3.4547 1.0000 + 4.1789 1.0000 + 5.0808 1.0000 + 5.2321 1.0000 + 6.3094 1.0000 + 9.5872 0.0000 + 10.6701 0.0000 + 10.9785 0.0000 + 13.3361 0.0000 + 16.3021 0.0000 + + + -91.8798 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7405 1.0000 + -30.0284 1.0000 + -29.9918 1.0000 + -29.9768 1.0000 + 0.6661 1.0000 + 3.3528 1.0000 + 4.2329 1.0000 + 5.0410 1.0000 + 5.2587 1.0000 + 6.0667 1.0000 + 9.4049 0.0000 + 10.2926 0.0000 + 11.3119 0.0000 + 13.8752 0.0000 + 38.4800 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7403 1.0000 + -30.0384 1.0000 + -29.9910 1.0000 + -29.9762 1.0000 + 1.0012 1.0000 + 3.0611 1.0000 + 4.4746 1.0000 + 4.9804 1.0000 + 5.2893 1.0000 + 5.9349 1.0000 + 9.1205 0.0000 + 9.8404 0.0000 + 11.5936 0.0000 + 13.6823 0.0000 + 15.1706 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7401 1.0000 + -30.0461 1.0000 + -29.9903 1.0000 + -29.9758 1.0000 + 1.3562 1.0000 + 2.7118 1.0000 + 4.6771 1.0000 + 4.9797 1.0000 + 5.3623 1.0000 + 5.8533 1.0000 + 8.8711 0.0000 + 9.4054 0.0000 + 11.8042 0.0000 + 14.1600 0.0000 + 14.8362 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7401 1.0000 + -30.0504 1.0000 + -29.9899 1.0000 + -29.9755 1.0000 + 1.6624 1.0000 + 2.4033 1.0000 + 4.7026 1.0000 + 5.0589 1.0000 + 5.5288 1.0000 + 5.7361 1.0000 + 8.7332 0.0000 + 9.1257 0.0000 + 11.9246 0.0000 + 14.4000 0.0000 + 14.8474 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7407 1.0000 + -30.0089 1.0000 + -29.9991 1.0000 + -29.9776 1.0000 + 0.2750 1.0000 + 2.9834 1.0000 + 4.6018 1.0000 + 5.1861 1.0000 + 5.2760 1.0000 + 6.6473 1.0000 + 9.2218 0.0000 + 9.9612 0.0000 + 12.7917 0.0000 + 14.6660 0.0000 + 37.0432 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7407 1.0000 + -30.0087 1.0000 + -30.0013 1.0000 + -29.9775 1.0000 + 0.3237 1.0000 + 3.0324 1.0000 + 4.5699 1.0000 + 5.1962 1.0000 + 5.2285 1.0000 + 6.5349 1.0000 + 9.3249 0.0000 + 10.0206 0.0000 + 12.0589 0.0000 + 13.6356 0.0000 + 16.3395 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7406 1.0000 + -30.0082 1.0000 + -30.0075 1.0000 + -29.9771 1.0000 + 0.4629 1.0000 + 3.1773 1.0000 + 4.4588 1.0000 + 5.1107 1.0000 + 5.2302 1.0000 + 6.2832 1.0000 + 9.4510 0.0000 + 10.2180 0.0000 + 11.5408 0.0000 + 13.5178 0.0000 + 14.9785 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7404 1.0000 + -30.0167 1.0000 + -30.0075 1.0000 + -29.9766 1.0000 + 0.6833 1.0000 + 3.4070 1.0000 + 4.2516 1.0000 + 4.9747 1.0000 + 5.2836 1.0000 + 6.0299 1.0000 + 9.3115 0.0000 + 10.5371 0.0000 + 11.2041 0.0000 + 13.5198 0.0000 + 16.1069 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7402 1.0000 + -30.0271 1.0000 + -30.0066 1.0000 + -29.9760 1.0000 + 0.9662 1.0000 + 3.6247 1.0000 + 4.0527 1.0000 + 4.8364 1.0000 + 5.3481 1.0000 + 5.8553 1.0000 + 8.9510 0.0000 + 10.5646 0.0000 + 11.1623 0.0000 + 13.2954 0.0000 + 15.4682 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7400 1.0000 + -30.0371 1.0000 + -30.0058 1.0000 + -29.9754 1.0000 + 1.2872 1.0000 + 3.4438 1.0000 + 4.2743 1.0000 + 4.7030 1.0000 + 5.4051 1.0000 + 5.7716 1.0000 + 8.5488 0.0000 + 10.0763 0.0000 + 11.4481 0.0000 + 13.4035 0.0000 + 15.3922 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7398 1.0000 + -30.0450 1.0000 + -30.0051 1.0000 + -29.9749 1.0000 + 1.6159 1.0000 + 3.1051 1.0000 + 4.5944 1.0000 + 4.6676 1.0000 + 5.4494 1.0000 + 5.7286 1.0000 + 8.2204 0.0000 + 9.5427 0.0000 + 11.6960 0.0000 + 13.7216 0.0000 + 15.3053 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7398 1.0000 + -30.0492 1.0000 + -30.0047 1.0000 + -29.9747 1.0000 + 1.8783 1.0000 + 2.8300 1.0000 + 4.5354 1.0000 + 4.9641 1.0000 + 5.5125 1.0000 + 5.6496 1.0000 + 8.0373 0.0144 + 9.1984 0.0000 + 11.8323 0.0000 + 13.9270 0.0000 + 15.3527 0.0000 + + + -91.8801 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7404 1.0000 + -30.0228 1.0000 + -29.9977 1.0000 + -29.9766 1.0000 + 0.6424 1.0000 + 2.6545 1.0000 + 4.7408 1.0000 + 5.1925 1.0000 + 5.4185 1.0000 + 6.2853 1.0000 + 9.1528 0.0000 + 10.1154 0.0000 + 12.2959 0.0000 + 12.6644 0.0000 + 15.1835 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7404 1.0000 + -30.0228 1.0000 + -30.0000 1.0000 + -29.9766 1.0000 + 0.6883 1.0000 + 2.7077 1.0000 + 4.7264 1.0000 + 5.2034 1.0000 + 5.3412 1.0000 + 6.2150 1.0000 + 9.2183 0.0000 + 10.0975 0.0000 + 11.8514 0.0000 + 13.2505 0.0000 + 15.4538 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7403 1.0000 + -30.0223 1.0000 + -30.0062 1.0000 + -29.9762 1.0000 + 0.8257 1.0000 + 2.8686 1.0000 + 4.6756 1.0000 + 5.1155 1.0000 + 5.2552 1.0000 + 6.0553 1.0000 + 9.2590 0.0000 + 10.0607 0.0000 + 11.5620 0.0000 + 14.3861 0.0000 + 15.3778 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7401 1.0000 + -30.0215 1.0000 + -30.0154 1.0000 + -29.9757 1.0000 + 1.0393 1.0000 + 3.1357 1.0000 + 4.5429 1.0000 + 4.8526 1.0000 + 5.3235 1.0000 + 5.8912 1.0000 + 8.9678 0.0000 + 10.1859 0.0000 + 11.4775 0.0000 + 13.5169 0.0000 + 15.2678 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7399 1.0000 + -30.0259 1.0000 + -30.0207 1.0000 + -29.9751 1.0000 + 1.3079 1.0000 + 3.4975 1.0000 + 4.2537 1.0000 + 4.6695 1.0000 + 5.4215 1.0000 + 5.7678 1.0000 + 8.4790 0.0000 + 10.3583 0.0000 + 11.2562 0.0000 + 13.7957 0.0000 + 15.4576 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7397 1.0000 + -30.0359 1.0000 + -30.0199 1.0000 + -29.9745 1.0000 + 1.6071 1.0000 + 3.8504 1.0000 + 3.9497 1.0000 + 4.5723 1.0000 + 5.5290 1.0000 + 5.6928 1.0000 + 7.9970 0.0531 + 10.1882 0.0000 + 11.0596 0.0000 + 13.6172 0.0000 + 15.4580 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7395 1.0000 + -30.0438 1.0000 + -30.0193 1.0000 + -29.9740 1.0000 + 1.9028 1.0000 + 3.5236 1.0000 + 4.2368 1.0000 + 4.6294 1.0000 + 5.6020 1.0000 + 5.6607 1.0000 + 7.6208 0.9999 + 9.6622 0.0000 + 11.1234 0.0000 + 13.9670 0.0000 + 15.5268 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7395 1.0000 + -30.0481 1.0000 + -30.0189 1.0000 + -29.9738 1.0000 + 2.1226 1.0000 + 3.2739 1.0000 + 4.2868 1.0000 + 4.8744 1.0000 + 5.6116 1.0000 + 5.6455 1.0000 + 7.4201 1.0000 + 9.2695 0.0000 + 11.1923 0.0000 + 14.0391 0.0000 + 15.3789 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7402 1.0000 + -30.0338 1.0000 + -29.9968 1.0000 + -29.9759 1.0000 + 1.0386 1.0000 + 2.2838 1.0000 + 4.8741 1.0000 + 5.1768 1.0000 + 5.5479 1.0000 + 6.0278 1.0000 + 9.2474 0.0000 + 10.2163 0.0000 + 11.7129 0.0000 + 12.5232 0.0000 + 15.0058 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7401 1.0000 + -30.0336 1.0000 + -29.9990 1.0000 + -29.9758 1.0000 + 1.0849 1.0000 + 2.3392 1.0000 + 4.8595 1.0000 + 5.1791 1.0000 + 5.4792 1.0000 + 5.9945 1.0000 + 9.2635 0.0000 + 10.0727 0.0000 + 11.5584 0.0000 + 12.9761 0.0000 + 14.9006 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7400 1.0000 + -30.0331 1.0000 + -30.0052 1.0000 + -29.9755 1.0000 + 1.2159 1.0000 + 2.5063 1.0000 + 4.8118 1.0000 + 5.1287 1.0000 + 5.3567 1.0000 + 5.9132 1.0000 + 9.1604 0.0000 + 9.8071 0.0000 + 11.5723 0.0000 + 13.7995 0.0000 + 14.5522 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7399 1.0000 + -30.0325 1.0000 + -30.0144 1.0000 + -29.9750 1.0000 + 1.4162 1.0000 + 2.7831 1.0000 + 4.7111 1.0000 + 4.9082 1.0000 + 5.3719 1.0000 + 5.8226 1.0000 + 8.6841 0.0000 + 9.8145 0.0000 + 11.6802 0.0000 + 13.7580 0.0000 + 15.0949 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7397 1.0000 + -30.0317 1.0000 + -30.0249 1.0000 + -29.9744 1.0000 + 1.6606 1.0000 + 3.1538 1.0000 + 4.4685 1.0000 + 4.7356 1.0000 + 5.4606 1.0000 + 5.7551 1.0000 + 8.0965 0.0013 + 9.9238 0.0000 + 11.4526 0.0000 + 13.4892 0.0000 + 15.4328 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7394 1.0000 + -30.0350 1.0000 + -30.0309 1.0000 + -29.9738 1.0000 + 1.9273 1.0000 + 3.5628 1.0000 + 4.1380 1.0000 + 4.6730 1.0000 + 5.5708 1.0000 + 5.7308 1.0000 + 7.5590 1.0000 + 9.9659 0.0000 + 10.8523 0.0000 + 14.1412 0.0000 + 15.3603 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2912 1.0000 + -65.7394 1.0000 + -30.0429 1.0000 + -30.0304 1.0000 + -29.9734 1.0000 + 2.1834 1.0000 + 3.8283 1.0000 + 3.8862 1.0000 + 4.7204 1.0000 + 5.6527 1.0000 + 5.7690 1.0000 + 7.1423 1.0000 + 9.7054 0.0000 + 10.4694 0.0000 + 14.5817 0.0000 + 17.9482 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7393 1.0000 + -30.0472 1.0000 + -30.0300 1.0000 + -29.9732 1.0000 + 2.3655 1.0000 + 3.6194 1.0000 + 4.0214 1.0000 + 4.8461 1.0000 + 5.7172 1.0000 + 5.7917 1.0000 + 6.9188 1.0000 + 9.3231 0.0000 + 10.4174 0.0000 + 14.4421 0.0000 + 15.8976 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7400 1.0000 + -30.0397 1.0000 + -29.9962 1.0000 + -29.9755 1.0000 + 1.4380 1.0000 + 1.9003 1.0000 + 4.9695 1.0000 + 5.1428 1.0000 + 5.6423 1.0000 + 5.8766 1.0000 + 9.4326 0.0000 + 10.2038 0.0000 + 11.3534 0.0000 + 12.4003 0.0000 + 15.1798 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7400 1.0000 + -30.0396 1.0000 + -29.9984 1.0000 + -29.9754 1.0000 + 1.4775 1.0000 + 1.9610 1.0000 + 4.9344 1.0000 + 5.1436 1.0000 + 5.6222 1.0000 + 5.8407 1.0000 + 9.4328 0.0000 + 9.9118 0.0000 + 11.4086 0.0000 + 12.7786 0.0000 + 14.7529 0.0000 + + + -91.8802 1.0000 + -91.4253 1.0000 + -91.2902 1.0000 + -65.7399 1.0000 + -30.0391 1.0000 + -30.0046 1.0000 + -29.9751 1.0000 + 1.5884 1.0000 + 2.1473 1.0000 + 4.8263 1.0000 + 5.1395 1.0000 + 5.5663 1.0000 + 5.7671 1.0000 + 9.1881 0.0000 + 9.5548 0.0000 + 11.6103 0.0000 + 13.5641 0.0000 + 14.7151 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2902 1.0000 + -65.7397 1.0000 + -30.0384 1.0000 + -30.0138 1.0000 + -29.9746 1.0000 + 1.7510 1.0000 + 2.4554 1.0000 + 4.6493 1.0000 + 5.1054 1.0000 + 5.5016 1.0000 + 5.7219 1.0000 + 8.5259 0.0000 + 9.5738 0.0000 + 11.7986 0.0000 + 14.0607 0.0000 + 14.5081 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2904 1.0000 + -65.7395 1.0000 + -30.0377 1.0000 + -30.0244 1.0000 + -29.9740 1.0000 + 1.9503 1.0000 + 2.8575 1.0000 + 4.4232 1.0000 + 5.0190 1.0000 + 5.4953 1.0000 + 5.7259 1.0000 + 7.8787 0.5228 + 9.6218 0.0000 + 11.5688 0.0000 + 13.6440 0.0000 + 15.2299 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7393 1.0000 + -30.0369 1.0000 + -30.0345 1.0000 + -29.9735 1.0000 + 2.1724 1.0000 + 3.2887 1.0000 + 4.1759 1.0000 + 4.9222 1.0000 + 5.5665 1.0000 + 5.7737 1.0000 + 7.3144 1.0000 + 9.6562 0.0000 + 10.8484 0.0000 + 13.8758 0.0000 + 15.6076 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7392 1.0000 + -30.0424 1.0000 + -30.0364 1.0000 + -29.9731 1.0000 + 2.3889 1.0000 + 3.6451 1.0000 + 3.9430 1.0000 + 4.8684 1.0000 + 5.6997 1.0000 + 5.8611 1.0000 + 6.8688 1.0000 + 9.6086 0.0000 + 10.1393 0.0000 + 15.1730 0.0000 + 16.3079 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7391 1.0000 + -30.0467 1.0000 + -30.0360 1.0000 + -29.9728 1.0000 + 2.5397 1.0000 + 3.7856 1.0000 + 3.8326 1.0000 + 4.8610 1.0000 + 5.8430 1.0000 + 5.9453 1.0000 + 6.5965 1.0000 + 9.3465 0.0000 + 9.8978 0.0000 + 15.1892 0.0000 + 16.2199 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7403 1.0000 + -30.0144 1.0000 + -29.9990 1.0000 + -29.9656 1.0000 + 0.0785 1.0000 + 2.7125 1.0000 + 4.5094 1.0000 + 4.6940 1.0000 + 4.9214 1.0000 + 8.5745 0.0000 + 10.1269 0.0000 + 10.5365 0.0000 + 10.8704 0.0000 + 13.9768 0.0000 + 14.6979 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7402 1.0000 + -30.0143 1.0000 + -30.0012 1.0000 + -29.9654 1.0000 + 0.1273 1.0000 + 2.6983 1.0000 + 4.4779 1.0000 + 4.7369 1.0000 + 4.9443 1.0000 + 8.3529 0.0000 + 10.1419 0.0000 + 10.4344 0.0000 + 11.1645 0.0000 + 13.6110 0.0000 + 14.5556 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7401 1.0000 + -30.0140 1.0000 + -30.0074 1.0000 + -29.9649 1.0000 + 0.2683 1.0000 + 2.6518 1.0000 + 4.4352 1.0000 + 4.8169 1.0000 + 5.0107 1.0000 + 7.8922 0.4469 + 10.1231 0.0000 + 10.2307 0.0000 + 11.8214 0.0000 + 13.2548 0.0000 + 14.5906 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7399 1.0000 + -30.0165 1.0000 + -30.0135 1.0000 + -29.9640 1.0000 + 0.4880 1.0000 + 2.5740 1.0000 + 4.4223 1.0000 + 4.8957 1.0000 + 5.1141 1.0000 + 7.4082 1.0000 + 9.8145 0.0000 + 10.2589 0.0000 + 12.5295 0.0000 + 12.7207 0.0000 + 14.5641 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7397 1.0000 + -30.0269 1.0000 + -30.0129 1.0000 + -29.9631 1.0000 + 0.7614 1.0000 + 2.4691 1.0000 + 4.4450 1.0000 + 4.9606 1.0000 + 5.2429 1.0000 + 6.9802 1.0000 + 9.4992 0.0000 + 10.2989 0.0000 + 12.2571 0.0000 + 12.7704 0.0000 + 14.6183 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7395 1.0000 + -30.0369 1.0000 + -30.0123 1.0000 + -29.9621 1.0000 + 1.0553 1.0000 + 2.3467 1.0000 + 4.4910 1.0000 + 5.0061 1.0000 + 5.3805 1.0000 + 6.6366 1.0000 + 9.2609 0.0000 + 10.3038 0.0000 + 11.8735 0.0000 + 12.5601 0.0000 + 15.5151 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7394 1.0000 + -30.0447 1.0000 + -30.0119 1.0000 + -29.9614 1.0000 + 1.3266 1.0000 + 2.2198 1.0000 + 4.5371 1.0000 + 5.0314 1.0000 + 5.5048 1.0000 + 6.3900 1.0000 + 9.1261 0.0000 + 10.2612 0.0000 + 11.5989 0.0000 + 12.2895 0.0000 + 15.2894 0.0000 + + + -91.8792 1.0000 + -91.4242 1.0000 + -91.2892 1.0000 + -65.7392 1.0000 + -30.0489 1.0000 + -30.0116 1.0000 + -29.9610 1.0000 + 1.5141 1.0000 + 2.1185 1.0000 + 4.5650 1.0000 + 5.0425 1.0000 + 5.5850 1.0000 + 6.2547 1.0000 + 9.0783 0.0000 + 10.2059 0.0000 + 11.4660 0.0000 + 12.1310 0.0000 + 14.9984 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7402 1.0000 + -30.0143 1.0000 + -29.9987 1.0000 + -29.9687 1.0000 + 0.1308 1.0000 + 2.7052 1.0000 + 4.5062 1.0000 + 4.7211 1.0000 + 4.9341 1.0000 + 8.2944 0.0000 + 10.1322 0.0000 + 10.7510 0.0000 + 10.8939 0.0000 + 14.0685 0.0000 + 19.2975 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7402 1.0000 + -30.0141 1.0000 + -30.0009 1.0000 + -29.9685 1.0000 + 0.1799 1.0000 + 2.6961 1.0000 + 4.4700 1.0000 + 4.7546 1.0000 + 4.9662 1.0000 + 8.0964 0.0013 + 10.1465 0.0000 + 10.7223 0.0000 + 11.0608 0.0000 + 13.4843 0.0000 + 14.7098 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7400 1.0000 + -30.0138 1.0000 + -30.0071 1.0000 + -29.9680 1.0000 + 0.3214 1.0000 + 2.6647 1.0000 + 4.4164 1.0000 + 4.8132 1.0000 + 5.0527 1.0000 + 7.6707 0.9986 + 10.1672 0.0000 + 10.4384 0.0000 + 11.6127 0.0000 + 13.1255 0.0000 + 15.0675 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7399 1.0000 + -30.0163 1.0000 + -30.0133 1.0000 + -29.9671 1.0000 + 0.5403 1.0000 + 2.6055 1.0000 + 4.3962 1.0000 + 4.8703 1.0000 + 5.1699 1.0000 + 7.2169 1.0000 + 9.9996 0.0000 + 10.2485 0.0000 + 11.9915 0.0000 + 13.4963 0.0000 + 14.9307 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7397 1.0000 + -30.0266 1.0000 + -30.0127 1.0000 + -29.9662 1.0000 + 0.8138 1.0000 + 2.5179 1.0000 + 4.4217 1.0000 + 4.9184 1.0000 + 5.2999 1.0000 + 6.8210 1.0000 + 9.6472 0.0000 + 10.2064 0.0000 + 11.8412 0.0000 + 13.2636 0.0000 + 14.4602 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7395 1.0000 + -30.0366 1.0000 + -30.0121 1.0000 + -29.9653 1.0000 + 1.1061 1.0000 + 2.4089 1.0000 + 4.4770 1.0000 + 4.9499 1.0000 + 5.4309 1.0000 + 6.5164 1.0000 + 9.3564 0.0000 + 10.0920 0.0000 + 11.6293 0.0000 + 13.0657 0.0000 + 15.1621 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7393 1.0000 + -30.0444 1.0000 + -30.0117 1.0000 + -29.9646 1.0000 + 1.3737 1.0000 + 2.2928 1.0000 + 4.5311 1.0000 + 4.9651 1.0000 + 5.5497 1.0000 + 6.3103 1.0000 + 9.1728 0.0000 + 9.9154 0.0000 + 11.5234 0.0000 + 12.7770 0.0000 + 15.3120 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7392 1.0000 + -30.0487 1.0000 + -30.0114 1.0000 + -29.9642 1.0000 + 1.5535 1.0000 + 2.2004 1.0000 + 4.5595 1.0000 + 4.9718 1.0000 + 5.6296 1.0000 + 6.2011 1.0000 + 9.0958 0.0000 + 9.7761 0.0000 + 11.4975 0.0000 + 12.5932 0.0000 + 15.0907 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7400 1.0000 + -30.0138 1.0000 + -29.9979 1.0000 + -29.9775 1.0000 + 0.2825 1.0000 + 2.6761 1.0000 + 4.5064 1.0000 + 4.8000 1.0000 + 4.9688 1.0000 + 7.7564 0.9630 + 10.1137 0.0000 + 10.4867 0.0000 + 11.6479 0.0000 + 13.3919 0.0000 + 14.4508 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7400 1.0000 + -30.0137 1.0000 + -30.0001 1.0000 + -29.9773 1.0000 + 0.3313 1.0000 + 2.6826 1.0000 + 4.4604 1.0000 + 4.8061 1.0000 + 5.0256 1.0000 + 7.5867 1.0000 + 10.1283 0.0000 + 10.6729 0.0000 + 11.4680 0.0000 + 13.1394 0.0000 + 14.3328 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7398 1.0000 + -30.0133 1.0000 + -30.0063 1.0000 + -29.9768 1.0000 + 0.4736 1.0000 + 2.6942 1.0000 + 4.3753 1.0000 + 4.8323 1.0000 + 5.1415 1.0000 + 7.2084 1.0000 + 10.1072 0.0000 + 10.9314 0.0000 + 11.2329 0.0000 + 12.9608 0.0000 + 14.6853 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7397 1.0000 + -30.0155 1.0000 + -30.0128 1.0000 + -29.9760 1.0000 + 0.6917 1.0000 + 2.6939 1.0000 + 4.3211 1.0000 + 4.8693 1.0000 + 5.2665 1.0000 + 6.8005 1.0000 + 9.9630 0.0000 + 10.5675 0.0000 + 11.4806 0.0000 + 13.0652 0.0000 + 14.4338 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7395 1.0000 + -30.0259 1.0000 + -30.0122 1.0000 + -29.9751 1.0000 + 0.9628 1.0000 + 2.6633 1.0000 + 4.3343 1.0000 + 4.8939 1.0000 + 5.3859 1.0000 + 6.4620 1.0000 + 9.6578 0.0000 + 10.1908 0.0000 + 11.5257 0.0000 + 13.6164 0.0000 + 15.5505 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7393 1.0000 + -30.0359 1.0000 + -30.0116 1.0000 + -29.9742 1.0000 + 1.2487 1.0000 + 2.5974 1.0000 + 4.4087 1.0000 + 4.8823 1.0000 + 5.5018 1.0000 + 6.2380 1.0000 + 9.3183 0.0000 + 9.7979 0.0000 + 11.5299 0.0000 + 13.8800 0.0000 + 14.6587 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7391 1.0000 + -30.0437 1.0000 + -30.0112 1.0000 + -29.9735 1.0000 + 1.5051 1.0000 + 2.5119 1.0000 + 4.4950 1.0000 + 4.8424 1.0000 + 5.6205 1.0000 + 6.1187 1.0000 + 9.0647 0.0000 + 9.4200 0.0000 + 11.5701 0.0000 + 13.6103 0.0000 + 15.8073 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7390 1.0000 + -30.0480 1.0000 + -30.0110 1.0000 + -29.9731 1.0000 + 1.6705 1.0000 + 2.4419 1.0000 + 4.5400 1.0000 + 4.8182 1.0000 + 5.7164 1.0000 + 6.0601 1.0000 + 8.9498 0.0000 + 9.1654 0.0000 + 11.6090 0.0000 + 13.4604 0.0000 + 15.4612 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7397 1.0000 + -30.0130 1.0000 + -29.9967 1.0000 + -29.9905 1.0000 + 0.5171 1.0000 + 2.6203 1.0000 + 4.5293 1.0000 + 4.9234 1.0000 + 5.0169 1.0000 + 7.2171 1.0000 + 9.9208 0.0000 + 10.3388 0.0000 + 12.4204 0.0000 + 12.7407 0.0000 + 14.2892 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7397 1.0000 + -30.0129 1.0000 + -29.9989 1.0000 + -29.9903 1.0000 + 0.5656 1.0000 + 2.6459 1.0000 + 4.4784 1.0000 + 4.8801 1.0000 + 5.1125 1.0000 + 7.0689 1.0000 + 9.9752 0.0000 + 10.4280 0.0000 + 12.5187 0.0000 + 32.9739 0.0000 + 35.7387 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7396 1.0000 + -30.0125 1.0000 + -30.0051 1.0000 + -29.9898 1.0000 + 0.7061 1.0000 + 2.7176 1.0000 + 4.3568 1.0000 + 4.8822 1.0000 + 5.2415 1.0000 + 6.7298 1.0000 + 9.8871 0.0000 + 10.7646 0.0000 + 11.4466 0.0000 + 14.5915 0.0000 + 38.5493 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7394 1.0000 + -30.0143 1.0000 + -30.0120 1.0000 + -29.9890 1.0000 + 0.9230 1.0000 + 2.8144 1.0000 + 4.2395 1.0000 + 4.9255 1.0000 + 5.3419 1.0000 + 6.3667 1.0000 + 9.5538 0.0000 + 11.0084 0.0000 + 11.1693 0.0000 + 13.0107 0.0000 + 14.8133 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7392 1.0000 + -30.0248 1.0000 + -30.0115 1.0000 + -29.9881 1.0000 + 1.1884 1.0000 + 2.8932 1.0000 + 4.1953 1.0000 + 4.9555 1.0000 + 5.3985 1.0000 + 6.1037 1.0000 + 9.0980 0.0000 + 10.5664 0.0000 + 11.4010 0.0000 + 13.2814 0.0000 + 14.7039 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7390 1.0000 + -30.0349 1.0000 + -30.0110 1.0000 + -29.9873 1.0000 + 1.4648 1.0000 + 2.9108 1.0000 + 4.2604 1.0000 + 4.8930 1.0000 + 5.4670 1.0000 + 5.9927 1.0000 + 8.6547 0.0000 + 10.0335 0.0000 + 11.5522 0.0000 + 13.8640 0.0000 + 14.7888 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7389 1.0000 + -30.0427 1.0000 + -30.0105 1.0000 + -29.9866 1.0000 + 1.7087 1.0000 + 2.8704 1.0000 + 4.3914 1.0000 + 4.7599 1.0000 + 5.6061 1.0000 + 5.9584 1.0000 + 8.3087 0.0000 + 9.5375 0.0000 + 11.6648 0.0000 + 14.4457 0.0000 + 14.7936 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7388 1.0000 + -30.0470 1.0000 + -30.0104 1.0000 + -29.9863 1.0000 + 1.8594 1.0000 + 2.8218 1.0000 + 4.4916 1.0000 + 4.6640 1.0000 + 5.7708 1.0000 + 5.9044 1.0000 + 8.1176 0.0004 + 9.2281 0.0000 + 11.7299 0.0000 + 14.3458 0.0000 + 15.1540 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7395 1.0000 + -30.0121 1.0000 + -30.0053 1.0000 + -29.9953 1.0000 + 0.8079 1.0000 + 2.5334 1.0000 + 4.5838 1.0000 + 5.0666 1.0000 + 5.0783 1.0000 + 6.7500 1.0000 + 9.6333 0.0000 + 10.3108 0.0000 + 12.2505 0.0000 + 12.6826 0.0000 + 14.7554 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7394 1.0000 + -30.0120 1.0000 + -30.0051 1.0000 + -29.9975 1.0000 + 0.8563 1.0000 + 2.5778 1.0000 + 4.5415 1.0000 + 4.9542 1.0000 + 5.2219 1.0000 + 6.6261 1.0000 + 9.6800 0.0000 + 10.3030 0.0000 + 11.8282 0.0000 + 13.2292 0.0000 + 14.7293 0.0000 + + + -91.8806 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7393 1.0000 + -30.0117 1.0000 + -30.0046 1.0000 + -30.0037 1.0000 + 0.9944 1.0000 + 2.7079 1.0000 + 4.4058 1.0000 + 4.9318 1.0000 + 5.3400 1.0000 + 6.3377 1.0000 + 9.5130 0.0000 + 10.4672 0.0000 + 11.4998 0.0000 + 13.8778 0.0000 + 18.0925 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7391 1.0000 + -30.0130 1.0000 + -30.0112 1.0000 + -30.0039 1.0000 + 1.2055 1.0000 + 2.9156 1.0000 + 4.2276 1.0000 + 4.9929 1.0000 + 5.3616 1.0000 + 6.0549 1.0000 + 9.0232 0.0000 + 10.8076 0.0000 + 11.3166 0.0000 + 13.1705 0.0000 + 14.8540 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7389 1.0000 + -30.0235 1.0000 + -30.0107 1.0000 + -30.0030 1.0000 + 1.4620 1.0000 + 3.1623 1.0000 + 4.0828 1.0000 + 5.0864 1.0000 + 5.2214 1.0000 + 5.9363 1.0000 + 8.4563 0.0000 + 10.8355 0.0000 + 11.2520 0.0000 + 13.1419 0.0000 + 15.5800 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7387 1.0000 + -30.0336 1.0000 + -30.0102 1.0000 + -30.0022 1.0000 + 1.7297 1.0000 + 3.3337 1.0000 + 4.0790 1.0000 + 4.9123 1.0000 + 5.2921 1.0000 + 5.9385 1.0000 + 7.9391 0.2131 + 10.2850 0.0000 + 11.4643 0.0000 + 13.4225 0.0000 + 15.4710 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7386 1.0000 + -30.0415 1.0000 + -30.0098 1.0000 + -30.0016 1.0000 + 1.9664 1.0000 + 3.3331 1.0000 + 4.2564 1.0000 + 4.6894 1.0000 + 5.4784 1.0000 + 5.9482 1.0000 + 7.5447 1.0000 + 9.6945 0.0000 + 11.6252 0.0000 + 13.7684 0.0000 + 15.1176 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7385 1.0000 + -30.0458 1.0000 + -30.0096 1.0000 + -30.0012 1.0000 + 2.1159 1.0000 + 3.2777 1.0000 + 4.4136 1.0000 + 4.5730 1.0000 + 5.6529 1.0000 + 5.9143 1.0000 + 7.3340 1.0000 + 9.3087 0.0000 + 11.7152 0.0000 + 14.2992 0.0000 + 15.1018 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7391 1.0000 + -30.0194 1.0000 + -30.0113 1.0000 + -29.9940 1.0000 + 1.1188 1.0000 + 2.4225 1.0000 + 4.6599 1.0000 + 5.1059 1.0000 + 5.2458 1.0000 + 6.3781 1.0000 + 9.4462 0.0000 + 10.2515 0.0000 + 11.8462 0.0000 + 12.3849 0.0000 + 15.2872 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7391 1.0000 + -30.0192 1.0000 + -30.0112 1.0000 + -29.9962 1.0000 + 1.1663 1.0000 + 2.4798 1.0000 + 4.6338 1.0000 + 5.0065 1.0000 + 5.3465 1.0000 + 6.2884 1.0000 + 9.4413 0.0000 + 10.1362 0.0000 + 11.5983 0.0000 + 12.9221 0.0000 + 14.9830 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7390 1.0000 + -30.0187 1.0000 + -30.0108 1.0000 + -30.0025 1.0000 + 1.2998 1.0000 + 2.6535 1.0000 + 4.5224 1.0000 + 4.9355 1.0000 + 5.4403 1.0000 + 6.0847 1.0000 + 9.1320 0.0000 + 10.1355 0.0000 + 11.4935 0.0000 + 14.1593 0.0000 + 15.0031 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7388 1.0000 + -30.0181 1.0000 + -30.0118 1.0000 + -30.0103 1.0000 + 1.5018 1.0000 + 2.9434 1.0000 + 4.3332 1.0000 + 4.9416 1.0000 + 5.4009 1.0000 + 5.9358 1.0000 + 8.5164 0.0000 + 10.3690 0.0000 + 11.4796 0.0000 + 13.6233 0.0000 + 15.4168 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7386 1.0000 + -30.0224 1.0000 + -30.0173 1.0000 + -30.0098 1.0000 + 1.7486 1.0000 + 3.3382 1.0000 + 4.1257 1.0000 + 4.9091 1.0000 + 5.2805 1.0000 + 5.9294 1.0000 + 7.8705 0.5687 + 10.5822 0.0000 + 11.3190 0.0000 + 14.4746 0.0000 + 15.4084 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7384 1.0000 + -30.0325 1.0000 + -30.0165 1.0000 + -30.0094 1.0000 + 2.0137 1.0000 + 3.7924 1.0000 + 3.9366 1.0000 + 4.7182 1.0000 + 5.3253 1.0000 + 5.9653 1.0000 + 7.2969 1.0000 + 10.3874 0.0000 + 11.1648 0.0000 + 13.7918 0.0000 + 15.7649 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7383 1.0000 + -30.0404 1.0000 + -30.0159 1.0000 + -30.0090 1.0000 + 2.2614 1.0000 + 3.7478 1.0000 + 4.2324 1.0000 + 4.5462 1.0000 + 5.4530 1.0000 + 5.9817 1.0000 + 6.8661 1.0000 + 9.8164 0.0000 + 11.2354 0.0000 + 13.3824 0.0000 + 15.4946 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7382 1.0000 + -30.0447 1.0000 + -30.0156 1.0000 + -30.0087 1.0000 + 2.4276 1.0000 + 3.6308 1.0000 + 4.3095 1.0000 + 4.6704 1.0000 + 5.5414 1.0000 + 5.9604 1.0000 + 6.6554 1.0000 + 9.3847 0.0000 + 11.2998 0.0000 + 13.4998 0.0000 + 15.5406 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7389 1.0000 + -30.0304 1.0000 + -30.0107 1.0000 + -29.9930 1.0000 + 1.4059 1.0000 + 2.2991 1.0000 + 4.7303 1.0000 + 5.1280 1.0000 + 5.4014 1.0000 + 6.1085 1.0000 + 9.4200 0.0000 + 10.1068 0.0000 + 11.5735 0.0000 + 12.0510 0.0000 + 15.2640 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7389 1.0000 + -30.0302 1.0000 + -30.0105 1.0000 + -29.9952 1.0000 + 1.4496 1.0000 + 2.3666 1.0000 + 4.7143 1.0000 + 5.0343 1.0000 + 5.4738 1.0000 + 6.0596 1.0000 + 9.3470 0.0000 + 9.8894 0.0000 + 11.4911 0.0000 + 12.5501 0.0000 + 15.0042 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7387 1.0000 + -30.0298 1.0000 + -30.0102 1.0000 + -30.0014 1.0000 + 1.5741 1.0000 + 2.5692 1.0000 + 4.6449 1.0000 + 4.8922 1.0000 + 5.5587 1.0000 + 5.9560 1.0000 + 8.8420 0.0000 + 9.8198 0.0000 + 11.5326 0.0000 + 13.4548 0.0000 + 15.3070 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7385 1.0000 + -30.0291 1.0000 + -30.0108 1.0000 + -30.0097 1.0000 + 1.7645 1.0000 + 2.9023 1.0000 + 4.5006 1.0000 + 4.7818 1.0000 + 5.5503 1.0000 + 5.9099 1.0000 + 8.1185 0.0004 + 9.9431 0.0000 + 11.5982 0.0000 + 14.1559 0.0000 + 15.5155 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7383 1.0000 + -30.0283 1.0000 + -30.0214 1.0000 + -30.0092 1.0000 + 2.0055 1.0000 + 3.3368 1.0000 + 4.3451 1.0000 + 4.6481 1.0000 + 5.4981 1.0000 + 5.9423 1.0000 + 7.4143 1.0000 + 10.0772 0.0000 + 11.5013 0.0000 + 14.0698 0.0000 + 15.1813 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7382 1.0000 + -30.0316 1.0000 + -30.0276 1.0000 + -30.0088 1.0000 + 2.2811 1.0000 + 3.7459 1.0000 + 4.2885 1.0000 + 4.4782 1.0000 + 5.5123 1.0000 + 5.9815 1.0000 + 6.7976 1.0000 + 10.1223 0.0000 + 10.9975 0.0000 + 13.3162 0.0000 + 35.4508 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7380 1.0000 + -30.0395 1.0000 + -30.0270 1.0000 + -30.0084 1.0000 + 2.5605 1.0000 + 3.8201 1.0000 + 4.2232 1.0000 + 4.6720 1.0000 + 5.5887 1.0000 + 5.9853 1.0000 + 6.3304 1.0000 + 9.8542 0.0000 + 10.6312 0.0000 + 13.3008 0.0000 + 15.9780 0.0000 + + + -91.8815 1.0000 + -91.4265 1.0000 + -91.2915 1.0000 + -65.7380 1.0000 + -30.0439 1.0000 + -30.0268 1.0000 + -30.0082 1.0000 + 2.7690 1.0000 + 3.7318 1.0000 + 4.1082 1.0000 + 5.0768 1.0000 + 5.5474 1.0000 + 5.9652 1.0000 + 6.1318 1.0000 + 9.4421 0.0000 + 10.5773 0.0000 + 13.3598 0.0000 + 15.6239 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7388 1.0000 + -30.0364 1.0000 + -30.0103 1.0000 + -29.9924 1.0000 + 1.6041 1.0000 + 2.1949 1.0000 + 4.7707 1.0000 + 5.1368 1.0000 + 5.5104 1.0000 + 5.9515 1.0000 + 9.5274 0.0000 + 9.9063 0.0000 + 11.4475 0.0000 + 11.8572 0.0000 + 14.7311 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7387 1.0000 + -30.0362 1.0000 + -30.0101 1.0000 + -29.9946 1.0000 + 1.6419 1.0000 + 2.2709 1.0000 + 4.7507 1.0000 + 5.0499 1.0000 + 5.5743 1.0000 + 5.9294 1.0000 + 9.4032 0.0000 + 9.6388 0.0000 + 11.4753 0.0000 + 12.3145 0.0000 + 15.0586 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7386 1.0000 + -30.0358 1.0000 + -30.0099 1.0000 + -30.0009 1.0000 + 1.7525 1.0000 + 2.4947 1.0000 + 4.6872 1.0000 + 4.8807 1.0000 + 5.6780 1.0000 + 5.8786 1.0000 + 8.6877 0.0000 + 9.6263 0.0000 + 11.5761 0.0000 + 13.1883 0.0000 + 15.0368 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7384 1.0000 + -30.0351 1.0000 + -30.0103 1.0000 + -30.0094 1.0000 + 1.9301 1.0000 + 2.8492 1.0000 + 4.5787 1.0000 + 4.7121 1.0000 + 5.7281 1.0000 + 5.8578 1.0000 + 7.8952 0.4304 + 9.6755 0.0000 + 11.6667 0.0000 + 14.3103 0.0000 + 38.9176 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7382 1.0000 + -30.0344 1.0000 + -30.0209 1.0000 + -30.0089 1.0000 + 2.1704 1.0000 + 3.2839 1.0000 + 4.4368 1.0000 + 4.5966 1.0000 + 5.6971 1.0000 + 5.9055 1.0000 + 7.1618 1.0000 + 9.7305 0.0000 + 11.5519 0.0000 + 13.7092 0.0000 + 15.1518 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7380 1.0000 + -30.0336 1.0000 + -30.0310 1.0000 + -30.0084 1.0000 + 2.4625 1.0000 + 3.6552 1.0000 + 4.2572 1.0000 + 4.6667 1.0000 + 5.6659 1.0000 + 5.9462 1.0000 + 6.5416 1.0000 + 9.7701 0.0000 + 11.0159 0.0000 + 13.7528 0.0000 + 15.5596 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7379 1.0000 + -30.0390 1.0000 + -30.0331 1.0000 + -30.0080 1.0000 + 2.7831 1.0000 + 3.7889 1.0000 + 4.0361 1.0000 + 5.0350 1.0000 + 5.6638 1.0000 + 5.9246 1.0000 + 6.1048 1.0000 + 9.7327 0.0000 + 10.2984 0.0000 + 13.3147 0.0000 + 15.4211 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7378 1.0000 + -30.0434 1.0000 + -30.0328 1.0000 + -30.0078 1.0000 + 3.0626 1.0000 + 3.7463 1.0000 + 3.8683 1.0000 + 5.4341 1.0000 + 5.6823 1.0000 + 5.7756 1.0000 + 5.9556 1.0000 + 9.4675 0.0000 + 10.0217 0.0000 + 13.3491 0.0000 + 16.1206 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7397 1.0000 + -30.0332 1.0000 + -29.9970 1.0000 + -29.9635 1.0000 + 0.5736 1.0000 + 2.1119 1.0000 + 4.5165 1.0000 + 4.5676 1.0000 + 4.7863 1.0000 + 8.6168 0.0000 + 10.8092 0.0000 + 11.1222 0.0000 + 11.2007 0.0000 + 14.0197 0.0000 + 39.2698 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7395 1.0000 + -30.0330 1.0000 + -29.9991 1.0000 + -29.9633 1.0000 + 0.6291 1.0000 + 2.0977 1.0000 + 4.5093 1.0000 + 4.5944 1.0000 + 4.8096 1.0000 + 8.4094 0.0000 + 10.7035 0.0000 + 11.1656 0.0000 + 11.6529 0.0000 + 14.1405 0.0000 + 41.5789 0.0000 + + + -91.8796 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7394 1.0000 + -30.0326 1.0000 + -30.0053 1.0000 + -29.9627 1.0000 + 0.7865 1.0000 + 2.0532 1.0000 + 4.5078 1.0000 + 4.6507 1.0000 + 4.8773 1.0000 + 7.9670 0.1168 + 10.4342 0.0000 + 11.1229 0.0000 + 12.2041 0.0000 + 12.2648 0.0000 + 14.3078 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7392 1.0000 + -30.0322 1.0000 + -30.0144 1.0000 + -29.9619 1.0000 + 1.0275 1.0000 + 1.9962 1.0000 + 4.5159 1.0000 + 4.7211 1.0000 + 4.9818 1.0000 + 7.4959 1.0000 + 10.0943 0.0000 + 11.0206 0.0000 + 11.8767 0.0000 + 13.0219 0.0000 + 14.6524 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7390 1.0000 + -30.0316 1.0000 + -30.0249 1.0000 + -29.9609 1.0000 + 1.3090 1.0000 + 1.9542 1.0000 + 4.5205 1.0000 + 4.7985 1.0000 + 5.1102 1.0000 + 7.0804 1.0000 + 9.7491 0.0000 + 10.7814 0.0000 + 12.7825 0.0000 + 14.2666 0.0000 + 40.5060 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7388 1.0000 + -30.0349 1.0000 + -30.0311 1.0000 + -29.9600 1.0000 + 1.5312 1.0000 + 1.9991 1.0000 + 4.5052 1.0000 + 4.8754 1.0000 + 5.2431 1.0000 + 6.7527 1.0000 + 9.4493 0.0000 + 10.4582 0.0000 + 11.6293 0.0000 + 12.3813 0.0000 + 15.5445 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7387 1.0000 + -30.0428 1.0000 + -30.0307 1.0000 + -29.9593 1.0000 + 1.5968 1.0000 + 2.1802 1.0000 + 4.4669 1.0000 + 4.9394 1.0000 + 5.3556 1.0000 + 6.5274 1.0000 + 9.2375 0.0000 + 10.2067 0.0000 + 12.0084 0.0000 + 14.2385 0.0000 + 36.2448 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7386 1.0000 + -30.0470 1.0000 + -30.0305 1.0000 + -29.9589 1.0000 + 1.5982 1.0000 + 2.3352 1.0000 + 4.4290 1.0000 + 4.9767 1.0000 + 5.4211 1.0000 + 6.4124 1.0000 + 9.1302 0.0000 + 10.0506 0.0000 + 11.6269 0.0000 + 11.8418 0.0000 + 15.0676 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7395 1.0000 + -30.0330 1.0000 + -29.9966 1.0000 + -29.9665 1.0000 + 0.6330 1.0000 + 2.1018 1.0000 + 4.5271 1.0000 + 4.5956 1.0000 + 4.7951 1.0000 + 8.3518 0.0000 + 11.1089 0.0000 + 11.1684 0.0000 + 13.7806 0.0000 + 14.1363 0.0000 + 19.9386 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7395 1.0000 + -30.0328 1.0000 + -29.9988 1.0000 + -29.9664 1.0000 + 0.6878 1.0000 + 2.0898 1.0000 + 4.5140 1.0000 + 4.6007 1.0000 + 4.8434 1.0000 + 8.1649 0.0000 + 10.9818 0.0000 + 11.1274 0.0000 + 11.4259 0.0000 + 13.4427 0.0000 + 14.6883 0.0000 + + + -91.8794 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7393 1.0000 + -30.0325 1.0000 + -30.0049 1.0000 + -29.9658 1.0000 + 0.8465 1.0000 + 2.0591 1.0000 + 4.4969 1.0000 + 4.6223 1.0000 + 4.9548 1.0000 + 7.7541 0.9656 + 10.6858 0.0000 + 11.0717 0.0000 + 11.8125 0.0000 + 12.3245 0.0000 + 14.7406 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2898 1.0000 + -65.7392 1.0000 + -30.0320 1.0000 + -30.0142 1.0000 + -29.9650 1.0000 + 1.0875 1.0000 + 2.0159 1.0000 + 4.4997 1.0000 + 4.6561 1.0000 + 5.0929 1.0000 + 7.3100 1.0000 + 10.3059 0.0000 + 10.8388 0.0000 + 11.7195 0.0000 + 13.5031 0.0000 + 14.7149 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7389 1.0000 + -30.0315 1.0000 + -30.0246 1.0000 + -29.9641 1.0000 + 1.3668 1.0000 + 1.9926 1.0000 + 4.5154 1.0000 + 4.6963 1.0000 + 5.2390 1.0000 + 6.9228 1.0000 + 9.9077 0.0000 + 10.4464 0.0000 + 11.5965 0.0000 + 13.3203 0.0000 + 14.3775 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7388 1.0000 + -30.0347 1.0000 + -30.0310 1.0000 + -29.9632 1.0000 + 1.5777 1.0000 + 2.0640 1.0000 + 4.5124 1.0000 + 4.7455 1.0000 + 5.3763 1.0000 + 6.6315 1.0000 + 9.5524 0.0000 + 10.0473 0.0000 + 12.1279 0.0000 + 14.4175 0.0000 + 15.1742 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7386 1.0000 + -30.0425 1.0000 + -30.0306 1.0000 + -29.9625 1.0000 + 1.6379 1.0000 + 2.2630 1.0000 + 4.4722 1.0000 + 4.7995 1.0000 + 5.4863 1.0000 + 6.4480 1.0000 + 9.2884 0.0000 + 9.7273 0.0000 + 11.6147 0.0000 + 12.5272 0.0000 + 15.4126 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7385 1.0000 + -30.0468 1.0000 + -30.0303 1.0000 + -29.9621 1.0000 + 1.6405 1.0000 + 2.4253 1.0000 + 4.4262 1.0000 + 4.8365 1.0000 + 5.5489 1.0000 + 6.3631 1.0000 + 9.1487 0.0000 + 9.5497 0.0000 + 11.6341 0.0000 + 12.3538 0.0000 + 15.2479 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7394 1.0000 + -30.0325 1.0000 + -29.9959 1.0000 + -29.9755 1.0000 + 0.8009 1.0000 + 2.0701 1.0000 + 4.5572 1.0000 + 4.6768 1.0000 + 4.8227 1.0000 + 7.8284 0.7789 + 10.7722 0.0000 + 11.2548 0.0000 + 12.1273 0.0000 + 13.8872 0.0000 + 19.3208 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7393 1.0000 + -30.0324 1.0000 + -29.9980 1.0000 + -29.9752 1.0000 + 0.8570 1.0000 + 2.0712 1.0000 + 4.5273 1.0000 + 4.6328 1.0000 + 4.9304 1.0000 + 7.6670 0.9989 + 10.9814 0.0000 + 11.0519 0.0000 + 11.6948 0.0000 + 14.0784 0.0000 + 42.2456 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7391 1.0000 + -30.0320 1.0000 + -30.0042 1.0000 + -29.9747 1.0000 + 1.0176 1.0000 + 2.0713 1.0000 + 4.4474 1.0000 + 4.6405 1.0000 + 5.1016 1.0000 + 7.2990 1.0000 + 10.7764 0.0000 + 11.1820 0.0000 + 11.3580 0.0000 + 12.3963 0.0000 + 14.3579 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2899 1.0000 + -65.7390 1.0000 + -30.0316 1.0000 + -30.0134 1.0000 + -29.9739 1.0000 + 1.2586 1.0000 + 2.0756 1.0000 + 4.3961 1.0000 + 4.6691 1.0000 + 5.2775 1.0000 + 6.8932 1.0000 + 10.2551 0.0000 + 10.7808 0.0000 + 11.4976 0.0000 + 12.8877 0.0000 + 15.8667 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7388 1.0000 + -30.0310 1.0000 + -30.0239 1.0000 + -29.9730 1.0000 + 1.5255 1.0000 + 2.1140 1.0000 + 4.3949 1.0000 + 4.6822 1.0000 + 5.4431 1.0000 + 6.5515 1.0000 + 9.6939 0.0000 + 10.3186 0.0000 + 11.5514 0.0000 + 13.6887 0.0000 + 13.9888 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7386 1.0000 + -30.0340 1.0000 + -30.0305 1.0000 + -29.9721 1.0000 + 1.7053 1.0000 + 2.2618 1.0000 + 4.4314 1.0000 + 4.6508 1.0000 + 5.5873 1.0000 + 6.3317 1.0000 + 9.2060 0.0000 + 9.8463 0.0000 + 11.5922 0.0000 + 13.7036 0.0000 + 15.4834 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7384 1.0000 + -30.0418 1.0000 + -30.0301 1.0000 + -29.9715 1.0000 + 1.7590 1.0000 + 2.5073 1.0000 + 4.4571 1.0000 + 4.5923 1.0000 + 5.6986 1.0000 + 6.2426 1.0000 + 8.8451 0.0000 + 9.4436 0.0000 + 11.9279 0.0000 + 13.5539 0.0000 + 15.7128 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7384 1.0000 + -30.0461 1.0000 + -30.0299 1.0000 + -29.9711 1.0000 + 1.7660 1.0000 + 2.6912 1.0000 + 4.4142 1.0000 + 4.5895 1.0000 + 5.7615 1.0000 + 6.2306 1.0000 + 8.6509 0.0000 + 9.2035 0.0000 + 11.6476 0.0000 + 14.2805 0.0000 + 19.5232 0.0000 + + + -91.8815 1.0000 + -91.4265 1.0000 + -91.2914 1.0000 + -65.7392 1.0000 + -30.0318 1.0000 + -29.9947 1.0000 + -29.9885 1.0000 + 1.0577 1.0000 + 2.0304 1.0000 + 4.6009 1.0000 + 4.8033 1.0000 + 4.8693 1.0000 + 7.2978 1.0000 + 10.4120 0.0000 + 10.9345 0.0000 + 11.8493 0.0000 + 12.9361 0.0000 + 14.3082 0.0000 + + + -91.8811 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7391 1.0000 + -30.0317 1.0000 + -29.9968 1.0000 + -29.9883 1.0000 + 1.1137 1.0000 + 2.0461 1.0000 + 4.5591 1.0000 + 4.6899 1.0000 + 5.0505 1.0000 + 7.1547 1.0000 + 10.5597 0.0000 + 10.7725 0.0000 + 11.6641 0.0000 + 12.9304 0.0000 + 41.7172 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2904 1.0000 + -65.7389 1.0000 + -30.0313 1.0000 + -30.0030 1.0000 + -29.9878 1.0000 + 1.2740 1.0000 + 2.0929 1.0000 + 4.4116 1.0000 + 4.7042 1.0000 + 5.2624 1.0000 + 6.8170 1.0000 + 10.1893 0.0000 + 11.0104 0.0000 + 11.7700 0.0000 + 13.5929 0.0000 + 14.2934 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7387 1.0000 + -30.0309 1.0000 + -30.0122 1.0000 + -29.9870 1.0000 + 1.5073 1.0000 + 2.1781 1.0000 + 4.2861 1.0000 + 4.7582 1.0000 + 5.4598 1.0000 + 6.4336 1.0000 + 9.5343 0.0000 + 11.2013 0.0000 + 11.3387 0.0000 + 13.1060 0.0000 + 38.3097 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7385 1.0000 + -30.0304 1.0000 + -30.0228 1.0000 + -29.9861 1.0000 + 1.7426 1.0000 + 2.3312 1.0000 + 4.2213 1.0000 + 4.7949 1.0000 + 5.6281 1.0000 + 6.1217 1.0000 + 8.8998 0.0000 + 10.7235 0.0000 + 11.4983 0.0000 + 13.3139 0.0000 + 14.5418 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7383 1.0000 + -30.0329 1.0000 + -30.0299 1.0000 + -29.9853 1.0000 + 1.8915 1.0000 + 2.5903 1.0000 + 4.2222 1.0000 + 4.7435 1.0000 + 5.7550 1.0000 + 5.9846 1.0000 + 8.3534 0.0000 + 10.1446 0.0000 + 11.5765 0.0000 + 14.0941 0.0000 + 31.5297 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7382 1.0000 + -30.0408 1.0000 + -30.0295 1.0000 + -29.9846 1.0000 + 1.9545 1.0000 + 2.8962 1.0000 + 4.2674 1.0000 + 4.5842 1.0000 + 5.8671 1.0000 + 6.0058 1.0000 + 7.9444 0.1919 + 9.6138 0.0000 + 12.3662 0.0000 + 14.4968 0.0000 + 35.5494 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7381 1.0000 + -30.0451 1.0000 + -30.0292 1.0000 + -29.9843 1.0000 + 1.9749 1.0000 + 3.1170 1.0000 + 4.3238 1.0000 + 4.4181 1.0000 + 5.9578 1.0000 + 6.0552 1.0000 + 7.7216 0.9887 + 9.2780 0.0000 + 11.6484 0.0000 + 14.1912 0.0000 + 15.2729 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7387 1.0000 + -30.0309 1.0000 + -30.0033 1.0000 + -29.9932 1.0000 + 1.3568 1.0000 + 2.0050 1.0000 + 4.6470 1.0000 + 4.9310 1.0000 + 4.9604 1.0000 + 6.8399 1.0000 + 10.0603 0.0000 + 10.6095 0.0000 + 11.6789 0.0000 + 12.7079 0.0000 + 14.2313 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7387 1.0000 + -30.0309 1.0000 + -30.0032 1.0000 + -29.9955 1.0000 + 1.4097 1.0000 + 2.0396 1.0000 + 4.6145 1.0000 + 4.7530 1.0000 + 5.1891 1.0000 + 6.7162 1.0000 + 10.1096 0.0000 + 10.3876 0.0000 + 11.6000 0.0000 + 13.1316 0.0000 + 37.6273 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7386 1.0000 + -30.0305 1.0000 + -30.0027 1.0000 + -30.0017 1.0000 + 1.5583 1.0000 + 2.1490 1.0000 + 4.4268 1.0000 + 4.7673 1.0000 + 5.4207 1.0000 + 6.4119 1.0000 + 9.5620 0.0000 + 10.6052 0.0000 + 11.5431 0.0000 + 13.8192 0.0000 + 14.7273 0.0000 + + + -91.8807 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7384 1.0000 + -30.0301 1.0000 + -30.0110 1.0000 + -30.0020 1.0000 + 1.7596 1.0000 + 2.3479 1.0000 + 4.2353 1.0000 + 4.8561 1.0000 + 5.6156 1.0000 + 6.0522 1.0000 + 8.8319 0.0000 + 10.9690 0.0000 + 11.4301 0.0000 + 13.3676 0.0000 + 14.5676 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7382 1.0000 + -30.0296 1.0000 + -30.0216 1.0000 + -30.0011 1.0000 + 1.9573 1.0000 + 2.6478 1.0000 + 4.0985 1.0000 + 4.9571 1.0000 + 5.6139 1.0000 + 5.8909 1.0000 + 8.1389 0.0001 + 10.9883 0.0000 + 11.3423 0.0000 + 13.7094 0.0000 + 15.7553 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7380 1.0000 + -30.0317 1.0000 + -30.0291 1.0000 + -30.0003 1.0000 + 2.1129 1.0000 + 3.0175 1.0000 + 4.0379 1.0000 + 4.9190 1.0000 + 5.5211 1.0000 + 5.9990 1.0000 + 7.5405 1.0000 + 10.3988 0.0000 + 11.4577 0.0000 + 13.7122 0.0000 + 15.9308 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7379 1.0000 + -30.0397 1.0000 + -30.0287 1.0000 + -29.9997 1.0000 + 2.2149 1.0000 + 3.3832 1.0000 + 4.0564 1.0000 + 4.6690 1.0000 + 5.6796 1.0000 + 6.0916 1.0000 + 7.0870 1.0000 + 9.7752 0.0000 + 11.5424 0.0000 + 14.3066 0.0000 + 15.5761 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7378 1.0000 + -30.0440 1.0000 + -30.0285 1.0000 + -29.9994 1.0000 + 2.2640 1.0000 + 3.6435 1.0000 + 4.1382 1.0000 + 4.4048 1.0000 + 5.8558 1.0000 + 6.1352 1.0000 + 6.8387 1.0000 + 9.3618 0.0000 + 11.5772 0.0000 + 14.3099 0.0000 + 14.9653 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7384 1.0000 + -30.0302 1.0000 + -30.0174 1.0000 + -29.9919 1.0000 + 1.5922 1.0000 + 2.0622 1.0000 + 4.6783 1.0000 + 4.9977 1.0000 + 5.1255 1.0000 + 6.4823 1.0000 + 9.7866 0.0000 + 10.2382 0.0000 + 11.6423 0.0000 + 12.1724 0.0000 + 15.1696 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7384 1.0000 + -30.0300 1.0000 + -30.0172 1.0000 + -29.9941 1.0000 + 1.6356 1.0000 + 2.1225 1.0000 + 4.6697 1.0000 + 4.8109 1.0000 + 5.3294 1.0000 + 6.3879 1.0000 + 9.7035 0.0000 + 10.0257 0.0000 + 11.6040 0.0000 + 12.6587 0.0000 + 14.9940 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7382 1.0000 + -30.0297 1.0000 + -30.0168 1.0000 + -30.0004 1.0000 + 1.7553 1.0000 + 2.3064 1.0000 + 4.4915 1.0000 + 4.7800 1.0000 + 5.5639 1.0000 + 6.1473 1.0000 + 9.0130 0.0000 + 10.2004 0.0000 + 11.5878 0.0000 + 13.4966 0.0000 + 14.8358 0.0000 + + + -91.8807 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7381 1.0000 + -30.0293 1.0000 + -30.0162 1.0000 + -30.0097 1.0000 + 1.9268 1.0000 + 2.6143 1.0000 + 4.2587 1.0000 + 4.8639 1.0000 + 5.7056 1.0000 + 5.8972 1.0000 + 8.2193 0.0000 + 10.4809 0.0000 + 11.5381 0.0000 + 13.9612 0.0000 + 14.5546 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7379 1.0000 + -30.0288 1.0000 + -30.0204 1.0000 + -30.0154 1.0000 + 2.1305 1.0000 + 3.0221 1.0000 + 4.0628 1.0000 + 5.0039 1.0000 + 5.4474 1.0000 + 5.9945 1.0000 + 7.4712 1.0000 + 10.6874 0.0000 + 11.3421 0.0000 + 13.4783 0.0000 + 15.3783 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7377 1.0000 + -30.0306 1.0000 + -30.0283 1.0000 + -30.0147 1.0000 + 2.3416 1.0000 + 3.4734 1.0000 + 3.9279 1.0000 + 5.1088 1.0000 + 5.2297 1.0000 + 6.1260 1.0000 + 6.8189 1.0000 + 10.4946 0.0000 + 11.1842 0.0000 + 13.1952 0.0000 + 15.7397 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7376 1.0000 + -30.0385 1.0000 + -30.0280 1.0000 + -30.0141 1.0000 + 2.5238 1.0000 + 3.8199 1.0000 + 3.9375 1.0000 + 4.8268 1.0000 + 5.4778 1.0000 + 6.2123 1.0000 + 6.3224 1.0000 + 9.8991 0.0000 + 11.2407 0.0000 + 13.1926 0.0000 + 15.5369 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7375 1.0000 + -30.0429 1.0000 + -30.0278 1.0000 + -30.0137 1.0000 + 2.6290 1.0000 + 3.8380 1.0000 + 4.2279 1.0000 + 4.5865 1.0000 + 5.6574 1.0000 + 6.0663 1.0000 + 6.2635 1.0000 + 9.4409 0.0000 + 11.2887 0.0000 + 13.2397 0.0000 + 15.7505 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7382 1.0000 + -30.0295 1.0000 + -30.0285 1.0000 + -29.9909 1.0000 + 1.6678 1.0000 + 2.2476 1.0000 + 4.6819 1.0000 + 5.0573 1.0000 + 5.2677 1.0000 + 6.2372 1.0000 + 9.6320 0.0000 + 9.9258 0.0000 + 11.6498 0.0000 + 11.7641 0.0000 + 15.1177 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7382 1.0000 + -30.0294 1.0000 + -30.0284 1.0000 + -29.9931 1.0000 + 1.7064 1.0000 + 2.3241 1.0000 + 4.6780 1.0000 + 4.8714 1.0000 + 5.4482 1.0000 + 6.1821 1.0000 + 9.3944 0.0000 + 9.7662 0.0000 + 11.6283 0.0000 + 12.2592 0.0000 + 15.0447 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7380 1.0000 + -30.0291 1.0000 + -30.0279 1.0000 + -29.9994 1.0000 + 1.8197 1.0000 + 2.5512 1.0000 + 4.5747 1.0000 + 4.7174 1.0000 + 5.6795 1.0000 + 6.0408 1.0000 + 8.5996 0.0000 + 9.8664 0.0000 + 11.6305 0.0000 + 13.1616 0.0000 + 14.9422 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7378 1.0000 + -30.0287 1.0000 + -30.0272 1.0000 + -30.0087 1.0000 + 2.0020 1.0000 + 2.9149 1.0000 + 4.3358 1.0000 + 4.7172 1.0000 + 5.7999 1.0000 + 5.9420 1.0000 + 7.7512 0.9686 + 10.0198 0.0000 + 11.6232 0.0000 + 14.2345 0.0000 + 15.3681 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7376 1.0000 + -30.0283 1.0000 + -30.0265 1.0000 + -30.0194 1.0000 + 2.2449 1.0000 + 3.3771 1.0000 + 4.1205 1.0000 + 4.7396 1.0000 + 5.6457 1.0000 + 6.0882 1.0000 + 6.9514 1.0000 + 10.1586 0.0000 + 11.4369 0.0000 + 13.6407 0.0000 + 15.4695 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7374 1.0000 + -30.0297 1.0000 + -30.0278 1.0000 + -30.0258 1.0000 + 2.5344 1.0000 + 3.8121 1.0000 + 3.9855 1.0000 + 4.8087 1.0000 + 5.5213 1.0000 + 6.1981 1.0000 + 6.2633 1.0000 + 10.2073 0.0000 + 11.0454 0.0000 + 13.0519 0.0000 + 15.5984 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7373 1.0000 + -30.0377 1.0000 + -30.0274 1.0000 + -30.0252 1.0000 + 2.8336 1.0000 + 3.8000 1.0000 + 4.1712 1.0000 + 4.9751 1.0000 + 5.5168 1.0000 + 5.6776 1.0000 + 6.3079 1.0000 + 9.9354 0.0000 + 10.7127 0.0000 + 12.8003 0.0000 + 15.8356 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7372 1.0000 + -30.0421 1.0000 + -30.0272 1.0000 + -30.0249 1.0000 + 3.0541 1.0000 + 3.7465 1.0000 + 4.2239 1.0000 + 5.1222 1.0000 + 5.2997 1.0000 + 5.6922 1.0000 + 6.3453 1.0000 + 9.5016 0.0000 + 10.6605 0.0000 + 12.7227 0.0000 + 15.5675 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7380 1.0000 + -30.0345 1.0000 + -30.0292 1.0000 + -29.9902 1.0000 + 1.6740 1.0000 + 2.4018 1.0000 + 4.6707 1.0000 + 5.0946 1.0000 + 5.3522 1.0000 + 6.1117 1.0000 + 9.6010 0.0000 + 9.7207 0.0000 + 11.5419 0.0000 + 11.6546 0.0000 + 14.9372 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7380 1.0000 + -30.0344 1.0000 + -30.0291 1.0000 + -29.9926 1.0000 + 1.7129 1.0000 + 2.4847 1.0000 + 4.6554 1.0000 + 4.9171 1.0000 + 5.5191 1.0000 + 6.0879 1.0000 + 9.2253 0.0000 + 9.6369 0.0000 + 11.6608 0.0000 + 12.0478 0.0000 + 14.9557 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7379 1.0000 + -30.0339 1.0000 + -30.0288 1.0000 + -29.9989 1.0000 + 1.8315 1.0000 + 2.7302 1.0000 + 4.6082 1.0000 + 4.6655 1.0000 + 5.7492 1.0000 + 6.0255 1.0000 + 8.3737 0.0000 + 9.6738 0.0000 + 11.6583 0.0000 + 12.9796 0.0000 + 15.0184 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7377 1.0000 + -30.0333 1.0000 + -30.0284 1.0000 + -30.0082 1.0000 + 2.0272 1.0000 + 3.1247 1.0000 + 4.4101 1.0000 + 4.5557 1.0000 + 5.9249 1.0000 + 5.9750 1.0000 + 7.4900 1.0000 + 9.7287 0.0000 + 11.6418 0.0000 + 13.9974 0.0000 + 15.0437 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7375 1.0000 + -30.0326 1.0000 + -30.0279 1.0000 + -30.0189 1.0000 + 2.2989 1.0000 + 3.6250 1.0000 + 4.2181 1.0000 + 4.4835 1.0000 + 5.8518 1.0000 + 6.1331 1.0000 + 6.6571 1.0000 + 9.7868 0.0000 + 11.4865 0.0000 + 14.5147 0.0000 + 15.4164 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7373 1.0000 + -30.0318 1.0000 + -30.0291 1.0000 + -30.0275 1.0000 + 2.6408 1.0000 + 3.9091 1.0000 + 4.2522 1.0000 + 4.5325 1.0000 + 5.7034 1.0000 + 5.9787 1.0000 + 6.2621 1.0000 + 9.8299 0.0000 + 11.0556 0.0000 + 13.0395 0.0000 + 15.4657 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7372 1.0000 + -30.0372 1.0000 + -30.0313 1.0000 + -30.0271 1.0000 + 3.0409 1.0000 + 3.8298 1.0000 + 4.2195 1.0000 + 5.0235 1.0000 + 5.2301 1.0000 + 5.8071 1.0000 + 6.3436 1.0000 + 9.8006 0.0000 + 10.3862 0.0000 + 12.6747 0.0000 + 15.4656 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7371 1.0000 + -30.0416 1.0000 + -30.0310 1.0000 + -30.0269 1.0000 + 3.4531 1.0000 + 3.7372 1.0000 + 4.0740 1.0000 + 4.7709 1.0000 + 5.5707 1.0000 + 5.7646 1.0000 + 6.3738 1.0000 + 9.5306 0.0000 + 10.0845 0.0000 + 12.5702 0.0000 + 15.4251 0.0000 + + + + + + + 0.00000000 0.00000000 0.00000000 + + + 7.88278638 + + + gridpoints + spin + energy + total + integrated + + + -98.7492 0.0000 0.0000 + -98.2456 0.0000 0.0000 + -97.7420 0.0000 0.0000 + -97.2383 0.0000 0.0000 + -96.7347 0.0000 0.0000 + -96.2311 0.0000 0.0000 + -95.7275 0.0000 0.0000 + -95.2239 0.0000 0.0000 + -94.7203 0.0000 0.0000 + -94.2166 0.0000 0.0000 + -93.7130 0.0000 0.0000 + -93.2094 0.0000 0.0000 + -92.7058 0.0000 0.0000 + -92.2022 0.0000 0.0000 + -91.6986 3.9514 1.9900 + -91.1949 7.6087 5.8219 + -90.6913 0.3536 6.0000 + -90.1877 0.0000 6.0000 + -89.6841 0.0000 6.0000 + -89.1805 0.0000 6.0000 + -88.6769 0.0000 6.0000 + -88.1732 0.0000 6.0000 + -87.6696 0.0000 6.0000 + -87.1660 0.0000 6.0000 + -86.6624 0.0000 6.0000 + -86.1588 0.0000 6.0000 + -85.6552 0.0000 6.0000 + -85.1515 0.0000 6.0000 + -84.6479 0.0000 6.0000 + -84.1443 0.0000 6.0000 + -83.6407 0.0000 6.0000 + -83.1371 0.0000 6.0000 + -82.6335 0.0000 6.0000 + -82.1299 0.0000 6.0000 + -81.6262 0.0000 6.0000 + -81.1226 0.0000 6.0000 + -80.6190 0.0000 6.0000 + -80.1154 0.0000 6.0000 + -79.6118 0.0000 6.0000 + -79.1082 0.0000 6.0000 + -78.6045 0.0000 6.0000 + -78.1009 0.0000 6.0000 + -77.5973 0.0000 6.0000 + -77.0937 0.0000 6.0000 + -76.5901 0.0000 6.0000 + -76.0865 0.0000 6.0000 + -75.5828 0.0000 6.0000 + -75.0792 0.0000 6.0000 + -74.5756 0.0000 6.0000 + -74.0720 0.0000 6.0000 + -73.5684 0.0000 6.0000 + -73.0648 0.0000 6.0000 + -72.5611 0.0000 6.0000 + -72.0575 0.0000 6.0000 + -71.5539 0.0000 6.0000 + -71.0503 0.0000 6.0000 + -70.5467 0.0000 6.0000 + -70.0431 0.0000 6.0000 + -69.5394 0.0000 6.0000 + -69.0358 0.0000 6.0000 + -68.5322 0.0000 6.0000 + -68.0286 0.0000 6.0000 + -67.5250 0.0000 6.0000 + -67.0214 0.0000 6.0000 + -66.5178 0.0000 6.0000 + -66.0141 0.0002 6.0001 + -65.5105 3.9689 7.9989 + -65.0069 0.0021 8.0000 + -64.5033 0.0000 8.0000 + -63.9997 0.0000 8.0000 + -63.4961 0.0000 8.0000 + -62.9924 0.0000 8.0000 + -62.4888 0.0000 8.0000 + -61.9852 0.0000 8.0000 + -61.4816 0.0000 8.0000 + -60.9780 0.0000 8.0000 + -60.4744 0.0000 8.0000 + -59.9707 0.0000 8.0000 + -59.4671 0.0000 8.0000 + -58.9635 0.0000 8.0000 + -58.4599 0.0000 8.0000 + -57.9563 0.0000 8.0000 + -57.4527 0.0000 8.0000 + -56.9490 0.0000 8.0000 + -56.4454 0.0000 8.0000 + -55.9418 0.0000 8.0000 + -55.4382 0.0000 8.0000 + -54.9346 0.0000 8.0000 + -54.4310 0.0000 8.0000 + -53.9273 0.0000 8.0000 + -53.4237 0.0000 8.0000 + -52.9201 0.0000 8.0000 + -52.4165 0.0000 8.0000 + -51.9129 0.0000 8.0000 + -51.4093 0.0000 8.0000 + -50.9057 0.0000 8.0000 + -50.4020 0.0000 8.0000 + -49.8984 0.0000 8.0000 + -49.3948 0.0000 8.0000 + -48.8912 0.0000 8.0000 + -48.3876 0.0000 8.0000 + -47.8840 0.0000 8.0000 + -47.3803 0.0000 8.0000 + -46.8767 0.0000 8.0000 + -46.3731 0.0000 8.0000 + -45.8695 0.0000 8.0000 + -45.3659 0.0000 8.0000 + -44.8623 0.0000 8.0000 + -44.3586 0.0000 8.0000 + -43.8550 0.0000 8.0000 + -43.3514 0.0000 8.0000 + -42.8478 0.0000 8.0000 + -42.3442 0.0000 8.0000 + -41.8406 0.0000 8.0000 + -41.3369 0.0000 8.0000 + -40.8333 0.0000 8.0000 + -40.3297 0.0000 8.0000 + -39.8261 0.0000 8.0000 + -39.3225 0.0000 8.0000 + -38.8189 0.0000 8.0000 + -38.3152 0.0000 8.0000 + -37.8116 0.0000 8.0000 + -37.3080 0.0000 8.0000 + -36.8044 0.0000 8.0000 + -36.3008 0.0000 8.0000 + -35.7972 0.0000 8.0000 + -35.2936 0.0000 8.0000 + -34.7899 0.0000 8.0000 + -34.2863 0.0000 8.0000 + -33.7827 0.0000 8.0000 + -33.2791 0.0000 8.0000 + -32.7755 0.0000 8.0000 + -32.2719 0.0000 8.0000 + -31.7682 0.0000 8.0000 + -31.2646 0.0000 8.0000 + -30.7610 0.0000 8.0000 + -30.2574 0.0062 8.0031 + -29.7538 11.6675 13.8791 + -29.2502 0.2401 14.0000 + -28.7465 0.0000 14.0000 + -28.2429 0.0000 14.0000 + -27.7393 0.0000 14.0000 + -27.2357 0.0000 14.0000 + -26.7321 0.0000 14.0000 + -26.2285 0.0000 14.0000 + -25.7248 0.0000 14.0000 + -25.2212 0.0000 14.0000 + -24.7176 0.0000 14.0000 + -24.2140 0.0000 14.0000 + -23.7104 0.0000 14.0000 + -23.2068 0.0000 14.0000 + -22.7031 0.0000 14.0000 + -22.1995 0.0000 14.0000 + -21.6959 0.0000 14.0000 + -21.1923 0.0000 14.0000 + -20.6887 0.0000 14.0000 + -20.1851 0.0000 14.0000 + -19.6815 0.0000 14.0000 + -19.1778 0.0000 14.0000 + -18.6742 0.0000 14.0000 + -18.1706 0.0000 14.0000 + -17.6670 0.0000 14.0000 + -17.1634 0.0000 14.0000 + -16.6598 0.0000 14.0000 + -16.1561 0.0000 14.0000 + -15.6525 0.0000 14.0000 + -15.1489 0.0000 14.0000 + -14.6453 0.0000 14.0000 + -14.1417 0.0000 14.0000 + -13.6381 0.0000 14.0000 + -13.1344 0.0000 14.0000 + -12.6308 0.0000 14.0000 + -12.1272 0.0000 14.0000 + -11.6236 0.0000 14.0000 + -11.1200 0.0000 14.0000 + -10.6164 0.0000 14.0000 + -10.1127 0.0000 14.0000 + -9.6091 0.0000 14.0000 + -9.1055 0.0000 14.0000 + -8.6019 0.0000 14.0000 + -8.0983 0.0000 14.0000 + -7.5947 0.0000 14.0000 + -7.0910 0.0000 14.0000 + -6.5874 0.0000 14.0000 + -6.0838 0.0000 14.0000 + -5.5802 0.0000 14.0000 + -5.0766 0.0000 14.0000 + -4.5730 0.0000 14.0000 + -4.0694 0.0000 14.0000 + -3.5657 0.0000 14.0000 + -3.0621 0.0000 14.0000 + -2.5585 0.0000 14.0000 + -2.0549 0.0009 14.0005 + -1.5513 0.1132 14.0574 + -1.0477 0.2483 14.1825 + -0.5440 0.3448 14.3561 + -0.0404 0.4543 14.5849 + 0.4632 0.5588 14.8664 + 0.9668 0.6103 15.1737 + 1.4704 0.8493 15.6014 + 1.9740 1.0615 16.1360 + 2.4777 1.1259 16.7031 + 2.9813 0.9778 17.1955 + 3.4849 0.7572 17.5768 + 3.9885 0.9446 18.0526 + 4.4921 2.2831 19.2023 + 4.9957 3.6694 21.0503 + 5.4994 2.8044 22.4627 + 6.0030 2.3933 23.6680 + 6.5066 1.9045 24.6271 + 7.0102 1.3513 25.3077 + 7.5138 0.8062 25.7137 + 8.0174 0.7272 26.0799 + 8.5211 0.8382 26.5020 + 9.0247 1.4316 27.2230 + 9.5283 1.9155 28.1877 + 10.0319 1.7300 29.0590 + 10.5355 1.5459 29.8375 + 11.0391 1.1419 30.4126 + 11.5427 1.3555 31.0952 + 12.0464 1.2953 31.7476 + 12.5500 0.5429 32.0210 + 13.0536 0.4473 32.2462 + 13.5572 0.8282 32.6634 + 14.0608 1.1877 33.2615 + 14.5644 1.1003 33.8156 + 15.0681 1.3090 34.4749 + 15.5717 1.4011 35.1805 + 16.0753 0.7368 35.5516 + 16.5789 0.3354 35.7205 + 17.0825 0.2344 35.8385 + 17.5861 0.0350 35.8561 + 18.0898 0.0355 35.8740 + 18.5934 0.0265 35.8874 + 19.0970 0.0000 35.8874 + 19.6006 0.0175 35.8962 + 20.1042 0.0059 35.8992 + 20.6078 0.0000 35.8993 + 21.1115 0.0000 35.8993 + 21.6151 0.0004 35.8995 + 22.1187 0.0043 35.9016 + 22.6223 0.0000 35.9016 + 23.1259 0.0000 35.9016 + 23.6295 0.0000 35.9016 + 24.1332 0.0047 35.9040 + 24.6368 0.0000 35.9040 + 25.1404 0.0000 35.9040 + 25.6440 0.0000 35.9040 + 26.1476 0.0000 35.9040 + 26.6512 0.0000 35.9040 + 27.1548 0.0000 35.9040 + 27.6585 0.0000 35.9040 + 28.1621 0.0000 35.9040 + 28.6657 0.0000 35.9040 + 29.1693 0.0000 35.9040 + 29.6729 0.0000 35.9040 + 30.1765 0.0000 35.9040 + 30.6802 0.0000 35.9040 + 31.1838 0.0001 35.9040 + 31.6874 0.0186 35.9134 + 32.1910 0.0092 35.9180 + 32.6946 0.0003 35.9182 + 33.1982 0.0094 35.9230 + 33.7019 0.0000 35.9230 + 34.2055 0.0107 35.9284 + 34.7091 0.0081 35.9324 + 35.2127 0.0000 35.9324 + 35.7163 0.0223 35.9437 + 36.2199 0.0077 35.9475 + 36.7236 0.0030 35.9490 + 37.2272 0.0047 35.9514 + 37.7308 0.0088 35.9558 + 38.2344 0.0020 35.9568 + 38.7380 0.0269 35.9704 + 39.2416 0.0102 35.9755 + 39.7453 0.0015 35.9763 + 40.2489 0.0000 35.9763 + 40.7525 0.0047 35.9787 + 41.2561 0.0000 35.9787 + 41.7597 0.0178 35.9876 + 42.2633 0.0114 35.9934 + 42.7670 0.0038 35.9953 + 43.2706 0.0000 35.9953 + 43.7742 0.0000 35.9953 + 44.2778 0.0000 35.9953 + 44.7814 0.0000 35.9953 + 45.2850 0.0000 35.9953 + 45.7886 0.0094 36.0000 + 46.2923 0.0000 36.0000 + 46.7959 0.0000 36.0000 + 47.2995 0.0000 36.0000 + 47.8031 0.0000 36.0000 + 48.3067 0.0000 36.0000 + 48.8103 0.0000 36.0000 + 49.3140 0.0000 36.0000 + 49.8176 0.0000 36.0000 + 50.3212 0.0000 36.0000 + 50.8248 0.0000 36.0000 + 51.3284 0.0000 36.0000 + 51.8320 0.0000 36.0000 + 52.3357 0.0000 36.0000 + + + + + + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.50000000 0.50000000 + 0.50000000 0.00000000 0.50000000 + 0.50000000 0.50000000 0.00000000 + + + diff --git a/examples/README b/examples/README index d6c946725f1..3c9c299819d 100644 --- a/examples/README +++ b/examples/README @@ -83,6 +83,7 @@ kim: use of potentials in Knowledge Base for Interatomic Models (KIM) latte: use of LATTE density-functional tight-binding quantum code meam: MEAM test for SiC and shear (same as shear examples) melt: rapid melt of 3d LJ system +message: client/server coupling of 2 codes micelle: self-assembly of small lipid-like molecules into 2d bilayers min: energy minimization of 2d LJ melt mscg: parameterize a multi-scale coarse-graining (MSCG) model diff --git a/examples/message/README b/examples/message/README new file mode 100644 index 00000000000..6cd99d5c097 --- /dev/null +++ b/examples/message/README @@ -0,0 +1,117 @@ +This dir contains scripts that demonstrate how to use LAMMPS as both a +client and server code to run a simple MD simulation. LAMMPS as a +client performs the MD timestepping. LAMMPS as a server provides the +energy and forces between interacting particles. Every timestep the +LAMMPS client sends a message to the LAMMPS server and receives a +response message in return. + +Another code could replace LAMMPS as the client, e.g. another MD code +which wants to use a LAMMPS potential. Another code could replace +LAMMPS as the server, e.g. a quantum code computing quantum forces, so +that ab initio MD could be performed. See an example of the latter in +examples/COUPLE/lammps_vasp. + +See the doc pages for the "MESSAGE package" +(Package_details.html#PKG-MESSAGE) and "Howto client/server" +(Howto_client_server.html) for more details on how client/server +coupling works in LAMMPS. + +-------------- + +Note that you can adjust the problem size run by these scripts by +setting "x,y,z" variables when you run LAMMPS. The default problem size +is x = y = z = 5, which is 500 particles. + +lmp_mpi -v x 10 -v y 10 -v z 20 # 8000 particles + +This applies to either in.message or in.message.client + +You can also run the in.message scripts with an NPT integrator +instead of NVE, if you comment/uncomment the correct lines. + +The client and server script define a "mode" variable +which can be set to file, zmq, mpi/one, or mpi/two, +as illustrated below. + +-------------- + +To run this problem in the traditional way (no client/server coupling) +do one of these: + +% lmp_serial < in.message +% mpirun -np 4 lmp_mpi < in.message + +Or run with in.message.tilt. + +-------------- + +To run in client/server mode: + +Both the client and server script must use the same messaging mode. +This can be selected by setting the "mode" variable when you run +LAMMPS. The default mode = file. The other options for the mode +variable are zmq, mpione, mpitwo. + +Here we assume LAMMPS was built to run in parallel, and the MESSAGE +package was installed with socket (ZMQ) support. This means any of +the 4 messaging modes can be used. + +The next sections illustrate how to launch LAMMPS twice, once as a +client, once as a server, for each of the messaging modes. + +In all cases, the client should print out thermodynamic info for 50 +steps. The server should print out setup info, print nothing until +the client exits, at which point the server should also exit. + +The examples below show launching LAMMPS twice from the same window +(or batch script), using the "&" character to launch the first time in +the background. For all modes except {mpi/one}, you could also launch +twice in separate windows on your desktop machine. It does not matter +whether you launch the client or server first. + +In these examples either the client or server can be run on one or +more processors. If running in a non-MPI mode (file or zmq) you can +launch LAMMPS on a single processor without using mpirun. + +IMPORTANT: If you run in mpi/two mode, you must launch LAMMPS both +times via mpirun, even if one or both of them runs on a single +processor. This is so that MPI can figure out how to connect both MPI +processes together to exchange MPI messages between them. + +-------------- + +NOTE: the Script.sh file has comands to perform all the +runs listed below. + +-------------- + +File or ZMQ or mpi/two modes of messaging: + +% mpirun -np 1 lmp_mpi -v mode file -log log.client < in.message.client & +% mpirun -np 2 lmp_mpi -v mode file -log log.server < in.message.server + +% mpirun -np 4 lmp_mpi -v mode zmq -log log.client < in.message.client & +% mpirun -np 1 lmp_mpi -v mode zmq -log log.server < in.message.server + +% mpirun -np 2 lmp_mpi -v mode mpitwo -log log.client < in.message.client & +% mpirun -np 4 lmp_mpi -v mode mpitwo -log log.server < in.message.server + +Or run with in.message.tilt.client/server. +Don't run the tilt files with the "file" mode; they run too slow. + +-------------- + +Mpi/one mode of messaging: + +Launch LAMMPS twice in a single mpirun command: + +% mpirun -np 2 lmp_mpi -mpicolor 0 -in in.message.client -v mode mpione -log log.client : -np 4 lmp_mpi -mpicolor 1 -in in.message.server -v mode mpione -log log.server + +Or run with in.message.tilt.client/server. + +The two -np values determine how many procs the client and the server +run on. + +A LAMMPS executable run in this manner must use the -mpicolor color +command-line option as its first option, where color is set to one +integer value for the 1st app, and another value for the 2nd app. diff --git a/examples/message/Script.sh b/examples/message/Script.sh new file mode 100644 index 00000000000..fdcd6f11888 --- /dev/null +++ b/examples/message/Script.sh @@ -0,0 +1,55 @@ +# sample launch script + +# message on 1 proc each + +mpirun -np 1 lmp_mpi -log log.message.g++.1 < in.message + +mpirun -np 1 lmp_mpi -v mode file -log log.message.client.file.g++.1 < in.message.client & +mpirun -np 1 lmp_mpi -v mode file -log log.message.server.file.g++.1 < in.message.server + +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.client.zmq.g++.1 < in.message.client & +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.server.zmq.g++.1 < in.message.server + +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.client.mpitwo.g++.1 < in.message.client & +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.server.mpitwo.g++.1 < in.message.server + +mpirun -np 1 lmp_mpi -m 0 -in in.message.client -v mode mpione -log log.message.client.mpione.g++.1 : -np 1 lmp_mpi -m 1 -in in.message.server -v mode mpione -log log.message.server.mpione.g++.1 + +# message on 2/4 procs each + +mpirun -np 4 lmp_mpi -log log.message.g++.4 < in.message + +mpirun -np 2 lmp_mpi -v mode file -log log.message.client.file.g++.2 < in.message.client & +mpirun -np 4 lmp_mpi -v mode file -log log.message.server.file.g++.4 < in.message.server + +mpirun -np 2 lmp_mpi -v mode zmq -log log.message.client.zmq.g++.2 < in.message.client & +mpirun -np 4 lmp_mpi -v mode zmq -log log.message.server.zmq.g++.4 < in.message.server + +mpirun -np 2 lmp_mpi -v mode mpitwo -log log.message.client.mpitwo.g++.2 < in.message.client & +mpirun -np 4 lmp_mpi -v mode mpitwo -log log.message.server.mpitwo.g++.4 < in.message.server + +mpirun -np 2 lmp_mpi -m 0 -in in.message.client -v mode mpione -log log.message.client.mpione.g++.2 : -np 4 lmp_mpi -m 1 -in in.message.server -v mode mpione -log log.message.server.mpione.g++.4 + +# message.tilt on 1 proc each + +mpirun -np 1 lmp_mpi -log log.message.tilt.g++.1 < in.message.tilt + +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.tilt.client.zmq.g++.1 < in.message.tilt.client & +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.tilt.server.zmq.g++.1 < in.message.tilt.server + +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.tilt.client.mpitwo.g++.1 < in.message.tilt.client & +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.tilt.server.mpitwo.g++.1 < in.message.tilt.server + +mpirun -np 1 lmp_mpi -m 0 -in in.message.tilt.client -v mode mpione -log log.message.tilt.client.mpione.g++.1 : -np 1 lmp_mpi -m 1 -in in.message.tilt.server -v mode mpione -log log.message.tilt.server.mpione.g++.1 + +# message.tilt on 2/4 procs each + +mpirun -np 1 lmp_mpi -log log.message.tilt.g++.4 < in.message.tilt + +mpirun -np 2 lmp_mpi -v mode zmq -log log.message.tilt.client.zmq.g++.2 < in.message.tilt.client & +mpirun -np 4 lmp_mpi -v mode zmq -log log.message.tilt.server.zmq.g++.4 < in.message.tilt.server + +mpirun -np 2 lmp_mpi -v mode mpitwo -log log.message.tilt.client.mpitwo.g++.2 < in.message.tilt.client & +mpirun -np 4 lmp_mpi -v mode mpitwo -log log.message.tilt.server.mpitwo.g++.4 < in.message.tilt.server + +mpirun -np 2 lmp_mpi -m 0 -in in.message.tilt.client -v mode mpione -log log.message.tilt.client.mpione.g++.2 : -np 4 lmp_mpi -m 1 -in in.message.tilt.server -v mode mpione -log log.message.tilt.server.mpione.g++.4 diff --git a/examples/message/in.message b/examples/message/in.message new file mode 100644 index 00000000000..7fbbffc355c --- /dev/null +++ b/examples/message/in.message @@ -0,0 +1,29 @@ +# 3d Lennard-Jones melt - no client/server mode + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic + +lattice fcc 0.8442 +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +thermo 10 +run 50 diff --git a/examples/message/in.message.client b/examples/message/in.message.client new file mode 100644 index 00000000000..f1ec644a800 --- /dev/null +++ b/examples/message/in.message.client @@ -0,0 +1,41 @@ +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then & + "message client md file tmp.couple" & +elif "${mode} == zmq" & + "message client md zmq localhost:5555" & +elif "${mode} == mpione" & + "message client md mpi/one" & +elif "${mode} == mpitwo" & + "message client md mpi/two tmp.couple" + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 diff --git a/examples/message/in.message.server b/examples/message/in.message.server new file mode 100644 index 00000000000..2fedd2ae006 --- /dev/null +++ b/examples/message/in.message.server @@ -0,0 +1,29 @@ +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then & + "message server md file tmp.couple" & +elif "${mode} == zmq" & + "message server md zmq *:5555" & +elif "${mode} == mpione" & + "message server md mpi/one" & +elif "${mode} == mpitwo" & + "message server md mpi/two tmp.couple" + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +region box block 0 1 0 1 0 1 +create_box 1 box +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md diff --git a/examples/message/in.message.tilt b/examples/message/in.message.tilt new file mode 100644 index 00000000000..51126eae1ef --- /dev/null +++ b/examples/message/in.message.tilt @@ -0,0 +1,30 @@ +# 2d NEMD simulation - no client/server mode + +units lj +atom_style atomic +dimension 2 + +lattice sq2 0.8442 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +create_atoms 1 box +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 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 diff --git a/examples/message/in.message.tilt.client b/examples/message/in.message.tilt.client new file mode 100644 index 00000000000..b55bc6585b0 --- /dev/null +++ b/examples/message/in.message.tilt.client @@ -0,0 +1,42 @@ +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then & + "message client md file tmp.couple" & +elif "${mode} == zmq" & + "message client md zmq localhost:5555" & +elif "${mode} == mpione" & + "message client md mpi/one" & +elif "${mode} == mpitwo" & + "message client md mpi/two tmp.couple" + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +create_atoms 1 box +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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 diff --git a/examples/message/in.message.tilt.server b/examples/message/in.message.tilt.server new file mode 100644 index 00000000000..ba211ed15fc --- /dev/null +++ b/examples/message/in.message.tilt.server @@ -0,0 +1,31 @@ +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then & + "message server md file tmp.couple" & +elif "${mode} == zmq" & + "message server md zmq *:5555" & +elif "${mode} == mpione" & + "message server md mpi/one" & +elif "${mode} == mpitwo" & + "message server md mpi/two tmp.couple" + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +create_atoms 1 box +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md diff --git a/examples/message/log.28Aug18.message.client.file.g++.1 b/examples/message/log.28Aug18.message.client.file.g++.1 new file mode 100644 index 00000000000..bca1d37dd50 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.file.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md file tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000752926 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 5.0251 on 1 procs for 50 steps with 500 atoms + +Performance: 4298.421 tau/day, 9.950 timesteps/s +0.1% 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 | 9.7752e-06 | 9.7752e-06 | 9.7752e-06 | 0.0 | 0.00 +Comm | 0.00014925 | 0.00014925 | 0.00014925 | 0.0 | 0.00 +Output | 0.00023127 | 0.00023127 | 0.00023127 | 0.0 | 0.00 +Modify | 5.0242 | 5.0242 | 5.0242 | 0.0 | 99.98 +Other | | 0.0004668 | | | 0.01 + +Nlocal: 500 ave 500 max 500 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: 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 = 4 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.client.file.g++.2 b/examples/message/log.28Aug18.message.client.file.g++.2 new file mode 100644 index 00000000000..1c868dde37c --- /dev/null +++ b/examples/message/log.28Aug18.message.client.file.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md file tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000613928 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 5.02384 on 2 procs for 50 steps with 500 atoms + +Performance: 4299.499 tau/day, 9.953 timesteps/s +50.1% CPU use with 2 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 | 1.9073e-06 | 3.3379e-06 | 4.7684e-06 | 0.0 | 0.00 +Comm | 0.00020742 | 0.00021136 | 0.00021529 | 0.0 | 0.00 +Output | 0.00026989 | 0.00048053 | 0.00069118 | 0.0 | 0.01 +Modify | 5.0171 | 5.0199 | 5.0228 | 0.1 | 99.92 +Other | | 0.003203 | | | 0.06 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.client.mpione.g++.1 b/examples/message/log.28Aug18.message.client.mpione.g++.1 new file mode 100644 index 00000000000..78bee72fdf5 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpione.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000540018 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0403891 on 1 procs for 50 steps with 500 atoms + +Performance: 534798.272 tau/day, 1237.959 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 | 0 | 0 | 0.0 | 0.00 +Neigh | 4.7684e-06 | 4.7684e-06 | 4.7684e-06 | 0.0 | 0.01 +Comm | 6.3181e-05 | 6.3181e-05 | 6.3181e-05 | 0.0 | 0.16 +Output | 9.5367e-05 | 9.5367e-05 | 9.5367e-05 | 0.0 | 0.24 +Modify | 0.040053 | 0.040053 | 0.040053 | 0.0 | 99.17 +Other | | 0.0001726 | | | 0.43 + +Nlocal: 500 ave 500 max 500 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: 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 = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.mpione.g++.2 b/examples/message/log.28Aug18.message.client.mpione.g++.2 new file mode 100644 index 00000000000..7d7af866e39 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpione.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000475883 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0208495 on 2 procs for 50 steps with 500 atoms + +Performance: 1035997.740 tau/day, 2398.143 timesteps/s +99.1% CPU use with 2 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 | 3.0994e-06 | 4.53e-06 | 5.9605e-06 | 0.0 | 0.02 +Comm | 0.00012422 | 0.00012457 | 0.00012493 | 0.0 | 0.60 +Output | 5.7697e-05 | 7.987e-05 | 0.00010204 | 0.0 | 0.38 +Modify | 0.020463 | 0.020464 | 0.020466 | 0.0 | 98.15 +Other | | 0.0001761 | | | 0.84 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.mpitwo.g++.1 b/examples/message/log.28Aug18.message.client.mpitwo.g++.1 new file mode 100644 index 00000000000..ee97e7bd1a3 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpitwo.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000603914 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.069119 on 1 procs for 50 steps with 500 atoms + +Performance: 312504.627 tau/day, 723.390 timesteps/s +42.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 | 7.1526e-06 | 7.1526e-06 | 7.1526e-06 | 0.0 | 0.01 +Comm | 0.0001049 | 0.0001049 | 0.0001049 | 0.0 | 0.15 +Output | 0.00014019 | 0.00014019 | 0.00014019 | 0.0 | 0.20 +Modify | 0.068602 | 0.068602 | 0.068602 | 0.0 | 99.25 +Other | | 0.0002651 | | | 0.38 + +Nlocal: 500 ave 500 max 500 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: 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 = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.mpitwo.g++.2 b/examples/message/log.28Aug18.message.client.mpitwo.g++.2 new file mode 100644 index 00000000000..72db0198d58 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpitwo.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000667095 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0190214 on 2 procs for 50 steps with 500 atoms + +Performance: 1135563.588 tau/day, 2628.619 timesteps/s +58.5% CPU use with 2 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 | 1.9073e-06 | 2.861e-06 | 3.8147e-06 | 0.0 | 0.02 +Comm | 0.00017238 | 0.00017989 | 0.0001874 | 0.0 | 0.95 +Output | 0.00012803 | 0.00015497 | 0.00018191 | 0.0 | 0.81 +Modify | 0.018065 | 0.018181 | 0.018297 | 0.1 | 95.58 +Other | | 0.0005029 | | | 2.64 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.client.zmq.g++.1 b/examples/message/log.28Aug18.message.client.zmq.g++.1 new file mode 100644 index 00000000000..23fa70c1be6 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.zmq.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000734091 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0778341 on 1 procs for 50 steps with 500 atoms + +Performance: 277513.222 tau/day, 642.392 timesteps/s +11.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 | 0 | 0 | 0.0 | 0.00 +Neigh | 7.8678e-06 | 7.8678e-06 | 7.8678e-06 | 0.0 | 0.01 +Comm | 8.3685e-05 | 8.3685e-05 | 8.3685e-05 | 0.0 | 0.11 +Output | 0.00011373 | 0.00011373 | 0.00011373 | 0.0 | 0.15 +Modify | 0.07734 | 0.07734 | 0.07734 | 0.0 | 99.37 +Other | | 0.0002885 | | | 0.37 + +Nlocal: 500 ave 500 max 500 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: 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 = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.zmq.g++.2 b/examples/message/log.28Aug18.message.client.zmq.g++.2 new file mode 100644 index 00000000000..7833befd211 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.zmq.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000570059 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0416595 on 2 procs for 50 steps with 500 atoms + +Performance: 518489.499 tau/day, 1200.207 timesteps/s +56.5% CPU use with 2 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 | 2.861e-06 | 3.3379e-06 | 3.8147e-06 | 0.0 | 0.01 +Comm | 0.00013399 | 0.00013685 | 0.00013971 | 0.0 | 0.33 +Output | 8.6784e-05 | 0.00011206 | 0.00013733 | 0.0 | 0.27 +Modify | 0.040948 | 0.04103 | 0.041112 | 0.0 | 98.49 +Other | | 0.0003769 | | | 0.90 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.g++.1 b/examples/message/log.28Aug18.message.g++.1 new file mode 100644 index 00000000000..c06af4e0d15 --- /dev/null +++ b/examples/message/log.28Aug18.message.g++.1 @@ -0,0 +1,85 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - no client/server mode + +variable x index 5 +variable y index 5 +variable z index 5 + +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 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000682831 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +thermo 10 +run 50 +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 = 6 6 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.143 | 3.143 | 3.143 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 + 10 1.1347688 -6.3153532 0 -4.6166043 -2.6072847 + 20 0.628166 -5.5624945 0 -4.62213 1.0186262 + 30 0.73767593 -5.7297655 0 -4.6254647 0.49629637 + 40 0.69517962 -5.6660345 0 -4.6253506 0.69303877 + 50 0.70150496 -5.6761362 0 -4.6259832 0.59551518 +Loop time of 0.039681 on 1 procs for 50 steps with 500 atoms + +Performance: 544341.699 tau/day, 1260.050 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.029993 | 0.029993 | 0.029993 | 0.0 | 75.59 +Neigh | 0.0073051 | 0.0073051 | 0.0073051 | 0.0 | 18.41 +Comm | 0.0012736 | 0.0012736 | 0.0012736 | 0.0 | 3.21 +Output | 0.00012803 | 0.00012803 | 0.00012803 | 0.0 | 0.32 +Modify | 0.00053287 | 0.00053287 | 0.00053287 | 0.0 | 1.34 +Other | | 0.000448 | | | 1.13 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1946 ave 1946 max 1946 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18820 ave 18820 max 18820 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18820 +Ave neighs/atom = 37.64 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.g++.4 b/examples/message/log.28Aug18.message.g++.4 new file mode 100644 index 00000000000..695b51f166e --- /dev/null +++ b/examples/message/log.28Aug18.message.g++.4 @@ -0,0 +1,85 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - no client/server mode + +variable x index 5 +variable y index 5 +variable z index 5 + +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 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000656843 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +thermo 10 +run 50 +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 = 6 6 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.109 | 3.109 | 3.109 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 + 10 1.1347688 -6.3153532 0 -4.6166043 -2.6072847 + 20 0.628166 -5.5624945 0 -4.62213 1.0186262 + 30 0.73767593 -5.7297655 0 -4.6254647 0.49629637 + 40 0.69517962 -5.6660345 0 -4.6253506 0.69303877 + 50 0.70150496 -5.6761362 0 -4.6259832 0.59551518 +Loop time of 0.0131519 on 4 procs for 50 steps with 500 atoms + +Performance: 1642350.242 tau/day, 3801.737 timesteps/s +97.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.006074 | 0.0065379 | 0.0072589 | 0.6 | 49.71 +Neigh | 0.0014219 | 0.0015552 | 0.0017018 | 0.3 | 11.82 +Comm | 0.003546 | 0.0043943 | 0.0049584 | 0.8 | 33.41 +Output | 0.000108 | 0.00012845 | 0.00016999 | 0.0 | 0.98 +Modify | 0.00014353 | 0.00014949 | 0.00015569 | 0.0 | 1.14 +Other | | 0.0003865 | | | 2.94 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Nghost: 1091 ave 1094 max 1089 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Neighs: 4705 ave 4849 max 4648 min +Histogram: 2 1 0 0 0 0 0 0 0 1 + +Total # of neighbors = 18820 +Ave neighs/atom = 37.64 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.file.g++.1 b/examples/message/log.28Aug18.message.server.file.g++.1 new file mode 100644 index 00000000000..cf1418d3c5f --- /dev/null +++ b/examples/message/log.28Aug18.message.server.file.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md file tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.server.file.g++.4 b/examples/message/log.28Aug18.message.server.file.g++.4 new file mode 100644 index 00000000000..c233bad6925 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.file.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md file tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.server.mpione.g++.1 b/examples/message/log.28Aug18.message.server.mpione.g++.1 new file mode 100644 index 00000000000..81e04aa9230 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpione.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.mpione.g++.4 b/examples/message/log.28Aug18.message.server.mpione.g++.4 new file mode 100644 index 00000000000..a185cb1c29f --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpione.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.mpitwo.g++.1 b/examples/message/log.28Aug18.message.server.mpitwo.g++.1 new file mode 100644 index 00000000000..973a08eb6a5 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpitwo.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.mpitwo.g++.4 b/examples/message/log.28Aug18.message.server.mpitwo.g++.4 new file mode 100644 index 00000000000..9e76e52d903 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpitwo.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.zmq.g++.1 b/examples/message/log.28Aug18.message.server.zmq.g++.1 new file mode 100644 index 00000000000..ce5729878b3 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.zmq.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.zmq.g++.4 b/examples/message/log.28Aug18.message.server.zmq.g++.4 new file mode 100644 index 00000000000..b3201da4dad --- /dev/null +++ b/examples/message/log.28Aug18.message.server.zmq.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 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 +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpione.g++.1 b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.1 new file mode 100644 index 00000000000..a290ec307bb --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +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.000485897 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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +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 = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0086399 0 1.3760711 6.8772078 0.61567613 + 2000 1.0707188 0 1.3744107 6.628097 1.2313523 + 3000 1.0627515 0 1.310096 6.1647179 1.8470284 + 4000 0.94091054 0 1.268976 6.4723215 2.4627045 + 5000 1.0218949 0 1.2430242 5.6945977 3.0783806 + 6000 0.98649481 0 1.1997565 5.2870413 3.6940568 + 7000 0.9047957 0 1.1461262 5.9291636 4.3097329 + 8000 0.85697614 0 1.0437412 5.0652097 4.925409 + 9000 0.84208329 0 1.109218 6.1749808 5.5410852 + 10000 0.86418108 0 1.1594773 6.2581867 6.1567613 + 11000 0.95136356 0 1.1650901 5.8389085 6.7724374 + 12000 0.94571583 0 1.2210342 6.2498816 7.3881135 + 13000 0.95994288 0 1.2172042 5.9608165 -7.3881135 + 14000 0.99053999 0 1.2925597 6.9994446 -6.7724374 + 15000 1.0316726 0 1.3346023 6.6902672 -6.1567613 + 16000 0.99537481 0 1.3227696 7.0301123 -5.5410852 + 17000 1.0306843 0 1.3101457 6.4750102 -4.925409 + 18000 1.071154 0 1.2947547 5.695888 -4.3097329 + 19000 0.97120752 0 1.3035465 7.3945362 -3.6940568 + 20000 0.97198994 0 1.2244663 6.0047605 -3.0783806 + 21000 0.97943545 0 1.2393394 6.3871012 -2.4627045 + 22000 0.98550707 0 1.1768148 5.019967 -1.8470284 + 23000 0.96920052 0 1.1730698 5.7944947 -1.2313523 + 24000 0.94069959 0 1.184119 5.8434876 -0.61567613 + 25000 0.91569312 0 1.1642118 5.668997 0 + 26000 0.98882932 0 1.1999248 5.0115507 0.61567613 + 27000 0.8972608 0 1.2556546 7.0837158 1.2313523 + 28000 0.93554756 0 1.2221911 5.9302841 1.8470284 + 29000 0.97894608 0 1.2168736 5.5766766 2.4627045 + 30000 0.97877055 0 1.2575839 6.4308887 3.0783806 + 31000 1.0002387 0 1.2338069 5.3873124 3.6940568 + 32000 0.89608618 0 1.2382021 6.7892204 4.3097329 + 33000 0.87439302 0 1.2252635 7.078134 4.925409 + 34000 1.076102 0 1.2991393 5.5556892 5.5410852 + 35000 1.0018689 0 1.272105 6.1320483 6.1567613 + 36000 0.93327214 0 1.2428039 7.0030867 6.7724374 + 37000 1.0770236 0 1.3002931 5.4996076 7.3881135 + 38000 0.98715132 0 1.215562 5.5958335 -7.3881135 + 39000 0.95028417 0 1.2566706 6.4133713 -6.7724374 + 40000 1.0445585 0 1.241151 5.3589806 -6.1567613 + 41000 0.93799713 0 1.2109086 6.4957845 -5.5410852 + 42000 0.99231038 0 1.2228781 5.9363471 -4.925409 + 43000 0.97913815 0 1.1854842 5.8837987 -4.3097329 + 44000 0.86748838 0 1.1616201 6.8991278 -3.6940568 + 45000 0.96284421 0 1.1549383 5.1226785 -3.0783806 + 46000 0.98701623 0 1.170581 4.9719567 -2.4627045 + 47000 0.92618683 0 1.2146576 6.7100075 -1.8470284 + 48000 1.0092593 0 1.2523988 5.7067864 -1.2313523 + 49000 1.0187472 0 1.271608 5.3355092 -0.61567613 + 50000 1.0194881 0 1.2831094 6.2449759 0 +Loop time of 1.74559 on 1 procs for 50000 steps with 160 atoms + +Performance: 12374053.445 tau/day, 28643.642 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 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0020533 | 0.0020533 | 0.0020533 | 0.0 | 0.12 +Comm | 0.015517 | 0.015517 | 0.015517 | 0.0 | 0.89 +Output | 0.00052404 | 0.00052404 | 0.00052404 | 0.0 | 0.03 +Modify | 1.6784 | 1.6784 | 1.6784 | 0.0 | 96.15 +Other | | 0.04905 | | | 2.81 + +Nlocal: 160 ave 160 max 160 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: 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 = 5270 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpione.g++.2 b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.2 new file mode 100644 index 00000000000..0089732355c --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.2 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +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 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000453949 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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +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 = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0876599 0 1.3637783 6.063363 0.61567613 + 2000 1.0722996 0 1.4108622 7.0518942 1.2313523 + 3000 1.0580774 0 1.3845895 6.0395275 1.8470284 + 4000 1.0068006 0 1.3804387 7.0944598 2.4627045 + 5000 0.95391814 0 1.2578438 6.1878831 3.0783806 + 6000 0.93492945 0 1.2711287 7.0440517 3.6940568 + 7000 0.94107853 0 1.2384371 6.1438077 4.3097329 + 8000 0.89711744 0 1.145748 6.3558305 4.925409 + 9000 0.90190304 0 1.0860684 4.957098 5.5410852 + 10000 0.84255749 0 1.0376892 5.2351795 6.1567613 + 11000 0.90250882 0 1.0497695 4.3844838 6.7724374 + 12000 0.83461274 0 1.0281949 5.1534361 7.3881135 + 13000 0.80315331 0 1.0226333 5.757222 -7.3881135 + 14000 0.81820939 0 0.99276466 4.6943725 -6.7724374 + 15000 0.8239631 0 1.0408289 5.1669006 -6.1567613 + 16000 0.88908894 0 1.1554855 6.3510278 -5.5410852 + 17000 0.98268136 0 1.2086981 5.6302847 -4.925409 + 18000 1.0098162 0 1.3687676 7.5243587 -4.3097329 + 19000 1.0795086 0 1.4562691 7.639418 -3.6940568 + 20000 1.1932155 0 1.5278988 7.0668432 -3.0783806 + 21000 1.2424296 0 1.6048792 7.959585 -2.4627045 + 22000 1.297169 0 1.7421262 8.9432388 -1.8470284 + 23000 1.2863494 0 1.7236774 8.3584973 -1.2313523 + 24000 1.4084347 0 1.7370339 7.2729078 -0.61567613 + 25000 1.3339728 0 1.6883255 7.529098 0 + 26000 1.1483243 0 1.5155578 7.3869994 0.61567613 + 27000 1.1372606 0 1.4368323 7.0580136 1.2313523 + 28000 1.0518579 0 1.355311 6.478857 1.8470284 + 29000 1.0581145 0 1.2535509 5.3697479 2.4627045 + 30000 0.93612564 0 1.185532 5.5520142 3.0783806 + 31000 0.94387516 0 1.1716454 5.8655485 3.6940568 + 32000 0.83953515 0 1.0737746 5.5551953 4.3097329 + 33000 0.84862926 0 1.0564042 5.7795428 4.925409 + 34000 0.83621877 0 1.079387 5.7514243 5.5410852 + 35000 0.86938506 0 1.031783 4.5897825 6.1567613 + 36000 0.88990609 0 1.0807597 5.3751744 6.7724374 + 37000 0.89534631 0 1.1238882 5.2400355 7.3881135 + 38000 0.98545003 0 1.2121125 5.7783854 -7.3881135 + 39000 0.96737778 0 1.2472934 6.1139 -6.7724374 + 40000 1.0664194 0 1.2956811 5.7353661 -6.1567613 + 41000 1.0681494 0 1.3269435 6.3102722 -5.5410852 + 42000 1.0875422 0 1.3963739 7.1208066 -4.925409 + 43000 1.0968173 0 1.3388062 6.1704339 -4.3097329 + 44000 1.1182109 0 1.3773214 7.0872686 -3.6940568 + 45000 1.1243261 0 1.432186 6.884782 -3.0783806 + 46000 1.039713 0 1.4389721 7.5585257 -2.4627045 + 47000 1.0816108 0 1.4100361 6.4611126 -1.8470284 + 48000 0.97637127 0 1.3605389 7.3992744 -1.2313523 + 49000 1.0361978 0 1.2721873 5.8166109 -0.61567613 + 50000 0.92367087 0 1.1875669 6.4685214 0 +Loop time of 2.82785 on 2 procs for 50000 steps with 160 atoms + +Performance: 7638300.565 tau/day, 17681.251 timesteps/s +100.0% CPU use with 2 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.0011888 | 0.0012611 | 0.0013335 | 0.2 | 0.04 +Comm | 0.024838 | 0.025075 | 0.025312 | 0.1 | 0.89 +Output | 0.0003581 | 0.00052559 | 0.00069308 | 0.0 | 0.02 +Modify | 2.7209 | 2.7263 | 2.7318 | 0.3 | 96.41 +Other | | 0.07465 | | | 2.64 + +Nlocal: 80 ave 80 max 80 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 5257 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.1 b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.1 new file mode 100644 index 00000000000..814b3df1aa8 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +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.000543118 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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +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 = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0086399 0 1.3760711 6.8772078 0.61567613 + 2000 1.0707188 0 1.3744107 6.628097 1.2313523 + 3000 1.0627515 0 1.310096 6.1647179 1.8470284 + 4000 0.94091054 0 1.268976 6.4723215 2.4627045 + 5000 1.0218949 0 1.2430242 5.6945977 3.0783806 + 6000 0.98649481 0 1.1997565 5.2870413 3.6940568 + 7000 0.9047957 0 1.1461262 5.9291636 4.3097329 + 8000 0.85697614 0 1.0437412 5.0652097 4.925409 + 9000 0.84208329 0 1.109218 6.1749808 5.5410852 + 10000 0.86418108 0 1.1594773 6.2581867 6.1567613 + 11000 0.95136356 0 1.1650901 5.8389085 6.7724374 + 12000 0.94571583 0 1.2210342 6.2498816 7.3881135 + 13000 0.95994288 0 1.2172042 5.9608165 -7.3881135 + 14000 0.99053999 0 1.2925597 6.9994446 -6.7724374 + 15000 1.0316726 0 1.3346023 6.6902672 -6.1567613 + 16000 0.99537481 0 1.3227696 7.0301123 -5.5410852 + 17000 1.0306843 0 1.3101457 6.4750102 -4.925409 + 18000 1.071154 0 1.2947547 5.695888 -4.3097329 + 19000 0.97120752 0 1.3035465 7.3945362 -3.6940568 + 20000 0.97198994 0 1.2244663 6.0047605 -3.0783806 + 21000 0.97943545 0 1.2393394 6.3871012 -2.4627045 + 22000 0.98550707 0 1.1768148 5.019967 -1.8470284 + 23000 0.96920052 0 1.1730698 5.7944947 -1.2313523 + 24000 0.94069959 0 1.184119 5.8434876 -0.61567613 + 25000 0.91569312 0 1.1642118 5.668997 0 + 26000 0.98882932 0 1.1999248 5.0115507 0.61567613 + 27000 0.8972608 0 1.2556546 7.0837158 1.2313523 + 28000 0.93554756 0 1.2221911 5.9302841 1.8470284 + 29000 0.97894608 0 1.2168736 5.5766766 2.4627045 + 30000 0.97877055 0 1.2575839 6.4308887 3.0783806 + 31000 1.0002387 0 1.2338069 5.3873124 3.6940568 + 32000 0.89608618 0 1.2382021 6.7892204 4.3097329 + 33000 0.87439302 0 1.2252635 7.078134 4.925409 + 34000 1.076102 0 1.2991393 5.5556892 5.5410852 + 35000 1.0018689 0 1.272105 6.1320483 6.1567613 + 36000 0.93327214 0 1.2428039 7.0030867 6.7724374 + 37000 1.0770236 0 1.3002931 5.4996076 7.3881135 + 38000 0.98715132 0 1.215562 5.5958335 -7.3881135 + 39000 0.95028417 0 1.2566706 6.4133713 -6.7724374 + 40000 1.0445585 0 1.241151 5.3589806 -6.1567613 + 41000 0.93799713 0 1.2109086 6.4957845 -5.5410852 + 42000 0.99231038 0 1.2228781 5.9363471 -4.925409 + 43000 0.97913815 0 1.1854842 5.8837987 -4.3097329 + 44000 0.86748838 0 1.1616201 6.8991278 -3.6940568 + 45000 0.96284421 0 1.1549383 5.1226785 -3.0783806 + 46000 0.98701623 0 1.170581 4.9719567 -2.4627045 + 47000 0.92618683 0 1.2146576 6.7100075 -1.8470284 + 48000 1.0092593 0 1.2523988 5.7067864 -1.2313523 + 49000 1.0187472 0 1.271608 5.3355092 -0.61567613 + 50000 1.0194881 0 1.2831094 6.2449759 0 +Loop time of 4.80282 on 1 procs for 50000 steps with 160 atoms + +Performance: 4497356.047 tau/day, 10410.546 timesteps/s +50.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 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0032325 | 0.0032325 | 0.0032325 | 0.0 | 0.07 +Comm | 0.033613 | 0.033613 | 0.033613 | 0.0 | 0.70 +Output | 0.00089812 | 0.00089812 | 0.00089812 | 0.0 | 0.02 +Modify | 4.6706 | 4.6706 | 4.6706 | 0.0 | 97.25 +Other | | 0.09449 | | | 1.97 + +Nlocal: 160 ave 160 max 160 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: 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 = 5270 +Dangerous builds = 0 +Total wall time: 0:00:04 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.2 b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.2 new file mode 100644 index 00000000000..7c172d37279 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.2 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +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 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000574827 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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +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 = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0876599 0 1.3637783 6.063363 0.61567613 + 2000 1.0722996 0 1.4108622 7.0518942 1.2313523 + 3000 1.0580774 0 1.3845895 6.0395275 1.8470284 + 4000 1.0068006 0 1.3804387 7.0944598 2.4627045 + 5000 0.95391814 0 1.2578438 6.1878831 3.0783806 + 6000 0.93492945 0 1.2711287 7.0440517 3.6940568 + 7000 0.94107853 0 1.2384371 6.1438077 4.3097329 + 8000 0.89711744 0 1.145748 6.3558305 4.925409 + 9000 0.90190304 0 1.0860684 4.957098 5.5410852 + 10000 0.84255749 0 1.0376892 5.2351795 6.1567613 + 11000 0.90250882 0 1.0497695 4.3844838 6.7724374 + 12000 0.83461274 0 1.0281949 5.1534361 7.3881135 + 13000 0.80315331 0 1.0226333 5.757222 -7.3881135 + 14000 0.81820939 0 0.99276466 4.6943725 -6.7724374 + 15000 0.8239631 0 1.0408289 5.1669006 -6.1567613 + 16000 0.88908894 0 1.1554855 6.3510278 -5.5410852 + 17000 0.98268136 0 1.2086981 5.6302847 -4.925409 + 18000 1.0098162 0 1.3687676 7.5243587 -4.3097329 + 19000 1.0795086 0 1.4562691 7.639418 -3.6940568 + 20000 1.1932155 0 1.5278988 7.0668432 -3.0783806 + 21000 1.2424296 0 1.6048792 7.959585 -2.4627045 + 22000 1.297169 0 1.7421262 8.9432388 -1.8470284 + 23000 1.2863494 0 1.7236774 8.3584973 -1.2313523 + 24000 1.4084347 0 1.7370339 7.2729078 -0.61567613 + 25000 1.3339728 0 1.6883255 7.529098 0 + 26000 1.1483243 0 1.5155578 7.3869994 0.61567613 + 27000 1.1372606 0 1.4368323 7.0580136 1.2313523 + 28000 1.0518579 0 1.355311 6.478857 1.8470284 + 29000 1.0581145 0 1.2535509 5.3697479 2.4627045 + 30000 0.93612564 0 1.185532 5.5520142 3.0783806 + 31000 0.94387516 0 1.1716454 5.8655485 3.6940568 + 32000 0.83953515 0 1.0737746 5.5551953 4.3097329 + 33000 0.84862926 0 1.0564042 5.7795428 4.925409 + 34000 0.83621877 0 1.079387 5.7514243 5.5410852 + 35000 0.86938506 0 1.031783 4.5897825 6.1567613 + 36000 0.88990609 0 1.0807597 5.3751744 6.7724374 + 37000 0.89534631 0 1.1238882 5.2400355 7.3881135 + 38000 0.98545003 0 1.2121125 5.7783854 -7.3881135 + 39000 0.96737778 0 1.2472934 6.1139 -6.7724374 + 40000 1.0664194 0 1.2956811 5.7353661 -6.1567613 + 41000 1.0681494 0 1.3269435 6.3102722 -5.5410852 + 42000 1.0875422 0 1.3963739 7.1208066 -4.925409 + 43000 1.0968173 0 1.3388062 6.1704339 -4.3097329 + 44000 1.1182109 0 1.3773214 7.0872686 -3.6940568 + 45000 1.1243261 0 1.432186 6.884782 -3.0783806 + 46000 1.039713 0 1.4389721 7.5585257 -2.4627045 + 47000 1.0816108 0 1.4100361 6.4611126 -1.8470284 + 48000 0.97637127 0 1.3605389 7.3992744 -1.2313523 + 49000 1.0361978 0 1.2721873 5.8166109 -0.61567613 + 50000 0.92367087 0 1.1875669 6.4685214 0 +Loop time of 5.66536 on 2 procs for 50000 steps with 160 atoms + +Performance: 3812643.232 tau/day, 8825.563 timesteps/s +48.1% CPU use with 2 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.0012836 | 0.0015377 | 0.0017917 | 0.6 | 0.03 +Comm | 0.037211 | 0.037922 | 0.038633 | 0.4 | 0.67 +Output | 0.00052023 | 0.00073683 | 0.00095344 | 0.0 | 0.01 +Modify | 5.5101 | 5.5105 | 5.511 | 0.0 | 97.27 +Other | | 0.1146 | | | 2.02 + +Nlocal: 80 ave 80 max 80 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 5257 +Dangerous builds = 0 +Total wall time: 0:00:06 diff --git a/examples/message/log.28Aug18.message.tilt.client.zmq.g++.1 b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.1 new file mode 100644 index 00000000000..f5e2f220cd8 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +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.000530005 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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +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 = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0086399 0 1.3760711 6.8772078 0.61567613 + 2000 1.0707188 0 1.3744107 6.628097 1.2313523 + 3000 1.0627515 0 1.310096 6.1647179 1.8470284 + 4000 0.94091054 0 1.268976 6.4723215 2.4627045 + 5000 1.0218949 0 1.2430242 5.6945977 3.0783806 + 6000 0.98649481 0 1.1997565 5.2870413 3.6940568 + 7000 0.9047957 0 1.1461262 5.9291636 4.3097329 + 8000 0.85697614 0 1.0437412 5.0652097 4.925409 + 9000 0.84208329 0 1.109218 6.1749808 5.5410852 + 10000 0.86418108 0 1.1594773 6.2581867 6.1567613 + 11000 0.95136356 0 1.1650901 5.8389085 6.7724374 + 12000 0.94571583 0 1.2210342 6.2498816 7.3881135 + 13000 0.95994288 0 1.2172042 5.9608165 -7.3881135 + 14000 0.99053999 0 1.2925597 6.9994446 -6.7724374 + 15000 1.0316726 0 1.3346023 6.6902672 -6.1567613 + 16000 0.99537481 0 1.3227696 7.0301123 -5.5410852 + 17000 1.0306843 0 1.3101457 6.4750102 -4.925409 + 18000 1.071154 0 1.2947547 5.695888 -4.3097329 + 19000 0.97120752 0 1.3035465 7.3945362 -3.6940568 + 20000 0.97198994 0 1.2244663 6.0047605 -3.0783806 + 21000 0.97943545 0 1.2393394 6.3871012 -2.4627045 + 22000 0.98550707 0 1.1768148 5.019967 -1.8470284 + 23000 0.96920052 0 1.1730698 5.7944947 -1.2313523 + 24000 0.94069959 0 1.184119 5.8434876 -0.61567613 + 25000 0.91569312 0 1.1642118 5.668997 0 + 26000 0.98882932 0 1.1999248 5.0115507 0.61567613 + 27000 0.8972608 0 1.2556546 7.0837158 1.2313523 + 28000 0.93554756 0 1.2221911 5.9302841 1.8470284 + 29000 0.97894608 0 1.2168736 5.5766766 2.4627045 + 30000 0.97877055 0 1.2575839 6.4308887 3.0783806 + 31000 1.0002387 0 1.2338069 5.3873124 3.6940568 + 32000 0.89608618 0 1.2382021 6.7892204 4.3097329 + 33000 0.87439302 0 1.2252635 7.078134 4.925409 + 34000 1.076102 0 1.2991393 5.5556892 5.5410852 + 35000 1.0018689 0 1.272105 6.1320483 6.1567613 + 36000 0.93327214 0 1.2428039 7.0030867 6.7724374 + 37000 1.0770236 0 1.3002931 5.4996076 7.3881135 + 38000 0.98715132 0 1.215562 5.5958335 -7.3881135 + 39000 0.95028417 0 1.2566706 6.4133713 -6.7724374 + 40000 1.0445585 0 1.241151 5.3589806 -6.1567613 + 41000 0.93799713 0 1.2109086 6.4957845 -5.5410852 + 42000 0.99231038 0 1.2228781 5.9363471 -4.925409 + 43000 0.97913815 0 1.1854842 5.8837987 -4.3097329 + 44000 0.86748838 0 1.1616201 6.8991278 -3.6940568 + 45000 0.96284421 0 1.1549383 5.1226785 -3.0783806 + 46000 0.98701623 0 1.170581 4.9719567 -2.4627045 + 47000 0.92618683 0 1.2146576 6.7100075 -1.8470284 + 48000 1.0092593 0 1.2523988 5.7067864 -1.2313523 + 49000 1.0187472 0 1.271608 5.3355092 -0.61567613 + 50000 1.0194881 0 1.2831094 6.2449759 0 +Loop time of 12.9652 on 1 procs for 50000 steps with 160 atoms + +Performance: 1666000.147 tau/day, 3856.482 timesteps/s +23.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 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0018659 | 0.0018659 | 0.0018659 | 0.0 | 0.01 +Comm | 0.020679 | 0.020679 | 0.020679 | 0.0 | 0.16 +Output | 0.00052547 | 0.00052547 | 0.00052547 | 0.0 | 0.00 +Modify | 12.871 | 12.871 | 12.871 | 0.0 | 99.28 +Other | | 0.07062 | | | 0.54 + +Nlocal: 160 ave 160 max 160 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: 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 = 5270 +Dangerous builds = 0 +Total wall time: 0:00:12 diff --git a/examples/message/log.28Aug18.message.tilt.client.zmq.g++.2 b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.2 new file mode 100644 index 00000000000..8fc570f5da7 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.2 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +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 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000673056 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 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +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 + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +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 = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0876599 0 1.3637783 6.063363 0.61567613 + 2000 1.0722996 0 1.4108622 7.0518942 1.2313523 + 3000 1.0580774 0 1.3845895 6.0395275 1.8470284 + 4000 1.0068006 0 1.3804387 7.0944598 2.4627045 + 5000 0.95391814 0 1.2578438 6.1878831 3.0783806 + 6000 0.93492945 0 1.2711287 7.0440517 3.6940568 + 7000 0.94107853 0 1.2384371 6.1438077 4.3097329 + 8000 0.89711744 0 1.145748 6.3558305 4.925409 + 9000 0.90190304 0 1.0860684 4.957098 5.5410852 + 10000 0.84255749 0 1.0376892 5.2351795 6.1567613 + 11000 0.90250882 0 1.0497695 4.3844838 6.7724374 + 12000 0.83461274 0 1.0281949 5.1534361 7.3881135 + 13000 0.80315331 0 1.0226333 5.757222 -7.3881135 + 14000 0.81820939 0 0.99276466 4.6943725 -6.7724374 + 15000 0.8239631 0 1.0408289 5.1669006 -6.1567613 + 16000 0.88908894 0 1.1554855 6.3510278 -5.5410852 + 17000 0.98268136 0 1.2086981 5.6302847 -4.925409 + 18000 1.0098162 0 1.3687676 7.5243587 -4.3097329 + 19000 1.0795086 0 1.4562691 7.639418 -3.6940568 + 20000 1.1932155 0 1.5278988 7.0668432 -3.0783806 + 21000 1.2424296 0 1.6048792 7.959585 -2.4627045 + 22000 1.297169 0 1.7421262 8.9432388 -1.8470284 + 23000 1.2863494 0 1.7236774 8.3584973 -1.2313523 + 24000 1.4084347 0 1.7370339 7.2729078 -0.61567613 + 25000 1.3339728 0 1.6883255 7.529098 0 + 26000 1.1483243 0 1.5155578 7.3869994 0.61567613 + 27000 1.1372606 0 1.4368323 7.0580136 1.2313523 + 28000 1.0518579 0 1.355311 6.478857 1.8470284 + 29000 1.0581145 0 1.2535509 5.3697479 2.4627045 + 30000 0.93612564 0 1.185532 5.5520142 3.0783806 + 31000 0.94387516 0 1.1716454 5.8655485 3.6940568 + 32000 0.83953515 0 1.0737746 5.5551953 4.3097329 + 33000 0.84862926 0 1.0564042 5.7795428 4.925409 + 34000 0.83621877 0 1.079387 5.7514243 5.5410852 + 35000 0.86938506 0 1.031783 4.5897825 6.1567613 + 36000 0.88990609 0 1.0807597 5.3751744 6.7724374 + 37000 0.89534631 0 1.1238882 5.2400355 7.3881135 + 38000 0.98545003 0 1.2121125 5.7783854 -7.3881135 + 39000 0.96737778 0 1.2472934 6.1139 -6.7724374 + 40000 1.0664194 0 1.2956811 5.7353661 -6.1567613 + 41000 1.0681494 0 1.3269435 6.3102722 -5.5410852 + 42000 1.0875422 0 1.3963739 7.1208066 -4.925409 + 43000 1.0968173 0 1.3388062 6.1704339 -4.3097329 + 44000 1.1182109 0 1.3773214 7.0872686 -3.6940568 + 45000 1.1243261 0 1.432186 6.884782 -3.0783806 + 46000 1.039713 0 1.4389721 7.5585257 -2.4627045 + 47000 1.0816108 0 1.4100361 6.4611126 -1.8470284 + 48000 0.97637127 0 1.3605389 7.3992744 -1.2313523 + 49000 1.0361978 0 1.2721873 5.8166109 -0.61567613 + 50000 0.92367087 0 1.1875669 6.4685214 0 +Loop time of 13.6129 on 2 procs for 50000 steps with 160 atoms + +Performance: 1586733.497 tau/day, 3672.994 timesteps/s +59.3% CPU use with 2 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.0015125 | 0.0015551 | 0.0015976 | 0.1 | 0.01 +Comm | 0.026598 | 0.028413 | 0.030227 | 1.1 | 0.21 +Output | 0.00046492 | 0.00063884 | 0.00081277 | 0.0 | 0.00 +Modify | 13.465 | 13.483 | 13.501 | 0.5 | 99.04 +Other | | 0.0994 | | | 0.73 + +Nlocal: 80 ave 80 max 80 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +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 +Neighbor list builds = 5257 +Dangerous builds = 0 +Total wall time: 0:00:13 diff --git a/examples/message/log.28Aug18.message.tilt.g++.1 b/examples/message/log.28Aug18.message.tilt.g++.1 new file mode 100644 index 00000000000..3f7cfc9da01 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.g++.1 @@ -0,0 +1,129 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - no client/server mode + +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.000437021 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 check yes + +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 + +thermo_style custom step temp epair etotal press xy + +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 TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.1326992 0.25863754 1.3842573 6.0588079 0.61567613 + 2000 1.0158438 0.33502643 1.3445212 7.2638652 1.2313523 + 3000 1.0968167 0.3149227 1.4048843 7.0653223 1.8470284 + 4000 1.0070993 0.40611915 1.4069241 7.7283521 2.4627045 + 5000 1.1153133 0.2674828 1.3758254 6.2949171 3.0783806 + 6000 1.0170665 0.25843673 1.2691466 6.049412 3.6940568 + 7000 1.0224605 0.20974914 1.2258193 5.5104976 4.3097329 + 8000 0.96149374 0.24035439 1.1958388 5.4179146 4.925409 + 9000 0.87759014 0.2590493 1.1311545 5.8711239 5.5410852 + 10000 0.83791968 0.23477897 1.0674617 5.666904 6.1567613 + 11000 0.87702487 0.22958877 1.1011322 5.9068062 6.7724374 + 12000 0.81507294 0.26375817 1.0737369 5.9166925 7.3881135 + 13000 0.85655284 0.24676491 1.0979643 5.6918734 -7.3881135 + 14000 0.84369293 0.27818471 1.1166046 6.4146184 -6.7724374 + 15000 0.90052173 0.19836095 1.0932544 5.2690913 -6.1567613 + 16000 0.83836874 0.26921637 1.1023453 5.9579526 -5.5410852 + 17000 0.90492897 0.21933098 1.1186041 5.6042194 -4.925409 + 18000 0.90113412 0.24880908 1.1443111 6.0634846 -4.3097329 + 19000 1.0160445 0.17252962 1.1822239 5.3149334 -3.6940568 + 20000 0.96217234 0.2414377 1.1975965 5.476653 -3.0783806 + 21000 0.98229664 0.27569118 1.2518485 5.9340174 -2.4627045 + 22000 1.0551763 0.26997615 1.3185576 6.2094112 -1.8470284 + 23000 1.051999 0.34076639 1.3861904 7.082385 -1.2313523 + 24000 1.1350071 0.23701844 1.3649317 6.1829742 -0.61567613 + 25000 1.0946409 0.33366032 1.4214597 7.1907559 0 + 26000 1.1511799 0.24626808 1.3902531 5.8469984 0.61567613 + 27000 1.1009203 0.25653085 1.3505704 6.1504287 1.2313523 + 28000 1.0521302 0.2876798 1.3332342 5.9906187 1.8470284 + 29000 1.0518465 0.21853 1.2638025 5.6577549 2.4627045 + 30000 0.97264625 0.28758145 1.2541487 6.5769804 3.0783806 + 31000 1.0133579 0.31575837 1.3227828 6.6650893 3.6940568 + 32000 1.0714324 0.28757036 1.3523063 6.2682059 4.3097329 + 33000 1.0739451 0.28062459 1.3478575 6.6862746 4.925409 + 34000 1.0056867 0.38289586 1.382297 7.1120131 5.5410852 + 35000 1.0911349 0.26370939 1.3480247 6.1476048 6.1567613 + 36000 1.0618618 0.28269593 1.3379211 6.9414608 6.7724374 + 37000 1.0704991 0.29974994 1.3635585 7.0834346 7.3881135 + 38000 1.1087507 0.2682201 1.3700411 5.8506019 -7.3881135 + 39000 1.1303733 0.22362416 1.3469326 5.2500269 -6.7724374 + 40000 1.0174248 0.28956571 1.3006316 6.4491571 -6.1567613 + 41000 0.95981887 0.29162143 1.2454414 6.4658646 -5.5410852 + 42000 0.88302144 0.30432252 1.1818251 6.7401923 -4.925409 + 43000 0.93164419 0.25110308 1.1769245 5.9067383 -4.3097329 + 44000 0.98352598 0.23322873 1.2106077 5.5606585 -3.6940568 + 45000 1.0247245 0.26503082 1.2833508 6.533394 -3.0783806 + 46000 0.93004532 0.32277782 1.2470104 6.4689179 -2.4627045 + 47000 1.0653176 0.29185413 1.3505135 6.9534569 -1.8470284 + 48000 1.0401524 0.3420245 1.3756759 6.8016042 -1.2313523 + 49000 1.0023407 0.31833091 1.314407 6.7385662 -0.61567613 + 50000 1.0566272 0.28657142 1.3365947 6.261203 0 +Loop time of 1.15672 on 1 procs for 50000 steps with 160 atoms + +Performance: 18673426.371 tau/day, 43225.524 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.19267 | 0.19267 | 0.19267 | 0.0 | 16.66 +Neigh | 0.15156 | 0.15156 | 0.15156 | 0.0 | 13.10 +Comm | 0.044569 | 0.044569 | 0.044569 | 0.0 | 3.85 +Output | 0.00057936 | 0.00057936 | 0.00057936 | 0.0 | 0.05 +Modify | 0.71051 | 0.71051 | 0.71051 | 0.0 | 61.42 +Other | | 0.05684 | | | 4.91 + +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/message/log.28Aug18.message.tilt.g++.4 b/examples/message/log.28Aug18.message.tilt.g++.4 new file mode 100644 index 00000000000..74061463f6b --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.g++.4 @@ -0,0 +1,129 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - no client/server mode + +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.000396967 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 check yes + +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 + +thermo_style custom step temp epair etotal press xy + +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 TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.1326992 0.25863754 1.3842573 6.0588079 0.61567613 + 2000 1.0158438 0.33502643 1.3445212 7.2638652 1.2313523 + 3000 1.0968167 0.3149227 1.4048843 7.0653223 1.8470284 + 4000 1.0070993 0.40611915 1.4069241 7.7283521 2.4627045 + 5000 1.1153133 0.2674828 1.3758254 6.2949171 3.0783806 + 6000 1.0170665 0.25843673 1.2691466 6.049412 3.6940568 + 7000 1.0224605 0.20974914 1.2258193 5.5104976 4.3097329 + 8000 0.96149374 0.24035439 1.1958388 5.4179146 4.925409 + 9000 0.87759014 0.2590493 1.1311545 5.8711239 5.5410852 + 10000 0.83791968 0.23477897 1.0674617 5.666904 6.1567613 + 11000 0.87702487 0.22958877 1.1011322 5.9068062 6.7724374 + 12000 0.81507294 0.26375817 1.0737369 5.9166925 7.3881135 + 13000 0.85655284 0.24676491 1.0979643 5.6918734 -7.3881135 + 14000 0.84369293 0.27818471 1.1166046 6.4146184 -6.7724374 + 15000 0.90052173 0.19836095 1.0932544 5.2690913 -6.1567613 + 16000 0.83836874 0.26921637 1.1023453 5.9579526 -5.5410852 + 17000 0.90492897 0.21933098 1.1186041 5.6042194 -4.925409 + 18000 0.90113412 0.24880908 1.1443111 6.0634846 -4.3097329 + 19000 1.0160445 0.17252962 1.1822239 5.3149334 -3.6940568 + 20000 0.96217234 0.2414377 1.1975965 5.476653 -3.0783806 + 21000 0.98229664 0.27569118 1.2518485 5.9340174 -2.4627045 + 22000 1.0551763 0.26997615 1.3185576 6.2094112 -1.8470284 + 23000 1.051999 0.34076639 1.3861904 7.082385 -1.2313523 + 24000 1.1350071 0.23701844 1.3649317 6.1829742 -0.61567613 + 25000 1.0946409 0.33366032 1.4214597 7.1907559 0 + 26000 1.1511799 0.24626808 1.3902531 5.8469984 0.61567613 + 27000 1.1009203 0.25653085 1.3505704 6.1504287 1.2313523 + 28000 1.0521302 0.2876798 1.3332342 5.9906187 1.8470284 + 29000 1.0518465 0.21853 1.2638025 5.6577549 2.4627045 + 30000 0.97264625 0.28758145 1.2541487 6.5769804 3.0783806 + 31000 1.0133579 0.31575837 1.3227828 6.6650893 3.6940568 + 32000 1.0714324 0.28757036 1.3523063 6.2682059 4.3097329 + 33000 1.0739451 0.28062459 1.3478575 6.6862746 4.925409 + 34000 1.0056867 0.38289586 1.382297 7.1120131 5.5410852 + 35000 1.0911349 0.26370939 1.3480247 6.1476048 6.1567613 + 36000 1.0618618 0.28269593 1.3379211 6.9414608 6.7724374 + 37000 1.0704991 0.29974994 1.3635585 7.0834346 7.3881135 + 38000 1.1087507 0.2682201 1.3700411 5.8506019 -7.3881135 + 39000 1.1303733 0.22362416 1.3469326 5.2500269 -6.7724374 + 40000 1.0174248 0.28956571 1.3006316 6.4491571 -6.1567613 + 41000 0.95981887 0.29162143 1.2454414 6.4658646 -5.5410852 + 42000 0.88302144 0.30432252 1.1818251 6.7401923 -4.925409 + 43000 0.93164419 0.25110308 1.1769245 5.9067383 -4.3097329 + 44000 0.98352598 0.23322873 1.2106077 5.5606585 -3.6940568 + 45000 1.0247245 0.26503082 1.2833508 6.533394 -3.0783806 + 46000 0.93004532 0.32277782 1.2470104 6.4689179 -2.4627045 + 47000 1.0653176 0.29185413 1.3505135 6.9534569 -1.8470284 + 48000 1.0401524 0.3420245 1.3756759 6.8016042 -1.2313523 + 49000 1.0023407 0.31833091 1.314407 6.7385662 -0.61567613 + 50000 1.0566272 0.28657142 1.3365947 6.261203 0 +Loop time of 0.92653 on 1 procs for 50000 steps with 160 atoms + +Performance: 23312793.646 tau/day, 53964.800 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.15063 | 0.15063 | 0.15063 | 0.0 | 16.26 +Neigh | 0.11869 | 0.11869 | 0.11869 | 0.0 | 12.81 +Comm | 0.035839 | 0.035839 | 0.035839 | 0.0 | 3.87 +Output | 0.00064468 | 0.00064468 | 0.00064468 | 0.0 | 0.07 +Modify | 0.57422 | 0.57422 | 0.57422 | 0.0 | 61.98 +Other | | 0.0465 | | | 5.02 + +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:00 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpione.g++.1 b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.1 new file mode 100644 index 00000000000..428ff346ad4 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.1 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +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.000438929 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 +Server MD calls = 50001 +Server MD reneighborings 5073 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpione.g++.4 b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.4 new file mode 100644 index 00000000000..3da50163eda --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.4 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +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.000455141 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 2 by 2 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 +Server MD calls = 50001 +Server MD reneighborings 5066 +Total wall time: 0:00:02 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.1 b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.1 new file mode 100644 index 00000000000..fc29a6da63f --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.1 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +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.000521898 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 +Server MD calls = 50001 +Server MD reneighborings 5073 +Total wall time: 0:00:04 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.4 b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.4 new file mode 100644 index 00000000000..758b84fe9d4 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.4 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +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.000378847 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 2 by 2 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 +Server MD calls = 50001 +Server MD reneighborings 5066 +Total wall time: 0:00:06 diff --git a/examples/message/log.28Aug18.message.tilt.server.zmq.g++.1 b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.1 new file mode 100644 index 00000000000..78526ba7489 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.1 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +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.000557184 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 +Server MD calls = 50001 +Server MD reneighborings 5073 +Total wall time: 0:00:12 diff --git a/examples/message/log.28Aug18.message.tilt.server.zmq.g++.4 b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.4 new file mode 100644 index 00000000000..b1ad7684708 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.4 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +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.000586987 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 2 by 2 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 +Server MD calls = 50001 +Server MD reneighborings 5066 +Total wall time: 0:00:13 diff --git a/lib/README b/lib/README index 3c8f46dd0a9..12c27b2a397 100644 --- a/lib/README +++ b/lib/README @@ -35,6 +35,8 @@ linalg set of BLAS and LAPACK routines needed by USER-ATC package from Axel Kohlmeyer (Temple U) meam modified embedded atom method (MEAM) potential, MEAM package from Greg Wagner (Sandia) +message client/server communication library via MPI, sockets, files + from Steve Plimpton (Sandia) molfile hooks to VMD molfile plugins, used by the USER-MOLFILE package from Axel Kohlmeyer (Temple U) and the VMD development team mscg hooks to the MSCG library, used by fix_mscg command diff --git a/lib/message/Install.py b/lib/message/Install.py new file mode 100644 index 00000000000..d3f31c986fb --- /dev/null +++ b/lib/message/Install.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +# Install.py tool to build the CSlib 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-message args="-m" + or: make lib-message args="-s -z" +Syntax from lib dir: python Install.py -m + or: python Install.py -s -z + +specify zero or more options, order does not matter + + -m = parallel build of CSlib library + -s = serial build of CSlib library + -z = build CSlib library with ZMQ socket support, default = no ZMQ support + +Example: + +make lib-message args="-m -z" # build parallel CSlib with ZMQ support +make lib-message args="-s" # build serial CSlib with no ZMQ support +""" + +# 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 + +# parse args + +args = sys.argv[1:] +nargs = len(args) +if nargs == 0: error() + +mpiflag = False +serialflag = False +zmqflag = False + +iarg = 0 +while iarg < nargs: + if args[iarg] == "-m": + mpiflag = True + iarg += 1 + elif args[iarg] == "-s": + serialflag = True + iarg += 1 + elif args[iarg] == "-z": + zmqflag = True + iarg += 1 + else: error() + +if (not mpiflag and not serialflag): + error("Must use either -m or -s flag") + +if (mpiflag and serialflag): + error("Cannot use -m and -s flag at the same time") + +# build CSlib +# copy resulting lib to cslib/src/libmessage.a +# copy appropriate Makefile.lammps.* to Makefile.lammps + +print("Building CSlib ...") +srcdir = fullpath("./cslib/src") + +if mpiflag and zmqflag: + cmd = "cd %s; make lib_parallel" % srcdir +elif mpiflag and not zmqflag: + cmd = "cd %s; make lib_parallel zmq=no" % srcdir +elif not mpiflag and zmqflag: + cmd = "cd %s; make lib_serial" % srcdir +elif not mpiflag and not zmqflag: + cmd = "cd %s; make lib_serial zmq=no" % srcdir + +print(cmd) +txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +print(txt.decode('UTF-8')) + +if mpiflag: cmd = "cd %s; cp libcsmpi.a libmessage.a" % srcdir +else: cmd = "cd %s; cp libcsnompi.a libmessage.a" % srcdir +print(cmd) +txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +print(txt.decode('UTF-8')) + +if zmqflag: cmd = "cp Makefile.lammps.zmq Makefile.lammps" +else: cmd = "cp Makefile.lammps.nozmq Makefile.lammps" +print(cmd) +txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +print(txt.decode('UTF-8')) diff --git a/lib/message/Makefile.lammps.nozmq b/lib/message/Makefile.lammps.nozmq new file mode 100644 index 00000000000..1bb10cc9887 --- /dev/null +++ b/lib/message/Makefile.lammps.nozmq @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +message_SYSINC = +message_SYSLIB = +message_SYSPATH = diff --git a/lib/message/Makefile.lammps.zmq b/lib/message/Makefile.lammps.zmq new file mode 100644 index 00000000000..759f2ce04b9 --- /dev/null +++ b/lib/message/Makefile.lammps.zmq @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +message_SYSINC = +message_SYSLIB = -lzmq +message_SYSPATH = diff --git a/lib/message/README b/lib/message/README new file mode 100644 index 00000000000..dafb94e9eff --- /dev/null +++ b/lib/message/README @@ -0,0 +1,51 @@ +This directory contains the CSlib library which is required +to use the MESSAGE package and its client/server commands +in a LAMMPS input script. + +The CSlib libary is included in the LAMMPS distribution. A fuller +version including documentation and test programs is available at +http://cslib.sandia.gov. It was developed by Steve Plimpton at Sandia +National Laboratories. + +You can type "make lib-message" from the src directory to see help on +how to build this library via make commands, or you can do the same +thing by typing "python Install.py" from within this directory, or you +can do it manually by following the instructions below. + +The CSlib can be optionally built with support for sockets using +the open-source ZeroMQ (ZMQ) library. If it is not installed +on your system, it is easy to download and install. + +Go to the ZMQ website for details: http://zeromq.org + +----------------- + +Instructions: + +1. Compile CSlib from within cslib/src with one of the following: + % make lib_parallel # build parallel library with ZMQ socket support + % make lib_serial # build serial library with ZMQ support + % make lib_parallel zmq=no # build parallel lib with no ZMQ support + % make lib_serial zmq=no # build serial lib with no ZMQ support + +2. Copy the produced cslib/src/libcsmpi.a or libscnompi.a file to + cslib/src/libmessage.a + +3. Copy either lib/message/Makefile.lammps.zmq or Makefile.lammps.nozmq + to lib/message/Makefile.lammps, depending on whether you + build the library with ZMQ support or not. + If your ZMQ library is not in a place your shell path finds, + you can set the INCLUDE and PATH variables in Makefile.lammps + to point to the dirs where the ZMQ include and library files are. + +----------------- + +When these steps are complete you can build LAMMPS +with the MESSAGAE package installed: + +% cd lammps/src +% make yes-message +% make mpi (or whatever target you wish) + +Note that if you download and unpack a new LAMMPS tarball, you will +need to re-build the CSlib in this dir. diff --git a/lib/message/cslib/LICENSE b/lib/message/cslib/LICENSE new file mode 100644 index 00000000000..7a36e21daf9 --- /dev/null +++ b/lib/message/cslib/LICENSE @@ -0,0 +1,32 @@ +Program: CSlib client/server coupling library + +Copyright 2018 National Technology & Engineering Solutions of Sandia, +LLC (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the +U.S. Government retains certain rights in this software. This +software is distributed under the modified Berkeley Software +Distribution (BSD) License. + +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 Sandia Corporation nor the names of contributors + to this software 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 AUTHORS 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/message/cslib/README b/lib/message/cslib/README new file mode 100644 index 00000000000..37f4a97d54b --- /dev/null +++ b/lib/message/cslib/README @@ -0,0 +1,23 @@ +This is the the Client/Server messaging library (CSlib). + +Only the source directory and license file are included here as part +of the LAMMPS distribution. The full CSlib distribution, including +documentation and test codes, can be found at the website: +http://cslib.sandia.gov (as of Aug 2018). + +The contact author is + +Steve Plimpton +Sandia National Laboratories +sjplimp@sandia.gov +http://www.sandia.gov/~sjplimp + +The CSlib is distributed as open-source code under the modified +Berkeley Software Distribution (BSD) License. See the accompanying +LICENSE file. + +This directory contains the following: + +README this file +LICENSE GNU LGPL license +src source files for library diff --git a/lib/message/cslib/src/Makefile b/lib/message/cslib/src/Makefile new file mode 100644 index 00000000000..83cf902220d --- /dev/null +++ b/lib/message/cslib/src/Makefile @@ -0,0 +1,107 @@ +# Makefile for CSlib = client/server messaging library +# type "make help" for options + +SHELL = /bin/sh + +# ---------------------------------------- +# should only need to change this section +# compiler/linker settings +# ---------------------------------------- + +CC = g++ +CCFLAGS = -g -O3 -DZMQ_$(ZMQ) -DMPI_$(MPI) +SHFLAGS = -fPIC +ARCHIVE = ar +ARCHFLAGS = -rc +SHLIBFLAGS = -shared + +# files + +LIB = libcsmpi.a +SHLIB = libcsmpi.so +SRC = $(wildcard *.cpp) +INC = $(wildcard *.h) +OBJ = $(SRC:.cpp=.o) + +# build with ZMQ support or not + +zmq = yes +ZMQ = $(shell echo $(zmq) | tr a-z A-Z) + +ifeq ($(ZMQ),YES) + ZMQLIB = -lzmq +else + CCFLAGS += -I./STUBS_ZMQ +endif + +# build with MPI support or not + +mpi = yes +MPI = $(shell echo $(mpi) | tr a-z A-Z) + +ifeq ($(MPI),YES) + CC = mpicxx +else + CCFLAGS += -I./STUBS_MPI + LIB = libcsnompi.a + SHLIB = libcsnompi.so +endif + +# targets + +shlib: shlib_parallel shlib_serial + +lib: lib_parallel lib_serial + +all: shlib lib + +help: + @echo 'make default = shlib' + @echo 'make shlib build 2 shared CSlibs: parallel & serial' + @echo 'make lib build 2 static CSlibs: parallel & serial' + @echo 'make all build 4 CSlibs: shlib and lib' + @echo 'make shlib_parallel build shared parallel CSlib' + @echo 'make shlib_serial build shared serial CSlib' + @echo 'make lib_parallel build static parallel CSlib' + @echo 'make lib_serial build static serial CSlib' + @echo 'make ... zmq=no build w/out ZMQ support' + @echo 'make clean remove all *.o files' + @echo 'make clean-all remove *.o and lib files' + @echo 'make tar create a tarball, 2 levels up' + +shlib_parallel: + $(MAKE) clean + $(MAKE) shared zmq=$(zmq) mpi=yes + +shlib_serial: + $(MAKE) clean + $(MAKE) shared zmq=$(zmq) mpi=no + +lib_parallel: + $(MAKE) clean + $(MAKE) static zmq=$(zmq) mpi=yes + +lib_serial: + $(MAKE) clean + $(MAKE) static zmq=$(zmq) mpi=no + +static: $(OBJ) + $(ARCHIVE) $(ARCHFLAGS) $(LIB) $(OBJ) + +shared: $(OBJ) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) -o $(SHLIB) $(OBJ) $(ZMQLIB) + +clean: + @rm -f *.o *.pyc + +clean-all: + @rm -f *.o *.pyc lib*.a lib*.so + +tar: + cd ../..; tar cvf cslib.tar cslib/README cslib/LICENSE \ + cslib/doc cslib/src cslib/test + +# rules + +%.o:%.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) -c $< diff --git a/lib/message/cslib/src/STUBS_MPI/mpi.h b/lib/message/cslib/src/STUBS_MPI/mpi.h new file mode 100644 index 00000000000..2919e4c3a2f --- /dev/null +++ b/lib/message/cslib/src/STUBS_MPI/mpi.h @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +// MPI constants and dummy functions + +#ifndef MPI_DUMMY_H +#define MPI_DUMMY_H + +#include +#include +#include + +namespace CSLIB_NS { + +typedef int MPI_Comm; +typedef int MPI_Fint; +typedef int MPI_Datatype; +typedef int MPI_Status; +typedef int MPI_Op; +typedef int MPI_Info; + +#define MPI_COMM_WORLD 0 +#define MPI_MAX_PORT_NAME 0 +#define MPI_INFO_NULL 0 +#define MPI_INT 1 +#define MPI_LONG_LONG 2 +#define MPI_FLOAT 3 +#define MPI_DOUBLE 4 +#define MPI_CHAR 5 +#define MPI_SUM 0 + +static void MPI_Init(int *, char ***) {} +static MPI_Comm MPI_Comm_f2c(MPI_Comm world) {return world;} +static void MPI_Comm_rank(MPI_Comm, int *) {} +static void MPI_Comm_size(MPI_Comm, int *) {} + +static void MPI_Open_port(MPI_Info, char *) {} +static void MPI_Close_port(const char *) {} +static void MPI_Comm_accept(const char *, MPI_Info, int, + MPI_Comm, MPI_Comm *) {} +static void MPI_Comm_connect(const char *, MPI_Info, int, + MPI_Comm, MPI_Comm *) {} + +static void MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *) {} +static void MPI_Comm_free(MPI_Comm *) {} + +static void MPI_Send(const void *, int, MPI_Datatype, int, int, MPI_Comm) {} +static void MPI_Recv(void *, int, MPI_Datatype, int, int, + MPI_Comm, MPI_Status *) {} + +static void MPI_Allreduce(const void *in, void *out, int, MPI_Datatype type, + MPI_Op op, MPI_Comm) +{ + if (type == MPI_INT) *((int *) out) = *((int *) in); +} +static void MPI_Scan(const void *in, void *out, int, MPI_Datatype intype, + MPI_Op op,MPI_Comm) +{ + if (intype == MPI_INT) *((int *) out) = *((int *) in); +} + +static void MPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm) {} +static void MPI_Allgather(const void *in, int incount, MPI_Datatype intype, + void *out, int, MPI_Datatype, MPI_Comm) +{ + // assuming incount = 1 + if (intype == MPI_INT) *((int *) out) = *((int *) in); +} +static void MPI_Allgatherv(const void *in, int incount, MPI_Datatype intype, + void *out, const int *, const int *, + MPI_Datatype, MPI_Comm) +{ + if (intype == MPI_INT) memcpy(out,in,incount*sizeof(int)); + else if (intype == MPI_LONG_LONG) memcpy(out,in,incount*sizeof(int64_t)); + else if (intype == MPI_FLOAT) memcpy(out,in,incount*sizeof(float)); + else if (intype == MPI_DOUBLE) memcpy(out,in,incount*sizeof(double)); + else if (intype == MPI_CHAR) memcpy(out,in,incount*sizeof(char)); +} + +static void MPI_Abort(MPI_Comm, int) {exit(1);} +static void MPI_Finalize() {} + +} + +#endif diff --git a/lib/message/cslib/src/STUBS_ZMQ/zmq.h b/lib/message/cslib/src/STUBS_ZMQ/zmq.h new file mode 100644 index 00000000000..2f02eb4035c --- /dev/null +++ b/lib/message/cslib/src/STUBS_ZMQ/zmq.h @@ -0,0 +1,36 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +// ZMQ constants and dummy functions + +#ifndef ZMQ_DUMMY_H +#define ZMQ_DUMMY_H + +namespace CSLIB_NS { + +#define ZMQ_REQ 0 +#define ZMQ_REP 0 + +static void *zmq_ctx_new() {return NULL;} +static void *zmq_connect(void *, char *) {return NULL;} +static int zmq_bind(void *, char *) {return 0;} +static void *zmq_socket(void *,int) {return NULL;} +static void zmq_close(void *) {} +static void zmq_ctx_destroy(void *) {} +static void zmq_send(void *, void *, int, int) {} +static void zmq_recv(void *, void *, int, int) {} + +}; + +#endif diff --git a/lib/message/cslib/src/cslib.cpp b/lib/message/cslib/src/cslib.cpp new file mode 100644 index 00000000000..874333607e5 --- /dev/null +++ b/lib/message/cslib/src/cslib.cpp @@ -0,0 +1,768 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include + +#include "cslib.h" +#include "msg_file.h" +#include "msg_zmq.h" +#include "msg_mpi_one.h" +#include "msg_mpi_two.h" + +using namespace CSLIB_NS; + +#define MAXTYPE 5 // # of defined field data types + +/* ---------------------------------------------------------------------- */ + +CSlib::CSlib(int csflag, const char *mode, const void *ptr, const void *pcomm) +{ + if (pcomm) myworld = (uint64_t) *((MPI_Comm *) pcomm); + else myworld = 0; + +#ifdef MPI_NO + if (pcomm) + error_all("constructor(): CSlib invoked with MPI_Comm " + "but built w/out MPI support"); +#endif +#ifdef MPI_YES // NOTE: this could be OK to allow ?? + // would allow a parallel app to invoke CSlib + // in parallel and/or in serial + if (!pcomm) + error_all("constructor(): CSlib invoked w/out MPI_Comm " + "but built with MPI support"); +#endif + + client = server = 0; + if (csflag == 0) client = 1; + else if (csflag == 1) server = 1; + else error_all("constructor(): Invalid client/server arg"); + + if (pcomm == NULL) { + me = 0; + nprocs = 1; + + if (strcmp(mode,"file") == 0) msg = new MsgFile(csflag,ptr); + else if (strcmp(mode,"zmq") == 0) msg = new MsgZMQ(csflag,ptr); + else if (strcmp(mode,"mpi/one") == 0) + error_all("constructor(): No mpi/one mode for serial lib usage"); + else if (strcmp(mode,"mpi/two") == 0) + error_all("constructor(): No mpi/two mode for serial lib usage"); + else error_all("constructor(): Unknown mode"); + + } else if (pcomm) { + MPI_Comm world = (MPI_Comm) myworld; + MPI_Comm_rank(world,&me); + MPI_Comm_size(world,&nprocs); + + if (strcmp(mode,"file") == 0) msg = new MsgFile(csflag,ptr,world); + else if (strcmp(mode,"zmq") == 0) msg = new MsgZMQ(csflag,ptr,world); + else if (strcmp(mode,"mpi/one") == 0) msg = new MsgMPIOne(csflag,ptr,world); + else if (strcmp(mode,"mpi/two") == 0) msg = new MsgMPITwo(csflag,ptr,world); + else error_all("constructor(): Unknown mode"); + } + + maxfield = 0; + fieldID = fieldtype = fieldlen = fieldoffset = NULL; + maxheader = 0; + header = NULL; + maxbuf = 0; + buf = NULL; + + recvcounts = displs = NULL; + maxglobal = 0; + allids = NULL; + maxfieldbytes = 0; + fielddata = NULL; + + pad = "\0\0\0\0\0\0\0"; // just length 7 since will have trailing NULL + + nsend = nrecv = 0; +} + +/* ---------------------------------------------------------------------- */ + +CSlib::~CSlib() +{ + deallocate_fields(); + sfree(header); + sfree(buf); + + sfree(recvcounts); + sfree(displs); + sfree(allids); + sfree(fielddata); + + delete msg; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::send(int msgID_caller, int nfield_caller) +{ + if (nfield_caller < 0) error_all("send(): Invalid nfield"); + + msgID = msgID_caller; + nfield = nfield_caller; + allocate_fields(); + + fieldcount = 0; + nbuf = 0; + + if (fieldcount == nfield) send_message(); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_int(int id, int value) +{ + pack(id,1,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_int64(int id, int64_t value) +{ + pack(id,2,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_float(int id, float value) +{ + pack(id,3,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_double(int id, double value) +{ + pack(id,4,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_string(int id, char *value) +{ + pack(id,5,strlen(value)+1,value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack(int id, int ftype, int flen, void *data) +{ + if (find_field(id,fieldcount) >= 0) + error_all("pack(): Reuse of field ID"); + if (ftype < 1 || ftype > MAXTYPE) error_all("pack(): Invalid ftype"); + if (flen < 0) error_all("pack(): Invalid flen"); + + fieldID[fieldcount] = id; + fieldtype[fieldcount] = ftype; + fieldlen[fieldcount] = flen; + + int nbytes,nbytesround; + onefield(ftype,flen,nbytes,nbytesround); + + memcpy(&buf[nbuf],data,nbytes); + memcpy(&buf[nbuf+nbytes],pad,nbytesround-nbytes); + nbuf += nbytesround; + + fieldcount++; + if (fieldcount == nfield) send_message(); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_parallel(int id, int ftype, + int nlocal, int *ids, int nper, void *data) +{ + int i,j,k,m; + + if (find_field(id,fieldcount) >= 0) + error_all("pack_parallel(): Reuse of field ID"); + if (ftype < 1 || ftype > MAXTYPE) error_all("pack_parallel(): Invalid ftype"); + if (nlocal < 0) error_all("pack_parallel(): Invalid nlocal"); + if (nper < 1) error_all("pack_parallel(): Invalid nper"); + + MPI_Comm world = (MPI_Comm) myworld; + + // NOTE: check for overflow of maxglobal and flen + + int nglobal; + MPI_Allreduce(&nlocal,&nglobal,1,MPI_INT,MPI_SUM,world); + int flen = nper*nglobal; + + fieldID[fieldcount] = id; + fieldtype[fieldcount] = ftype; + fieldlen[fieldcount] = flen; + + // nlocal datums, each of nper length, from all procs + // final data in buf = datums for all natoms, ordered by ids + + if (recvcounts == NULL) { + recvcounts = (int *) smalloc(nprocs*sizeof(int)); + displs = (int *) smalloc(nprocs*sizeof(int)); + } + + MPI_Allgather(&nlocal,1,MPI_INT,recvcounts,1,MPI_INT,world); + + displs[0] = 0; + for (int iproc = 1; iproc < nprocs; iproc++) + displs[iproc] = displs[iproc-1] + recvcounts[iproc-1]; + + if (ids && nglobal > maxglobal) { + sfree(allids); + maxglobal = nglobal; + // NOTE: maxglobal*sizeof(int) could overflow int + allids = (int *) smalloc(maxglobal*sizeof(int)); + } + + MPI_Allgatherv(ids,nlocal,MPI_INT,allids, + recvcounts,displs,MPI_INT,world); + + int nlocalsize = nper*nlocal; + MPI_Allgather(&nlocalsize,1,MPI_INT,recvcounts,1,MPI_INT,world); + + displs[0] = 0; + for (int iproc = 1; iproc < nprocs; iproc++) + displs[iproc] = displs[iproc-1] + recvcounts[iproc-1]; + + int nbytes,nbytesround; + onefield(ftype,flen,nbytes,nbytesround); + + if (ftype == 1) { + int *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (int *) fielddata; + } else alldata = (int *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_INT,alldata, + recvcounts,displs,MPI_INT,world); + if (ids) { + int *bufptr = (int *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + } else if (ftype == 2) { + int64_t *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (int64_t *) fielddata; + } else alldata = (int64_t *) &buf[nbuf]; + // NOTE: may be just MPI_LONG on some machines + MPI_Allgatherv(data,nlocalsize,MPI_LONG_LONG,alldata, + recvcounts,displs,MPI_LONG_LONG,world); + if (ids) { + int64_t *bufptr = (int64_t *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + } else if (ftype == 3) { + float *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (float *) fielddata; + } else alldata = (float *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_FLOAT,alldata, + recvcounts,displs,MPI_FLOAT,world); + if (ids) { + float *bufptr = (float *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + } else if (ftype == 4) { + double *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (double *) fielddata; + } else alldata = (double *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_DOUBLE,alldata, + recvcounts,displs,MPI_DOUBLE,world); + if (ids) { + double *bufptr = (double *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + /* eventually ftype = BYTE, but not yet + } else if (ftype == 5) { + char *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (char *) fielddata; + } else alldata = (char *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_CHAR,alldata, + recvcounts,displs,MPI_CHAR,world); + if (ids) { + char *bufptr = (char *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + memcpy(&bufptr[j],&alldata[m],nper); + m += nper; + } + } + */ + } + + memcpy(&buf[nbuf+nbytes],pad,nbytesround-nbytes); + nbuf += nbytesround; + + fieldcount++; + if (fieldcount == nfield) send_message(); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::send_message() +{ + // setup header message + + int m = 0; + header[m++] = msgID; + header[m++] = nfield; + for (int ifield = 0; ifield < nfield; ifield++) { + header[m++] = fieldID[ifield]; + header[m++] = fieldtype[ifield]; + header[m++] = fieldlen[ifield]; + } + + msg->send(nheader,header,nbuf,buf); + nsend++; +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::recv(int &nfield_caller, int *&fieldID_caller, + int *&fieldtype_caller, int *&fieldlen_caller) +{ + msg->recv(maxheader,header,maxbuf,buf); + nrecv++; + + // unpack header message + + int m = 0; + msgID = header[m++]; + nfield = header[m++]; + allocate_fields(); + + int nbytes,nbytesround; + + nbuf = 0; + for (int ifield = 0; ifield < nfield; ifield++) { + fieldID[ifield] = header[m++]; + fieldtype[ifield] = header[m++]; + fieldlen[ifield] = header[m++]; + fieldoffset[ifield] = nbuf; + onefield(fieldtype[ifield],fieldlen[ifield],nbytes,nbytesround); + nbuf += nbytesround; + } + + // return message parameters + + nfield_caller = nfield; + fieldID_caller = fieldID; + fieldtype_caller = fieldtype; + fieldlen_caller = fieldlen; + + return msgID; +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::unpack_int(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_int(): Unknown field ID"); + if (fieldtype[ifield] != 1) error_all("unpack_int(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_int(): Flen is not 1"); + + int *ptr = (int *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +int64_t CSlib::unpack_int64(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_int64(): Unknown field ID"); + if (fieldtype[ifield] != 2) error_all("unpack_int64(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_int64(): Flen is not 1"); + + int64_t *ptr = (int64_t *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +float CSlib::unpack_float(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_float(): Unknown field ID"); + if (fieldtype[ifield] != 3) error_all("unpack_float(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_float(): Flen is not 1"); + + float *ptr = (float *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +double CSlib::unpack_double(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_double(): Unknown field ID"); + if (fieldtype[ifield] != 4) error_all("unpack_double(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_double(): Flen is not 1"); + + double *ptr = (double *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +char *CSlib::unpack_string(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_string(): Unknown field ID"); + if (fieldtype[ifield] != 5) error_all("unpack_string(): Mis-match of ftype"); + + char *ptr = (char *) unpack(id); + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void *CSlib::unpack(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack(): Unknown field ID"); + return &buf[fieldoffset[ifield]]; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::unpack(int id, void *data) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack(): Unknown field ID"); + + int ftype = fieldtype[ifield]; + int nbytes = fieldlen[ifield]; + if (ftype == 1) nbytes *= sizeof(int); + else if (ftype == 2) nbytes *= sizeof(int64_t); + else if (ftype == 3) nbytes *= sizeof(float); + else if (ftype == 4) nbytes *= sizeof(double); + memcpy(data,&buf[fieldoffset[ifield]],nbytes); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::unpack_parallel(int id, int nlocal, int *ids, int nper, void *data) +{ + int i,j,k,m; + + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_parallel(): Unknown field ID"); + if (nlocal < 0) error_all("unpack_parallel(): Invalid nlocal"); + if (nper < 1) error_all("pack_parallel(): Invalid nper"); + + MPI_Comm world = (MPI_Comm) myworld; + + int upto; + if (!ids) { + MPI_Scan(&nlocal,&upto,1,MPI_INT,MPI_SUM,world); + upto -= nlocal; + } + + if (fieldtype[ifield] == 1) { + int *local = (int *) data; + int *global = (int *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(int)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + } else if (fieldtype[ifield] == 2) { + int64_t *local = (int64_t *) data; + int64_t *global = (int64_t *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(int64_t)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + } else if (fieldtype[ifield] == 3) { + float *local = (float *) data; + float *global = (float *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(float)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + } else if (fieldtype[ifield] == 4) { + double *local = (double *) data; + double *global = (double *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(double)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + /* eventually ftype = BYTE, but not yet + } else if (fieldtype[ifield] == 5) { + char *local = (char *) data; + char *global = (char *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(char)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + memcpy(&local[m],&global[j],nper); + m += nper; + } + } + */ + } +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::extract(int flag) +{ + if (flag == 1) return nsend; + if (flag == 2) return nrecv; + error_all("extract(): Invalid flag"); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::onefield(int ftype, int flen, int &nbytes, int &nbytesround) +{ + int64_t bigbytes,bigbytesround; + int64_t biglen = flen; + + if (ftype == 1) bigbytes = biglen * sizeof(int); + else if (ftype == 2) bigbytes = biglen * sizeof(int64_t); + else if (ftype == 3) bigbytes = biglen * sizeof(float); + else if (ftype == 4) bigbytes = biglen * sizeof(double); + else if (ftype == 5) bigbytes = biglen * sizeof(char); + bigbytesround = roundup(bigbytes,8); + + if (nbuf + bigbytesround > INT_MAX) + error_all("pack(): Message size exceeds 32-bit integer limit"); + + nbytes = (int) bigbytes; + nbytesround = (int) bigbytesround; + if (nbuf + nbytesround > maxbuf) { + maxbuf = nbuf + nbytesround; + buf = (char *) srealloc(buf,maxbuf); + } +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::find_field(int id, int n) +{ + int ifield; + for (ifield = 0; ifield < n; ifield++) + if (id == fieldID[ifield]) return ifield; + return -1; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::allocate_fields() +{ + int64_t bigbytes = (2 + 3*((int64_t) nfield)) * sizeof(int); + if (bigbytes > INT_MAX) + error_all("send(): Message header size exceeds 32-bit integer limit"); + + nheader = 2; + nheader += 3 * nfield; + + if (nfield > maxfield) { + deallocate_fields(); + maxfield = nfield; + fieldID = new int[maxfield]; + fieldtype = new int[maxfield]; + fieldlen = new int[maxfield]; + fieldoffset = new int[maxfield]; + } + + if (nheader > maxheader) { + sfree(header); + maxheader = nheader; + header = (int *) smalloc(maxheader*sizeof(int)); + } +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::deallocate_fields() +{ + delete [] fieldID; + delete [] fieldtype; + delete [] fieldlen; + delete [] fieldoffset; +} + +/* ---------------------------------------------------------------------- */ + +void *CSlib::smalloc(int nbytes) +{ + if (nbytes == 0) return NULL; + void *ptr = malloc(nbytes); + if (ptr == NULL) { + char str[128]; + sprintf(str,"malloc(): Failed to allocate %d bytes",nbytes); + error_one(str); + } + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void *CSlib::srealloc(void *ptr, int nbytes) +{ + if (nbytes == 0) { + sfree(ptr); + return NULL; + } + + ptr = realloc(ptr,nbytes); + if (ptr == NULL) { + char str[128]; + sprintf(str,"realloc(): Failed to reallocate %d bytes",nbytes); + error_one(str); + } + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::sfree(void *ptr) +{ + if (ptr == NULL) return; + free(ptr); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::error_all(const char *str) +{ + if (me == 0) printf("CSlib ERROR: %s\n",str); + MPI_Comm world = (MPI_Comm) myworld; + MPI_Abort(world,1); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::error_one(const char *str) +{ + printf("CSlib ERROR: %s\n",str); + MPI_Comm world = (MPI_Comm) myworld; + MPI_Abort(world,1); +} + +/* ---------------------------------------------------------------------- + round N up to multiple of nalign and return it + NOTE: see mapreduce/src/keyvalue.cpp for doing this as uint64_t +------------------------------------------------------------------------- */ + +int64_t CSlib::roundup(int64_t n, int nalign) +{ + if (n % nalign == 0) return n; + n = (n/nalign + 1) * nalign; + return n; +} diff --git a/lib/message/cslib/src/cslib.h b/lib/message/cslib/src/cslib.h new file mode 100644 index 00000000000..b4da9680268 --- /dev/null +++ b/lib/message/cslib/src/cslib.h @@ -0,0 +1,87 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef CSLIB_H +#define CSLIB_H + +#include + +namespace CSLIB_NS { + +class CSlib { + public: + int nsend,nrecv; + + CSlib(int, const char *, const void *, const void *); + ~CSlib(); + + void send(int, int); + + void pack_int(int, int); + void pack_int64(int, int64_t); + void pack_float(int, float); + void pack_double(int, double); + void pack_string(int, char *); + void pack(int, int, int, void *); + void pack_parallel(int, int, int, int *, int, void *); + + int recv(int &, int *&, int *&, int *&); + + int unpack_int(int); + int64_t unpack_int64(int); + float unpack_float(int); + double unpack_double(int); + char *unpack_string(int); + void *unpack(int); + void unpack(int, void *); + void unpack_parallel(int, int, int *, int, void *); + + int extract(int); + + private: + uint64_t myworld; // really MPI_Comm, but avoids use of mpi.h in this file + // so apps can include this file w/ no MPI on system + int me,nprocs; + int client,server; + int nfield,maxfield; + int msgID,fieldcount; + int nheader,maxheader; + int nbuf,maxbuf; + int maxglobal,maxfieldbytes; + int *fieldID,*fieldtype,*fieldlen,*fieldoffset; + int *header; + int *recvcounts,*displs; // nprocs size for Allgathers + int *allids; // nglobal size for pack_parallel() + char *buf; // maxbuf size for msg with all fields + char *fielddata; // maxfieldbytes size for one global field + const char *pad; + + class Msg *msg; + + void send_message(); + void onefield(int, int, int &, int &); + int find_field(int, int); + void allocate_fields(); + void deallocate_fields(); + int64_t roundup(int64_t, int); + void *smalloc(int); + void *srealloc(void *, int); + void sfree(void *); + void error_all(const char *); + void error_one(const char *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/cslib.py b/lib/message/cslib/src/cslib.py new file mode 100644 index 00000000000..0ba3516255a --- /dev/null +++ b/lib/message/cslib/src/cslib.py @@ -0,0 +1,362 @@ +# ------------------------------------------------------------------------ +# CSlib - Client/server library for code coupling +# http://cslib.sandia.gov, Sandia National Laboratories +# Steve Plimpton, sjplimp@sandia.gov +# +# Copyright 2018 National Technology & Engineering Solutions of +# Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with +# NTESS, the U.S. Government retains certain rights in this software. +# This software is distributed under the modified Berkeley Software +# Distribution (BSD) License. +# +# See the README file in the top-level CSlib directory. +# ------------------------------------------------------------------------- + +# Python wrapper on CSlib library via ctypes + +# ctypes and Numpy data types: +# 32-bit int = c_int = np.intc = np.int32 +# 64-bit int = c_longlong = np.int64 +# 32-bit floating point = c_float = np.float32 +# 64-bit floating point = c_double = np.float = np.float64 + +import sys,traceback +from ctypes import * + +# Numpy and mpi4py packages may not exist + +try: + import numpy as np + numpyflag = 1 +except: + numpyflag = 0 + +try: + from mpi4py import MPI + mpi4pyflag = 1 +except: + mpi4pyflag = 0 + +# wrapper class + +class CSlib: + + # instantiate CSlib thru its C-interface + + def __init__(self,csflag,mode,ptr,comm): + + # load libcslib.so + + try: + if comm: self.lib = CDLL("libcsmpi.so",RTLD_GLOBAL) + else: self.lib = CDLL("libcsnompi.so",RTLD_GLOBAL) + except: + etype,value,tb = sys.exc_info() + traceback.print_exception(etype,value,tb) + raise OSError,"Could not load CSlib dynamic library" + + # define ctypes API for each library method + + self.lib.cslib_open.argtypes = [c_int,c_char_p,c_void_p,c_void_p, + POINTER(c_void_p)] + self.lib.cslib_open.restype = None + + self.lib.cslib_close.argtypes = [c_void_p] + self.lib.cslib_close.restype = None + + self.lib.cslib_send.argtypes = [c_void_p,c_int,c_int] + self.lib.cslib_send.restype = None + + self.lib.cslib_pack_int.argtypes = [c_void_p,c_int,c_int] + self.lib.cslib_pack_int.restype = None + + self.lib.cslib_pack_int64.argtypes = [c_void_p,c_int,c_longlong] + self.lib.cslib_pack_int64.restype = None + + self.lib.cslib_pack_float.argtypes = [c_void_p,c_int,c_float] + self.lib.cslib_pack_float.restype = None + + self.lib.cslib_pack_double.argtypes = [c_void_p,c_int,c_double] + self.lib.cslib_pack_double.restype = None + + self.lib.cslib_pack_string.argtypes = [c_void_p,c_int,c_char_p] + self.lib.cslib_pack_string.restype = None + + self.lib.cslib_pack.argtypes = [c_void_p,c_int,c_int,c_int,c_void_p] + self.lib.cslib_pack.restype = None + + self.lib.cslib_pack_parallel.argtypes = [c_void_p,c_int,c_int,c_int, + POINTER(c_int),c_int,c_void_p] + self.lib.cslib_pack_parallel.restype = None + + self.lib.cslib_recv.argtypes = [c_void_p,POINTER(c_int), + POINTER(POINTER(c_int)), + POINTER(POINTER(c_int)), + POINTER(POINTER(c_int))] + self.lib.cslib_recv.restype = c_int + + self.lib.cslib_unpack_int.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_int.restype = c_int + + self.lib.cslib_unpack_int64.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_int64.restype = c_longlong + + self.lib.cslib_unpack_float.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_float.restype = c_float + + self.lib.cslib_unpack_double.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_double.restype = c_double + + self.lib.cslib_unpack_string.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_string.restype = c_char_p + + # override return in unpack() + self.lib.cslib_unpack.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack.restype = c_void_p + + self.lib.cslib_unpack_data.argtypes = [c_void_p,c_int,c_void_p] + self.lib.cslib_unpack_data.restype = None + + # override last arg in unpack_parallel() + self.lib.cslib_unpack_parallel.argtypes = [c_void_p,c_int,c_int, + POINTER(c_int),c_int,c_void_p] + self.lib.cslib_unpack_parallel.restype = None + + self.lib.cslib_extract.argtypes = [c_void_p,c_int] + self.lib.cslib_extract.restype = c_int + + # create an instance of CSlib with or w/out MPI communicator + + self.cs = c_void_p() + + if not comm: + self.lib.cslib_open(csflag,mode,ptr,None,byref(self.cs)) + elif not mpi4pyflag: + print "Cannot pass MPI communicator to CSlib w/out mpi4py package" + sys.exit() + else: + address = MPI._addressof(comm) + comm_ptr = c_void_p(address) + if mode == "mpi/one": + address = MPI._addressof(ptr) + ptrcopy = c_void_p(address) + else: ptrcopy = ptr + self.lib.cslib_open(csflag,mode,ptrcopy,comm_ptr,byref(self.cs)) + + # destroy instance of CSlib + + def __del__(self): + if self.cs: self.lib.cslib_close(self.cs) + + def close(self): + self.lib.cslib_close(self.cs) + self.lib = None + + # send a message + + def send(self,msgID,nfield): + self.nfield = nfield + self.lib.cslib_send(self.cs,msgID,nfield) + + # pack one field of message + + def pack_int(self,id,value): + self.lib.cslib_pack_int(self.cs,id,value) + + def pack_int64(self,id,value): + self.lib.cslib_pack_int64(self.cs,id,value) + + def pack_float(self,id,value): + self.lib.cslib_pack_float(self.cs,id,value) + + def pack_double(self,id,value): + self.lib.cslib_pack_double(self.cs,id,value) + + def pack_string(self,id,value): + self.lib.cslib_pack_string(self.cs,id,value) + + def pack(self,id,ftype,flen,data): + cdata = self.data_convert(ftype,flen,data) + self.lib.cslib_pack(self.cs,id,ftype,flen,cdata) + + def pack_parallel(self,id,ftype,nlocal,ids,nper,data): + cids = self.data_convert(1,nlocal,ids) + cdata = self.data_convert(ftype,nper*nlocal,data) + self.lib.cslib_pack_parallel(self.cs,id,ftype,nlocal,cids,nper,cdata) + + # convert input data to a ctypes vector to pass to CSlib + + def data_convert(self,ftype,flen,data): + + # tflag = type of data + # tflag = 1 if data is list or tuple + # tflag = 2 if data is Numpy array + # tflag = 3 if data is ctypes vector + # same usage of tflag as in unpack function + + txttype = str(type(data)) + if "numpy" in txttype: tflag = 2 + elif "c_" in txttype: tflag = 3 + else: tflag = 1 + + # create ctypes vector out of data to pass to lib + # cdata = ctypes vector to return + # NOTE: error check on ftype and tflag everywhere, also flen + + if ftype == 1: + if tflag == 1: cdata = (flen * c_int)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_int)) + elif tflag == 3: cdata = data + elif ftype == 2: + if tflag == 1: cdata = (flen * c_longlong)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_longlong)) + elif tflag == 3: cdata = data + elif ftype == 3: + if tflag == 1: cdata = (flen * c_float)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_float)) + elif tflag == 3: cdata = data + elif ftype == 4: + if tflag == 1: cdata = (flen * c_double)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_double)) + elif tflag == 3: cdata = data + + return cdata + + # receive a message + + def recv(self): + self.lib.cslib_recv.restype = c_int + nfield = c_int() + fieldID = POINTER(c_int)() + fieldtype = POINTER(c_int)() + fieldlen = POINTER(c_int)() + msgID = self.lib.cslib_recv(self.cs,byref(nfield), + byref(fieldID),byref(fieldtype),byref(fieldlen)) + + # copy returned C args to native Python int and lists + # store them in class so unpack() methods can access the info + + self.nfield = nfield = nfield.value + self.fieldID = fieldID[:nfield] + self.fieldtype = fieldtype[:nfield] + self.fieldlen = fieldlen[:nfield] + + return msgID,self.nfield,self.fieldID,self.fieldtype,self.fieldlen + + # unpack one field of message + # tflag = type of data to return + # 3 = ctypes vector is default, since no conversion required + + def unpack_int(self,id): + return self.lib.cslib_unpack_int(self.cs,id) + + def unpack_int64(self,id): + return self.lib.cslib_unpack_int64(self.cs,id) + + def unpack_float(self,id): + return self.lib.cslib_unpack_float(self.cs,id) + + def unpack_double(self,id): + return self.lib.cslib_unpack_double(self.cs,id) + + def unpack_string(self,id): + return self.lib.cslib_unpack_string(self.cs,id) + + def unpack(self,id,tflag=3): + index = self.fieldID.index(id) + + # reset data type of return so can morph by tflag + # cannot do this for the generic c_void_p returned by CSlib + + if self.fieldtype[index] == 1: + self.lib.cslib_unpack.restype = POINTER(c_int) + elif self.fieldtype[index] == 2: + self.lib.cslib_unpack.restype = POINTER(c_longlong) + elif self.fieldtype[index] == 3: + self.lib.cslib_unpack.restype = POINTER(c_float) + elif self.fieldtype[index] == 4: + self.lib.cslib_unpack.restype = POINTER(c_double) + #elif self.fieldtype[index] == 5: + # self.lib.cslib_unpack.restype = POINTER(c_char) + + cdata = self.lib.cslib_unpack(self.cs,id) + + # tflag = user-requested type of data to return + # tflag = 1 to return data as list + # tflag = 2 to return data as Numpy array + # tflag = 3 to return data as ctypes vector + # same usage of tflag as in pack functions + # tflag = 2,3 should NOT perform a data copy + + if tflag == 1: + data = cdata[:self.fieldlen[index]] + elif tflag == 2: + if numpyflag == 0: + print "Cannot return Numpy array w/out numpy package" + sys.exit() + data = np.ctypeslib.as_array(cdata,shape=(self.fieldlen[index],)) + elif tflag == 3: + data = cdata + + return data + + # handle data array like pack() or unpack_parallel() ?? + + def unpack_data(self,id,tflag=3): + index = self.fieldID.index(id) + + # unpack one field of message in parallel + # tflag = type of data to return + # 3 = ctypes vector is default, since no conversion required + # NOTE: allow direct use of user array (e.g. Numpy), if user provides data arg? + # as opposed to creating this cdata + # does that make any performance difference ? + # e.g. should we allow CSlib to populate an existing Numpy array's memory + + def unpack_parallel(self,id,nlocal,ids,nper,tflag=3): + cids = self.data_convert(1,nlocal,ids) + + # allocate memory for the returned data + # pass cdata ptr to the memory to CSlib unpack_parallel() + # this resets data type of last unpack_parallel() arg + + index = self.fieldID.index(id) + if self.fieldtype[index] == 1: cdata = (nper*nlocal * c_int)() + elif self.fieldtype[index] == 2: cdata = (nlocal*nper * c_longlong)() + elif self.fieldtype[index] == 3: cdata = (nlocal*nper * c_float)() + elif self.fieldtype[index] == 4: cdata = (nlocal*nper * c_double)() + #elif self.fieldtype[index] == 5: cdata = (nlocal*nper * c_char)() + + self.lib.cslib_unpack_parallel(self.cs,id,nlocal,cids,nper,cdata) + + # tflag = user-requested type of data to return + # tflag = 1 to return data as list + # tflag = 2 to return data as Numpy array + # tflag = 3 to return data as ctypes vector + # same usage of tflag as in pack functions + + if tflag == 1: + data = cdata[:nper*nlocal] + elif tflag == 2: + if numpyflag == 0: + print "Cannot return Numpy array w/out numpy package" + sys.exit() + # NOTE: next line gives ctypes warning for fieldtype = 2 = 64-bit int + # not sure why, reported as bug between ctypes and Numpy here: + # https://stackoverflow.com/questions/4964101/pep-3118- + # warning-when-using-ctypes-array-as-numpy-array + # but why not same warning when just using unpack() ?? + # in Python these lines give same warning: + # >>> import ctypes,numpy + # >>> a = (10 * ctypes.c_longlong)() + # >>> b = numpy.ctypeslib.as_array(a) + data = np.ctypeslib.as_array(cdata,shape=(nlocal*nper,)) + elif tflag == 3: + data = cdata + + return data + + # extract a library value + + def extract(self,flag): + return self.lib.cslib_extract(self.cs,flag) diff --git a/lib/message/cslib/src/cslib_wrap.cpp b/lib/message/cslib/src/cslib_wrap.cpp new file mode 100644 index 00000000000..c2d69eaf0d6 --- /dev/null +++ b/lib/message/cslib/src/cslib_wrap.cpp @@ -0,0 +1,239 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +// C style library interface to CSlib class + +#include +#include +#include +#include +#include + +#include "cslib_wrap.h" +#include "cslib.h" + +using namespace CSLIB_NS; + +// ---------------------------------------------------------------------- + +void cslib_open(int csflag, const char *mode, const void *ptr, + const void *pcomm, void **csptr) +{ + CSlib *cs = new CSlib(csflag,mode,ptr,pcomm); + *csptr = (void *) cs; +} + +// ---------------------------------------------------------------------- + +void cslib_open_fortran(int csflag, const char *mode, const char *str, + const void *pcomm, void **csptr) +{ + MPI_Comm ccomm; + void *pccomm = NULL; + + if (pcomm) { + MPI_Fint *fcomm = (MPI_Fint *) pcomm; + ccomm = MPI_Comm_f2c(*fcomm); + pccomm = &ccomm; + } + + CSlib *cs = new CSlib(csflag,mode,str,pccomm); + *csptr = (void *) cs; +} + +// ---------------------------------------------------------------------- + +void cslib_open_fortran_mpi_one(int csflag, const char *mode, + const void *pboth, const void *pcomm, + void **csptr) +{ + MPI_Comm ccomm,cboth; + void *pccomm,*pcboth; + + MPI_Fint *fcomm = (MPI_Fint *) pcomm; + ccomm = MPI_Comm_f2c(*fcomm); + pccomm = &ccomm; + + MPI_Fint *fboth = (MPI_Fint *) pboth; + cboth = MPI_Comm_f2c(*fboth); + pcboth = &cboth; + + CSlib *cs = new CSlib(csflag,mode,pcboth,pccomm); + *csptr = (void *) cs; +} + +// ---------------------------------------------------------------------- + +void cslib_close(void *ptr) +{ + CSlib *cs = (CSlib *) ptr; + delete cs; +} + +// ---------------------------------------------------------------------- + +void cslib_send(void *ptr, int msgID, int nfield) +{ + CSlib *cs = (CSlib *) ptr; + cs->send(msgID,nfield); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_int(void *ptr, int id, int value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_int(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_int64(void *ptr, int id, int64_t value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_int64(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_float(void *ptr, int id, float value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_float(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_double(void *ptr, int id, double value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_double(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_string(void *ptr, int id, char *value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_string(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack(void *ptr, int id, int ftype, int flen, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack(id,ftype,flen,data); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_parallel(void *ptr, int id, int ftype, + int nlocal, int *ids, int nper, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_parallel(id,ftype,nlocal,ids,nper,data); +} + +// ---------------------------------------------------------------------- + +int cslib_recv(void *ptr, int *nfield_caller, + int **fieldID_caller, int **fieldtype_caller, + int **fieldlen_caller) +{ + CSlib *cs = (CSlib *) ptr; + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + *nfield_caller = nfield; + *fieldID_caller = fieldID; + *fieldtype_caller = fieldtype; + *fieldlen_caller = fieldlen; + + return msgID; +} + +// ---------------------------------------------------------------------- + +int cslib_unpack_int(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_int(id); +} +// ---------------------------------------------------------------------- + +int64_t cslib_unpack_int64(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_int64(id); +} + +// ---------------------------------------------------------------------- + +float cslib_unpack_float(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_float(id); +} + +// ---------------------------------------------------------------------- + +double cslib_unpack_double(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_double(id); +} + +// ---------------------------------------------------------------------- + +char *cslib_unpack_string(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_string(id); +} + +// ---------------------------------------------------------------------- + +void *cslib_unpack(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack(id); +} + +// ---------------------------------------------------------------------- + +void cslib_unpack_data(void *ptr, int id, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->unpack(id,data); +} + +// ---------------------------------------------------------------------- + +void cslib_unpack_parallel(void *ptr, int id, int nlocal, int *ids, + int nper, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->unpack_parallel(id,nlocal,ids,nper,data); +} + +// ---------------------------------------------------------------------- + +int cslib_extract(void *ptr, int flag) +{ + CSlib *cs = (CSlib *) ptr; + return cs->extract(flag); +} diff --git a/lib/message/cslib/src/cslib_wrap.f90 b/lib/message/cslib/src/cslib_wrap.f90 new file mode 100644 index 00000000000..cd2e058b78c --- /dev/null +++ b/lib/message/cslib/src/cslib_wrap.f90 @@ -0,0 +1,147 @@ +! ISO_C_binding wrapper on CSlib C interface + +module cslib_wrap + +interface + subroutine cslib_open_fortran(csflag,mode,str,pcomm,ptr) bind(c) + use iso_c_binding + integer(c_int), value :: csflag + character(c_char) :: mode(*),str(*) + type(c_ptr), value :: pcomm + type(c_ptr) :: ptr + end subroutine cslib_open_fortran + + subroutine cslib_open_fortran_mpi_one(csflag,mode,pboth,pcomm,ptr) bind(c) + use iso_c_binding + integer(c_int), value :: csflag + character(c_char) :: mode(*) + type(c_ptr), value :: pboth,pcomm + type(c_ptr) :: ptr + end subroutine cslib_open_fortran_mpi_one + + subroutine cslib_close(ptr) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + end subroutine cslib_close + + subroutine cslib_send(ptr,msgID,nfield) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: msgID,nfield + end subroutine cslib_send + + subroutine cslib_pack_int(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + integer(c_int), value :: value + end subroutine cslib_pack_int + + subroutine cslib_pack_int64(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + integer(c_int64_t), value :: value + end subroutine cslib_pack_int64 + + subroutine cslib_pack_float(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + real(c_float), value :: value + end subroutine cslib_pack_float + + subroutine cslib_pack_double(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + real(c_double), value :: value + end subroutine cslib_pack_double + + subroutine cslib_pack_string(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + character(c_char) :: value(*) + end subroutine cslib_pack_string + + subroutine cslib_pack(ptr,id,ftype,flen,data) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id,ftype,flen + type(c_ptr), value :: data + end subroutine cslib_pack + + subroutine cslib_pack_parallel(ptr,id,ftype,nlocal,ids,nper,data) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id,ftype,nlocal,nper + type(c_ptr), value :: ids,data + end subroutine cslib_pack_parallel + + function cslib_recv(ptr,nfield,fieldID,fieldtype,fieldlen) bind(c) + use iso_c_binding + integer(c_int) :: cslib_recv + type(c_ptr), value :: ptr + integer(c_int) :: nfield + type(c_ptr) :: fieldID,fieldtype,fieldlen + end function cslib_recv + + function cslib_unpack_int(ptr,id) bind(c) + use iso_c_binding + integer(c_int) :: cslib_unpack_int + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_int + + function cslib_unpack_int64(ptr,id) bind(c) + use iso_c_binding + integer(c_int64_t) :: cslib_unpack_int64 + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_int64 + + function cslib_unpack_float(ptr,id) bind(c) + use iso_c_binding + real(c_float) :: cslib_unpack_float + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_float + + function cslib_unpack_double(ptr,id) bind(c) + use iso_c_binding + real(c_double) :: cslib_unpack_double + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_double + + function cslib_unpack_string(ptr,id) bind(c) + use iso_c_binding + type(c_ptr) :: cslib_unpack_string + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_string + + function cslib_unpack(ptr,id) bind(c) + use iso_c_binding + type(c_ptr) :: cslib_unpack + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack + + subroutine cslib_unpack_parallel(ptr,id,nlocal,ids,nper,data) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id,nlocal,nper + type(c_ptr), value :: ids,data + end subroutine cslib_unpack_parallel + + function cslib_extract(ptr,flag) bind(c) + use iso_c_binding + integer(c_int) :: cslib_extract + type(c_ptr), value :: ptr + integer(c_int), value :: flag + end function cslib_extract +end interface + +end module cslib_wrap diff --git a/lib/message/cslib/src/cslib_wrap.h b/lib/message/cslib/src/cslib_wrap.h new file mode 100644 index 00000000000..bf7df029c39 --- /dev/null +++ b/lib/message/cslib/src/cslib_wrap.h @@ -0,0 +1,54 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +/* C style library interface to CSlib class + ifdefs allow this file to be included in a C program +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +void cslib_open(int, const char *, const void *, const void *, void **); +void cslib_open_fortran(int, const char *, const char *, const void *, void **); +void cslib_open_fortran_mpi_one(int, const char *, const void *, + const void *, void **); +void cslib_close(void *); + +void cslib_send(void *, int, int); + +void cslib_pack_int(void *, int, int); +void cslib_pack_int64(void *, int, int64_t); +void cslib_pack_float(void *, int, float); +void cslib_pack_double(void *, int, double); +void cslib_pack_string(void *, int, char *); +void cslib_pack(void *, int, int, int, void *); +void cslib_pack_parallel(void *, int, int, int, int *, int, void *); + +int cslib_recv(void *, int *, int **, int **, int **); + +int cslib_unpack_int(void *, int); +int64_t cslib_unpack_int64(void *, int); +float cslib_unpack_float(void *, int); +double cslib_unpack_double(void *, int); +char *cslib_unpack_string(void *, int); +void *cslib_unpack(void *, int); +void cslib_unpack_data(void *, int, void *); +void cslib_unpack_parallel(void *, int, int, int *, int, void *); + +int cslib_extract(void *, int); + +#ifdef __cplusplus +} +#endif diff --git a/lib/message/cslib/src/msg.cpp b/lib/message/cslib/src/msg.cpp new file mode 100644 index 00000000000..c67e4a5c8cc --- /dev/null +++ b/lib/message/cslib/src/msg.cpp @@ -0,0 +1,110 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include + +#include "msg.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +Msg::Msg(int csflag, const void *ptr, MPI_Comm cworld) +{ + world = cworld; + MPI_Comm_rank(world,&me); + MPI_Comm_size(world,&nprocs); + + init(csflag); +} + +/* ---------------------------------------------------------------------- */ + +Msg::Msg(int csflag, const void *ptr) +{ + world = 0; + me = 0; + nprocs = 1; + + init(csflag); +} + +/* ---------------------------------------------------------------------- */ + +void Msg::init(int csflag) +{ + client = server = 0; + if (csflag == 0) client = 1; + else if (csflag == 1) server = 1; + + nsend = nrecv = 0; +} + +/* ---------------------------------------------------------------------- */ + +void Msg::allocate(int nheader, int &maxheader, int *&header, + int nbuf, int &maxbuf, char *&buf) +{ + if (nheader > maxheader) { + sfree(header); + maxheader = nheader; + header = (int *) smalloc(maxheader*sizeof(int)); + } + + if (nbuf > maxbuf) { + sfree(buf); + maxbuf = nbuf; + buf = (char *) smalloc(maxbuf*sizeof(char)); + } +} + +/* ---------------------------------------------------------------------- */ + +void *Msg::smalloc(int nbytes) +{ + if (nbytes == 0) return NULL; + void *ptr = (void *) malloc(nbytes); + if (ptr == NULL) { + char str[128]; + sprintf(str,"Failed to allocate %d bytes",nbytes); + } + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void Msg::sfree(void *ptr) +{ + if (ptr == NULL) return; + free(ptr); +} + +/* ---------------------------------------------------------------------- */ + +void Msg::error_all(const char *str) +{ + if (me == 0) printf("CSlib ERROR: %s\n",str); + MPI_Abort(world,1); +} + +/* ---------------------------------------------------------------------- */ + +void Msg::error_one(const char *str) +{ + printf("CSlib ERROR: %s\n",str); + MPI_Abort(world,1); +} diff --git a/lib/message/cslib/src/msg.h b/lib/message/cslib/src/msg.h new file mode 100644 index 00000000000..f75942b0278 --- /dev/null +++ b/lib/message/cslib/src/msg.h @@ -0,0 +1,52 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_H +#define MSG_H + +#include + +namespace CSLIB_NS { + +class Msg { + public: + int nsend,nrecv; + MPI_Comm world; + + Msg(int, const void *, MPI_Comm); + Msg(int, const void *); + virtual ~Msg() {} + virtual void send(int, int *, int, char *) = 0; + virtual void recv(int &, int *&, int &, char *&) = 0; + + protected: + int me,nprocs; + int client,server; + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int lengths[2]; + + void init(int); + void allocate(int, int &, int *&, int, int &, char *&); + void *smalloc(int); + void sfree(void *); + void error_all(const char *); + void error_one(const char *); +}; + + +} + +#endif diff --git a/lib/message/cslib/src/msg_file.cpp b/lib/message/cslib/src/msg_file.cpp new file mode 100644 index 00000000000..d97e249fad7 --- /dev/null +++ b/lib/message/cslib/src/msg_file.cpp @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_file.h" + +using namespace CSLIB_NS; + +#define MAXLINE 256 +#define SLEEP 0.1 // delay in CPU secs to check for message file + +/* ---------------------------------------------------------------------- */ + +MsgFile::MsgFile(int csflag, const void *ptr, MPI_Comm cworld) : + Msg(csflag, ptr, cworld) +{ + char *filename = (char *) ptr; + init(filename); +} + +/* ---------------------------------------------------------------------- */ + +MsgFile::MsgFile(int csflag, const void *ptr) : Msg(csflag, ptr) +{ + char *filename = (char *) ptr; + init(filename); +} + +/* ---------------------------------------------------------------------- */ + +MsgFile::~MsgFile() +{ + delete [] fileroot; +} + +/* ---------------------------------------------------------------------- */ + +void MsgFile::init(char *filename) +{ + int n = strlen(filename) + 1; + fileroot = new char[n]; + strcpy(fileroot,filename); +} + +/* ---------------------------------------------------------------------- */ + +void MsgFile::send(int nheader, int *header, int nbuf, char *buf) +{ + char filename[MAXLINE]; + + lengths[0] = nheader; + lengths[1] = nbuf; + + if (me == 0) { + if (client) sprintf(filename,"%s.%s",fileroot,"client"); + else if (server) sprintf(filename,"%s.%s",fileroot,"server"); + + fp = fopen(filename,"wb"); + if (!fp) error_one("send(): Could not open send message file"); + fwrite(lengths,sizeof(int),2,fp); + fwrite(header,sizeof(int),nheader,fp); + fwrite(buf,1,nbuf,fp); + fclose(fp); + } + + // create empty signal file + + if (me == 0) { + if (client) sprintf(filename,"%s.%s",fileroot,"client.signal"); + else if (server) sprintf(filename,"%s.%s",fileroot,"server.signal"); + fp = fopen(filename,"w"); + fclose(fp); + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgFile::recv(int &maxheader, int *&header, int &maxbuf, char *&buf) +{ + char filename[MAXLINE]; + + // wait until signal file exists to open message file + + if (me == 0) { + if (client) sprintf(filename,"%s.%s",fileroot,"server.signal"); + else if (server) sprintf(filename,"%s.%s",fileroot,"client.signal"); + + int delay = (int) (1000000 * SLEEP); + while (1) { + fp = fopen(filename,"r"); + if (fp) break; + usleep(delay); + } + fclose(fp); + + if (client) sprintf(filename,"%s.%s",fileroot,"server"); + else if (server) sprintf(filename,"%s.%s",fileroot,"client"); + fp = fopen(filename,"rb"); + if (!fp) error_one("recv(): Could not open recv message file"); + } + + // read and broadcast data + + if (me == 0) fread(lengths,sizeof(int),2,fp); + if (nprocs > 1) MPI_Bcast(lengths,2,MPI_INT,0,world); + + int nheader = lengths[0]; + int nbuf = lengths[1]; + allocate(nheader,maxheader,header,nbuf,maxbuf,buf); + + if (me == 0) fread(header,sizeof(int),nheader,fp); + if (nprocs > 1) MPI_Bcast(header,nheader,MPI_INT,0,world); + + if (me == 0) fread(buf,1,nbuf,fp); + if (nprocs > 1) MPI_Bcast(buf,nbuf,MPI_CHAR,0,world); + + // delete both message and signal file + + if (me == 0) { + fclose(fp); + unlink(filename); + if (client) sprintf(filename,"%s.%s",fileroot,"server.signal"); + else if (server) sprintf(filename,"%s.%s",fileroot,"client.signal"); + unlink(filename); + } +} diff --git a/lib/message/cslib/src/msg_file.h b/lib/message/cslib/src/msg_file.h new file mode 100644 index 00000000000..d6bd802607a --- /dev/null +++ b/lib/message/cslib/src/msg_file.h @@ -0,0 +1,40 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_FILE_H +#define MSG_FILE_H + +#include +#include "msg.h" + +namespace CSLIB_NS { + +class MsgFile : public Msg { + public: + MsgFile(int, const void *, MPI_Comm); + MsgFile(int, const void *); + ~MsgFile(); + void send(int, int *, int, char *); + void recv(int &, int *&, int &, char *&); + + private: + char *fileroot; + FILE *fp; + + void init(char *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/msg_mpi_one.cpp b/lib/message/cslib/src/msg_mpi_one.cpp new file mode 100644 index 00000000000..db11735b277 --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_one.cpp @@ -0,0 +1,82 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_mpi_one.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +MsgMPIOne::MsgMPIOne(int csflag, const void *ptr, MPI_Comm cworld) : + Msg(csflag, ptr, cworld) +{ + // NOTE: ideally would skip this call if mpi/two + init(ptr); +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPIOne::init(const void *ptr) +{ + MPI_Comm *pbothcomm = (MPI_Comm *) ptr; + bothcomm = *pbothcomm; + + if (client) { + MPI_Comm_size(world,&nprocs); + otherroot = nprocs; + } else if (server) { + otherroot = 0; + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPIOne::send(int nheader, int *header, int nbuf, char *buf) +{ + lengths[0] = nheader; + lengths[1] = nbuf; + + if (me == 0) { + MPI_Send(lengths,2,MPI_INT,otherroot,0,bothcomm); + MPI_Send(header,nheader,MPI_INT,otherroot,0,bothcomm); + MPI_Send(buf,nbuf,MPI_CHAR,otherroot,0,bothcomm); + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPIOne::recv(int &maxheader, int *&header, int &maxbuf, char *&buf) +{ + MPI_Status status; + + if (me == 0) MPI_Recv(lengths,2,MPI_INT,otherroot,0,bothcomm,&status); + if (nprocs > 1) MPI_Bcast(lengths,2,MPI_INT,0,world); + + int nheader = lengths[0]; + int nbuf = lengths[1]; + allocate(nheader,maxheader,header,nbuf,maxbuf,buf); + + if (me == 0) MPI_Recv(header,nheader,MPI_INT,otherroot,0,bothcomm,&status); + if (nprocs > 1) MPI_Bcast(header,nheader,MPI_INT,0,world); + + if (me == 0) MPI_Recv(buf,nbuf,MPI_CHAR,otherroot,0,bothcomm,&status); + if (nprocs > 1) MPI_Bcast(buf,nbuf,MPI_CHAR,0,world); +} diff --git a/lib/message/cslib/src/msg_mpi_one.h b/lib/message/cslib/src/msg_mpi_one.h new file mode 100644 index 00000000000..4b4140a3f70 --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_one.h @@ -0,0 +1,38 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_MPI_ONE_H +#define MSG_MPI_ONE_H + +#include "msg.h" + +namespace CSLIB_NS { + +class MsgMPIOne : public Msg { + public: + MsgMPIOne(int, const void *, MPI_Comm); + virtual ~MsgMPIOne() {} + void send(int, int *, int, char *); + void recv(int &, int *&, int &, char *&); + + protected: + MPI_Comm bothcomm; + int otherroot; + + void init(const void *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/msg_mpi_two.cpp b/lib/message/cslib/src/msg_mpi_two.cpp new file mode 100644 index 00000000000..e9a9e87eeba --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_two.cpp @@ -0,0 +1,81 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_mpi_two.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +MsgMPITwo::MsgMPITwo(int csflag, const void *ptr, MPI_Comm cworld) : + MsgMPIOne(csflag, ptr, cworld) +{ + char *filename = (char *) ptr; + init(filename); +} + +/* ---------------------------------------------------------------------- */ + +MsgMPITwo::~MsgMPITwo() +{ + // free the inter comm that spans both client and server + + MPI_Comm_free(&bothcomm); + MPI_Close_port(port); +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPITwo::init(char *filename) +{ + if (client) { + if (me == 0) { + FILE *fp = NULL; + while (!fp) { + fp = fopen(filename,"r"); + if (!fp) sleep(1); + } + fgets(port,MPI_MAX_PORT_NAME,fp); + //printf("Client port: %s\n",port); + fclose(fp); + } + + MPI_Bcast(port,MPI_MAX_PORT_NAME,MPI_CHAR,0,world); + MPI_Comm_connect(port,MPI_INFO_NULL,0,world,&bothcomm); + //if (me == 0) printf("CLIENT comm connect\n"); + if (me == 0) unlink(filename); + + } else if (server) { + MPI_Open_port(MPI_INFO_NULL,port); + + if (me == 0) { + //printf("Server name: %s\n",port); + FILE *fp = fopen(filename,"w"); + fprintf(fp,"%s",port); + fclose(fp); + } + + MPI_Comm_accept(port,MPI_INFO_NULL,0,world,&bothcomm); + //if (me == 0) printf("SERVER comm accept\n"); + } + + otherroot = 0; +} diff --git a/lib/message/cslib/src/msg_mpi_two.h b/lib/message/cslib/src/msg_mpi_two.h new file mode 100644 index 00000000000..7b31db5a63a --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_two.h @@ -0,0 +1,35 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_MPI_TWO_H +#define MSG_MPI_TWO_H + +#include "msg_mpi_one.h" + +namespace CSLIB_NS { + +class MsgMPITwo : public MsgMPIOne { + public: + MsgMPITwo(int, const void *, MPI_Comm); + ~MsgMPITwo(); + + private: + char port[MPI_MAX_PORT_NAME]; + + void init(char *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/msg_zmq.cpp b/lib/message/cslib/src/msg_zmq.cpp new file mode 100644 index 00000000000..c2d408f3a5d --- /dev/null +++ b/lib/message/cslib/src/msg_zmq.cpp @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_zmq.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +MsgZMQ::MsgZMQ(int csflag, const void *ptr, MPI_Comm cworld) : + Msg(csflag, ptr, cworld) +{ + char *port = (char *) ptr; + init(port); +} + +MsgZMQ::MsgZMQ(int csflag, const void *ptr) : Msg(csflag, ptr) +{ + char *port = (char *) ptr; + init(port); +} + +/* ---------------------------------------------------------------------- */ + +MsgZMQ::~MsgZMQ() +{ + if (me == 0) { + zmq_close(socket); + zmq_ctx_destroy(context); + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgZMQ::init(char *port) +{ +#ifdef ZMQ_NO + error_all("constructor(): Library not built with ZMQ support"); +#endif + + if (me == 0) { + int n = strlen(port) + 8; + char *socket_name = new char[n]; + strcpy(socket_name,"tcp://"); + strcat(socket_name,port); + + if (client) { + context = zmq_ctx_new(); + socket = zmq_socket(context,ZMQ_REQ); + zmq_connect(socket,socket_name); + } else if (server) { + context = zmq_ctx_new(); + socket = zmq_socket(context,ZMQ_REP); + int rc = zmq_bind(socket,socket_name); + if (rc) error_one("constructor(): Server could not make socket connection"); + } + + delete [] socket_name; + } +} + +/* ---------------------------------------------------------------------- + client/server sockets (REQ/REP) must follow this protocol: + client sends request (REQ) which server receives + server sends response (REP) which client receives + every exchange is of this form, server cannot initiate a send + thus each ZMQ send below has a following ZMQ recv, except last one + if client calls send(), it will next call recv() + if server calls send(), it will next call recv() from its wait loop + in either case, recv() issues a ZMQ recv to match last ZMQ send here +------------------------------------------------------------------------- */ + +void MsgZMQ::send(int nheader, int *header, int nbuf, char *buf) +{ + lengths[0] = nheader; + lengths[1] = nbuf; + + if (me == 0) { + zmq_send(socket,lengths,2*sizeof(int),0); + zmq_recv(socket,NULL,0,0); + } + + if (me == 0) { + zmq_send(socket,header,nheader*sizeof(int),0); + zmq_recv(socket,NULL,0,0); + } + + if (me == 0) zmq_send(socket,buf,nbuf,0); +} + +/* ---------------------------------------------------------------------- + client/server sockets (REQ/REP) must follow this protocol: + client sends request (REQ) which server receives + server sends response (REP) which client receives + every exchange is of this form, server cannot initiate a send + thus each ZMQ recv below has a following ZMQ send, except last one + if client calls recv(), it will next call send() to ping server again, + if server calls recv(), it will next call send() to respond to client + in either case, send() issues a ZMQ send to match last ZMQ recv here +------------------------------------------------------------------------- */ + +void MsgZMQ::recv(int &maxheader, int *&header, int &maxbuf, char *&buf) +{ + if (me == 0) { + zmq_recv(socket,lengths,2*sizeof(int),0); + zmq_send(socket,NULL,0,0); + } + if (nprocs > 1) MPI_Bcast(lengths,2,MPI_INT,0,world); + + int nheader = lengths[0]; + int nbuf = lengths[1]; + allocate(nheader,maxheader,header,nbuf,maxbuf,buf); + + if (me == 0) { + zmq_recv(socket,header,nheader*sizeof(int),0); + zmq_send(socket,NULL,0,0); + } + if (nprocs > 1) MPI_Bcast(header,nheader,MPI_INT,0,world); + + if (me == 0) zmq_recv(socket,buf,nbuf,0); + if (nprocs > 1) MPI_Bcast(buf,nbuf,MPI_CHAR,0,world); +} diff --git a/lib/message/cslib/src/msg_zmq.h b/lib/message/cslib/src/msg_zmq.h new file mode 100644 index 00000000000..c0621a26ff1 --- /dev/null +++ b/lib/message/cslib/src/msg_zmq.h @@ -0,0 +1,38 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_ZMQ_H +#define MSG_ZMQ_H + +#include "msg.h" + +namespace CSLIB_NS { + +class MsgZMQ : public Msg { + public: + MsgZMQ(int, const void *, MPI_Comm); + MsgZMQ(int, const void *); + ~MsgZMQ(); + void send(int, int *, int, char *); + void recv(int &, int *&, int &, char *&); + + private: + void *context,*socket; + + void init(char *); +}; + +} + +#endif diff --git a/src/MESSAGE/Install.sh b/src/MESSAGE/Install.sh new file mode 100644 index 00000000000..853dbddcdda --- /dev/null +++ b/src/MESSAGE/Install.sh @@ -0,0 +1,67 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# arg1 = file, arg2 = file it depends on + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +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/[^ \t]*message[^ \t]* //' ../Makefile.package + sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/message/cslib/src |' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/message/cslib/src |' ../Makefile.package + sed -i -e 's|^PKG_LIB =[ \t]*|&-lmessage |' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(message_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(message_SYSLIB) |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(message_SYSPATH) |' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*message.*$/d' ../Makefile.package.settings + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ..\/..\/lib\/message\/Makefile.lammps +' ../Makefile.package.settings + fi + +elif (test $1 = 0) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*message[^ \t]* //' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*message.*$/d' ../Makefile.package.settings + fi + +fi diff --git a/src/MESSAGE/fix_client_md.cpp b/src/MESSAGE/fix_client_md.cpp new file mode 100644 index 00000000000..aca5cd41f91 --- /dev/null +++ b/src/MESSAGE/fix_client_md.cpp @@ -0,0 +1,325 @@ +/* ---------------------------------------------------------------------- + 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_client_md.h" +#include "update.h" +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "force.h" +#include "memory.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; +using namespace FixConst; + +enum{OTHER,REAL,METAL}; +enum{SETUP=1,STEP}; +enum{DIM=1,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE}; +enum{FORCES=1,ENERGY,PRESSURE,ERROR}; + +/* ---------------------------------------------------------------------- */ + +FixClientMD::FixClientMD(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + 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) + error->all(FLERR,"Fix client/md requires 4-byte atom IDs"); + + if (strcmp(update->unit_style,"real") == 0) units = REAL; + else if (strcmp(update->unit_style,"metal") == 0) units = METAL; + else units = OTHER; + + scalar_flag = 1; + global_freq = 1; + extscalar = 1; + virial_flag = 1; + thermo_virial = 1; + + inv_nprocs = 1.0 / comm->nprocs; + if (domain->dimension == 2) + box[0][2] = box[1][2] = box[2][0] = box[2][1] = box[2][2] = 0.0; + + maxatom = 0; + xpbc = NULL; + + // unit conversion factors for REAL + // otherwise not needed + // message received in METAL units, convert to local REAL units + + fconvert = econvert = pconvert = 1.0; + if (units == REAL) { + fconvert = econvert = 23.06035; // eV -> Kcal/mole + pconvert = 0.986923; // bars -> atmospheres + } +} + +/* ---------------------------------------------------------------------- */ + +FixClientMD::~FixClientMD() +{ + memory->destroy(xpbc); + + CSlib *cs = (CSlib *) lmp->cslib; + + // all-done message to server + + cs->send(-1,0); + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + // clean-up + + delete cs; + lmp->cslib = NULL; +} + +/* ---------------------------------------------------------------------- */ + +int FixClientMD::setmask() +{ + int mask = 0; + mask |= POST_FORCE; + mask |= MIN_POST_FORCE; + mask |= THERMO_ENERGY; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::init() +{ + if (3*atom->natoms > INT_MAX) + error->all(FLERR,"Fix client/md max atoms is 1/3 of 2^31"); +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::setup(int vflag) +{ + CSlib *cs = (CSlib *) lmp->cslib; + + // SETUP send at beginning of each run + // required fields: DIM, PERIODICTY, ORIGIN, BOX, NATOMS, NTYPES, TYPES, COORDS + // optional fields: others in enum above + + int nfields = 8; + if (units == OTHER) nfields++; + if (atom->q_flag) nfields++; + + cs->send(SETUP,nfields); + + cs->pack_int(DIM,domain->dimension); + cs->pack(PERIODICITY,1,3,domain->periodicity); + + pack_box(); + cs->pack(ORIGIN,4,3,domain->boxlo); + cs->pack(BOX,4,9,&box[0][0]); + + cs->pack_int(NATOMS,atom->natoms); + cs->pack_int(NTYPES,atom->ntypes); + + cs->pack_parallel(TYPES,1,atom->nlocal,atom->tag,1,atom->type); + pack_coords(); + cs->pack_parallel(COORDS,4,atom->nlocal,atom->tag,3,xpbc); + + if (units == OTHER) cs->pack_string(UNITS,update->unit_style); + + if (atom->q_flag) + cs->pack_parallel(CHARGE,4,atom->nlocal,atom->tag,1,atom->q); + + // receive initial forces, energy, virial + + receive_fev(vflag); + + if (server_error) { + char str[64]; + sprintf(str,"Fix client/md received server error %d\n",server_error); + error->all(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::min_setup(int vflag) +{ + setup(vflag); +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::post_force(int vflag) +{ + int i,j,m; + + // energy and virial setup + + if (vflag) v_setup(vflag); + else evflag = 0; + + // STEP send every step + // required fields: COORDS + // optional fields: ORIGIN, BOX + + // send coords + + CSlib *cs = (CSlib *) lmp->cslib; + + int nfields = 1; + if (domain->box_change) nfields += 2; + + cs->send(STEP,nfields); + + pack_coords(); + cs->pack_parallel(COORDS,4,atom->nlocal,atom->tag,3,xpbc); + + if (domain->box_change) { + pack_box(); + cs->pack(ORIGIN,4,3,domain->boxlo); + cs->pack(BOX,4,9,&box[0][0]); + } + + // receive forces, energy, virial + + receive_fev(vflag); + + if (server_error) { + char str[64]; + sprintf(str,"Fix client/md received server error %d\n",server_error); + error->all(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::min_post_force(int vflag) +{ + post_force(vflag); +} + +/* ---------------------------------------------------------------------- + potential energy from server +------------------------------------------------------------------------- */ + +double FixClientMD::compute_scalar() +{ + return eng; +} + +/* ---------------------------------------------------------------------- + pack local coords into xpbc, enforcing PBC +------------------------------------------------------------------------- */ + +void FixClientMD::pack_coords() +{ + double **x = atom->x; + int nlocal = atom->nlocal; + + if (nlocal > maxatom) { + memory->destroy(xpbc); + maxatom = atom->nmax; + memory->create(xpbc,3*maxatom,"message:xpbc"); + } + + memcpy(xpbc,&x[0][0],3*nlocal*sizeof(double)); + + int j = 0; + for (int i = 0; i < nlocal; i++) { + domain->remap(&xpbc[j]); + j += 3; + } +} + +/* ---------------------------------------------------------------------- + pack box info into box = 3 edge vectors of simulation box +------------------------------------------------------------------------- */ + +void FixClientMD::pack_box() +{ + double *boxlo = domain->boxlo; + double *boxhi = domain->boxhi; + + box[0][0] = boxhi[0] - boxlo[0]; + box[0][1] = 0.0; + box[0][2] = 0.0; + box[1][0] = domain->xy; + box[1][1] = boxhi[1] - boxlo[1]; + box[1][2] = 0.0; + box[2][0] = domain->xz; + box[2][1] = domain->yz; + box[2][2] = boxhi[2] - boxlo[2]; +} + +/* ---------------------------------------------------------------------- + receive message from server + required fields: FORCES, ENERGY, PRESSURE + optional field: ERROR +------------------------------------------------------------------------- */ + +void FixClientMD::receive_fev(int vflag) +{ + CSlib *cs = (CSlib *) lmp->cslib; + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + double *forces = (double *) cs->unpack(FORCES); + double **f = atom->f; + int nlocal = atom->nlocal; + bigint natoms = atom->natoms; + int m; + + int j = 0; + for (tagint id = 1; id <= natoms; id++) { + m = atom->map(id); + if (m < 0 || m >= nlocal) j += 3; + else { + f[m][0] += fconvert * forces[j++]; + f[m][1] += fconvert * forces[j++]; + f[m][2] += fconvert * forces[j++]; + } + } + + eng = econvert * cs->unpack_double(ENERGY); + + if (vflag) { + double *v = (double *) cs->unpack(PRESSURE); + + double nktv2p = force->nktv2p; + double volume = domain->xprd * domain->yprd * domain->zprd; + double factor = inv_nprocs * pconvert * volume / nktv2p; + + for (int i = 0; i < 6; i++) + virial[i] = factor * v[i]; + } + + // error return + + server_error = 0; + if (nfield == 4) server_error = cs->unpack_int(ERROR); +} diff --git a/src/MESSAGE/fix_client_md.h b/src/MESSAGE/fix_client_md.h new file mode 100644 index 00000000000..1c874c7278e --- /dev/null +++ b/src/MESSAGE/fix_client_md.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 FIX_CLASS + +FixStyle(client/md,FixClientMD) + +#else + +#ifndef LMP_FIX_CLIENT_MD_H +#define LMP_FIX_CLIENT_MD_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixClientMD : public Fix { + public: + FixClientMD(class LAMMPS *, int, char **); + ~FixClientMD(); + int setmask(); + void init(); + void setup(int); + void min_setup(int); + void post_force(int); + void min_post_force(int); + double compute_scalar(); + + private: + int maxatom,units,server_error; + double eng; + double inv_nprocs; + double fconvert,econvert,pconvert; + double box[3][3]; + double *xpbc; + + void pack_coords(); + void pack_box(); + void receive_fev(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/MESSAGE/message.cpp b/src/MESSAGE/message.cpp new file mode 100644 index 00000000000..329ce1fbd9e --- /dev/null +++ b/src/MESSAGE/message.cpp @@ -0,0 +1,90 @@ +/* ---------------------------------------------------------------------- + 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 "message.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; + +// customize by adding a new server protocol enum + +enum{MD,MC}; + +/* ---------------------------------------------------------------------- */ + +void Message::command(int narg, char **arg) +{ + if (narg < 3) error->all(FLERR,"Illegal message command"); + + int clientserver; + if (strcmp(arg[0],"client") == 0) clientserver = 1; + else if (strcmp(arg[0],"server") == 0) clientserver = 2; + else error->all(FLERR,"Illegal message command"); + lmp->clientserver = clientserver; + + // customize by adding a new server protocol + + int protocol; + if (strcmp(arg[1],"md") == 0) protocol = MD; + else if (strcmp(arg[1],"mc") == 0) protocol = MC; + else error->all(FLERR,"Unknown message protocol"); + + // instantiate CSlib with chosen communication mode + + if (strcmp(arg[2],"file") == 0 || strcmp(arg[2],"zmq") == 0 || + 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) + 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 + // other code being coupled to must perform similar operation + // client sends protocol with msgID = 0 + // server matches it and replies + + CSlib *cs = (CSlib *) lmp->cslib; + + if (clientserver == 1) { + cs->send(0,1); + cs->pack_string(1,arg[1]); + + 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"); + + } 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) + error->one(FLERR,"Mismatch in client/server protocol"); + + cs->send(0,0); + } +} diff --git a/src/MESSAGE/message.h b/src/MESSAGE/message.h new file mode 100644 index 00000000000..c384a5a7b7f --- /dev/null +++ b/src/MESSAGE/message.h @@ -0,0 +1,40 @@ +/* -*- 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(message,Message) + +#else + +#ifndef LMP_MESSAGE_H +#define LMP_MESSAGE_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Message : protected Pointers { + public: + Message(class LAMMPS *lmp) : Pointers(lmp) {}; + void command(int, char **); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/MESSAGE/server.cpp b/src/MESSAGE/server.cpp new file mode 100644 index 00000000000..f587fb76dfd --- /dev/null +++ b/src/MESSAGE/server.cpp @@ -0,0 +1,50 @@ +/* ---------------------------------------------------------------------- + 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 "server.h" +#include "error.h" + +// customize by adding a new server protocol include and enum + +#include "server_md.h" +#include "server_mc.h" + +using namespace LAMMPS_NS; + +enum{MD,MC}; + +/* ---------------------------------------------------------------------- */ + +void Server::command(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR,"Illegal server command"); + + if (lmp->clientserver != 2) + error->all(FLERR,"Message command not used to setup LAMMPS as a server"); + + // customize by adding a new server protocol + + int protocol; + if (strcmp(arg[0],"md") == 0) protocol = MD; + else if (strcmp(arg[0],"mc") == 0) protocol = MC; + else error->all(FLERR,"Unknown message protocol"); + + if (protocol == MD) { + ServerMD *server = new ServerMD(lmp); + server->loop(); + } else if (protocol == MC) { + ServerMC *server = new ServerMC(lmp); + server->loop(); + } +} diff --git a/src/MESSAGE/server.h b/src/MESSAGE/server.h new file mode 100644 index 00000000000..579f6ab6f12 --- /dev/null +++ b/src/MESSAGE/server.h @@ -0,0 +1,40 @@ +/* -*- 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(server,Server) + +#else + +#ifndef LMP_SERVER_H +#define LMP_SERVER_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Server : protected Pointers { + public: + Server(class LAMMPS *lmp) : Pointers(lmp) {}; + void command(int, char **); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/MESSAGE/server_mc.cpp b/src/MESSAGE/server_mc.cpp new file mode 100644 index 00000000000..8a7344e86b6 --- /dev/null +++ b/src/MESSAGE/server_mc.cpp @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + 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 "server_mc.h" +#include "atom.h" +#include "update.h" +#include "integrate.h" +#include "input.h" +#include "output.h" +#include "thermo.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; + +enum{NATOMS=1,EINIT,DISPLACE,ACCEPT,RUN}; + +/* ---------------------------------------------------------------------- */ + +ServerMC::ServerMC(LAMMPS *lmp) : Pointers(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void ServerMC::loop() +{ + int i,j,m; + double xold[3],xnew[3]; + tagint atomid; + + CSlib *cs = (CSlib *) lmp->cslib; + + // require atom map + + if (!atom->map_style) error->all(FLERR,"Server mode requires atom map"); + + // initialize LAMMPS for dynamics + + input->one("run 0"); + + //update->whichflag = 1; + //lmp->init(); + + // loop on messages + // receive a message, process it, send return message if necessary + + int msgID,nfield; + int *fieldID,*fieldtype,*fieldlen; + + while (1) { + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + if (msgID < 0) break; + + if (msgID == NATOMS) { + + cs->send(msgID,1); + cs->pack_int(1,atom->natoms); + + } else if (msgID == EINIT) { + + double dval; + output->thermo->evaluate_keyword((char *) "pe",&dval); + + cs->send(msgID,2); + cs->pack_double(1,dval); + double *coords = NULL; + if (atom->nlocal) coords = &atom->x[0][0]; + cs->pack_parallel(2,4,atom->nlocal,atom->tag,3,coords); + + } else if (msgID == DISPLACE) { + + atomid = cs->unpack_int(1); + double *xnew = (double *) cs->unpack(2); + double **x = atom->x; + + m = atom->map(atomid); + if (m >= 0 && m < atom->nlocal) { + xold[0] = x[m][0]; + xold[1] = x[m][1]; + xold[2] = x[m][2]; + x[m][0] = xnew[0]; + x[m][1] = xnew[1]; + x[m][2] = xnew[2]; + } + + input->one("run 0"); + double dval; + output->thermo->evaluate_keyword((char *) "pe",&dval); + + cs->send(msgID,1); + cs->pack_double(1,dval); + + } else if (msgID == ACCEPT) { + + int accept = cs->unpack_int(1); + double **x = atom->x; + + if (!accept) { + m = atom->map(atomid); + if (m >= 0 && m < atom->nlocal) { + x[m][0] = xold[0]; + x[m][1] = xold[1]; + x[m][2] = xold[2]; + } + } + + cs->send(msgID,0); + + } else if (msgID == RUN) { + + int nsteps = cs->unpack_int(1); + + //input->one("run 100"); + + update->nsteps = nsteps; + update->firststep = update->ntimestep; + update->laststep = update->ntimestep + nsteps; + + update->integrate->setup(1); + update->integrate->run(nsteps); + + cs->send(msgID,0); + + } else error->all(FLERR,"Server received unrecognized message"); + } + + // final reply to client + + cs->send(0,0); + + // clean up + + delete cs; + lmp->cslib = NULL; +} diff --git a/src/MESSAGE/server_mc.h b/src/MESSAGE/server_mc.h new file mode 100644 index 00000000000..d0fb4894292 --- /dev/null +++ b/src/MESSAGE/server_mc.h @@ -0,0 +1,29 @@ +/* -*- 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_SERVER_MC_H +#define LMP_SERVER_MC_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class ServerMC : protected Pointers { + public: + ServerMC(class LAMMPS *); + void loop(); +}; + +} + +#endif diff --git a/src/MESSAGE/server_md.cpp b/src/MESSAGE/server_md.cpp new file mode 100644 index 00000000000..aa771b7d465 --- /dev/null +++ b/src/MESSAGE/server_md.cpp @@ -0,0 +1,389 @@ +/* ---------------------------------------------------------------------- + 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 "server_md.h" +#include "atom.h" +#include "atom_vec.h" +#include "update.h" +#include "integrate.h" +#include "kspace.h" +#include "force.h" +#include "pair.h" +#include "neighbor.h" +#include "comm.h" +#include "domain.h" +#include "memory.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; + +enum{OTHER,REAL,METAL}; +enum{SETUP=1,STEP}; +enum{DIM=1,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE}; +enum{FORCES=1,ENERGY,PRESSURE,ERROR}; + +/* ---------------------------------------------------------------------- */ + +ServerMD::ServerMD(LAMMPS *lmp) : Pointers(lmp) +{ + if (domain->box_exist == 0) + error->all(FLERR,"Server command before simulation box is defined"); + + if (!atom->map_style) error->all(FLERR,"Server md requires atom map"); + if (atom->tag_enable == 0) error->all(FLERR,"Server md requires atom IDs"); + if (sizeof(tagint) != 4) error->all(FLERR,"Server md requires 4-byte atom IDs"); + + if (strcmp(update->unit_style,"real") == 0) units = REAL; + else if (strcmp(update->unit_style,"metal") == 0) units = METAL; + else units = OTHER; + + // unit conversion factors for REAL + // otherwise not needed + // local computation in REAL units, send message in METAL units + + fconvert = econvert = pconvert = 1.0; + if (units == REAL) { + fconvert = econvert = 1.0 / 23.06035; // Kcal/mole -> eV + pconvert = 1.0 / 0.986923; // atmospheres -> bars + } + + fcopy = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ServerMD::~ServerMD() +{ + memory->destroy(fcopy); +} + +/* ---------------------------------------------------------------------- */ + +void ServerMD::loop() +{ + int i,j,m; + + // cs = instance of CSlib + + CSlib *cs = (CSlib *) lmp->cslib; + + // counters + + int forcecalls = 0; + int neighcalls = 0; + + // loop on messages + // receive a message, process it, send return message + + int msgID,nfield; + int *fieldID,*fieldtype,*fieldlen; + + while (1) { + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + if (msgID < 0) break; + + // SETUP receive at beginning of each run + // required fields: DIM, PERIODICTY, ORIGIN, BOX, + // NATOMS, NTYPES, TYPES, COORDS + // optional fields: others in enum above + + if (msgID == SETUP) { + + int dim = 0; + int *periodicity = NULL; + int natoms = -1; + int ntypes = -1; + double *origin = NULL; + double *box = NULL; + int *types = NULL; + double *coords = NULL; + char *unit_style = NULL; + double *charge = NULL; + + for (int ifield = 0; ifield < nfield; ifield++) { + if (fieldID[ifield] == DIM) { + dim = cs->unpack_int(DIM); + if (dim != domain->dimension) + error->all(FLERR,"Server md dimension mis-match with client"); + } else if (fieldID[ifield] == PERIODICITY) { + periodicity = (int *) cs->unpack(PERIODICITY); + if (periodicity[0] != domain->periodicity[0] || + periodicity[1] != domain->periodicity[1] || + periodicity[2] != domain->periodicity[2]) + error->all(FLERR,"Server md periodicity mis-match with client"); + } else if (fieldID[ifield] == ORIGIN) { + origin = (double *) cs->unpack(ORIGIN); + } else if (fieldID[ifield] == BOX) { + box = (double *) cs->unpack(BOX); + } else if (fieldID[ifield] == NATOMS) { + natoms = cs->unpack_int(NATOMS); + if (3*natoms > INT_MAX) + error->all(FLERR,"Server md max atoms is 1/3 of 2^31"); + } else if (fieldID[ifield] == NTYPES) { + ntypes = cs->unpack_int(NTYPES); + if (ntypes != atom->ntypes) + error->all(FLERR,"Server md ntypes mis-match with client"); + } else if (fieldID[ifield] == TYPES) { + types = (int *) cs->unpack(TYPES); + } else if (fieldID[ifield] == COORDS) { + coords = (double *) cs->unpack(COORDS); + + } else if (fieldID[ifield] == UNITS) { + unit_style = (char *) cs->unpack(UNITS); + } else if (fieldID[ifield] == CHARGE) { + charge = (double *) cs->unpack(CHARGE); + } else error->all(FLERR,"Server md setup field unknown"); + } + + if (dim == 0 || !periodicity || !origin || !box || + natoms < 0 || ntypes < 0 || !types || !coords) + error->all(FLERR,"Required server md setup field not received"); + + if (unit_style && strcmp(unit_style,update->unit_style) != 0) + error->all(FLERR,"Server md does not match client units"); + + if (charge && atom->q_flag == 0) + error->all(FLERR,"Server md does not define atom attribute q"); + + // reset box, global and local + // reset proc decomposition + + 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); + + domain->set_initial_box(); + domain->set_global_box(); + comm->set_proc_grid(); + domain->set_local_box(); + + // clear all atoms + + atom->nlocal = 0; + atom->nghost = 0; + + // add atoms that are in my sub-box + + int nlocal = 0; + for (int i = 0; i < natoms; i++) { + if (!domain->ownatom(i+1,&coords[3*i],NULL,0)) continue; + atom->avec->create_atom(types[i],&coords[3*i]); + atom->tag[nlocal] = i+1; + if (charge) atom->q[nlocal] = charge[i]; + nlocal++; + } + + int ntotal; + MPI_Allreduce(&atom->nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); + if (ntotal != natoms) + error->all(FLERR,"Server md atom count does not match client"); + + atom->map_init(); + atom->map_set(); + atom->natoms = natoms; + + // allocate fcopy if needed + + if (units == REAL) { + memory->destroy(fcopy); + memory->create(fcopy,atom->nlocal,3,"server/md:fcopy"); + } + + // perform system setup() for dynamics + // also OK for minimization, since client runs minimizer + // return forces, energy, virial to client + + update->whichflag = 1; + lmp->init(); + update->integrate->setup_minimal(1); + neighcalls++; + forcecalls++; + + send_fev(msgID); + + // STEP receive at each timestep of run or minimization + // required fields: COORDS + // optional fields: ORIGIN, BOX + + } else if (msgID == STEP) { + + double *coords = NULL; + double *origin = NULL; + double *box = NULL; + + for (int ifield = 0; ifield < nfield; ifield++) { + if (fieldID[ifield] == COORDS) { + coords = (double *) cs->unpack(COORDS); + } else if (fieldID[ifield] == ORIGIN) { + origin = (double *) cs->unpack(ORIGIN); + } else if (fieldID[ifield] == BOX) { + box = (double *) cs->unpack(BOX); + } else error->all(FLERR,"Server md step field unknown"); + } + + if (!coords) + error->all(FLERR,"Required server md step field not received"); + + // change box size/shape, only if origin and box received + // 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) && + domain->triclinic == 0) + error->all(FLERR,"Server md is not initialized for a triclinic box"); + box_change(origin,box); + domain->set_global_box(); + domain->set_local_box(); + } + + // assign received coords to owned atoms + // closest_image() insures xyz matches current server PBC + + double **x = atom->x; + int nlocal = atom->nlocal; + int nall = atom->natoms; + + j = 0; + for (tagint id = 1; id <= nall; id++) { + m = atom->map(id); + if (m < 0 || m >= nlocal) j += 3; + else { + domain->closest_image(x[m],&coords[j],x[m]); + j += 3; + } + } + + // if no need to reneighbor: + // ghost comm + // setup_minimal(0) which just computes forces + // else: + // setup_minimal(1) for pbc, reset_box, reneigh, forces + + int nflag = neighbor->decide(); + if (nflag == 0) { + comm->forward_comm(); + update->integrate->setup_minimal(0); + } else { + update->integrate->setup_minimal(1); + neighcalls++; + } + + forcecalls++; + + send_fev(msgID); + + } else error->all(FLERR,"Server MD received unrecognized message"); + } + + // final reply to client + + cs->send(0,0); + + // stats + + if (comm->me == 0) { + if (screen) { + fprintf(screen,"Server MD calls = %d\n",forcecalls); + fprintf(screen,"Server MD reneighborings = %d\n",neighcalls); + } + if (logfile) { + fprintf(logfile,"Server MD calls = %d\n",forcecalls); + fprintf(logfile,"Server MD reneighborings %d\n",neighcalls); + } + } + + // clean up + + delete cs; + lmp->cslib = NULL; +} + +/* ---------------------------------------------------------------------- + box change due to received message +------------------------------------------------------------------------- */ + +void ServerMD::box_change(double *origin, double *box) +{ + domain->boxlo[0] = origin[0]; + domain->boxlo[1] = origin[1]; + domain->boxlo[2] = origin[2]; + + domain->boxhi[0] = origin[0] + box[0]; + domain->boxhi[1] = origin[1] + box[4]; + domain->boxhi[2] = origin[2] + box[8]; + + domain->xy = box[3]; + domain->xz = box[6]; + domain->yz = box[7]; +} + +/* ---------------------------------------------------------------------- + return message with forces, energy, pressure tensor + pressure tensor should be just pair and KSpace contributions + required fields: FORCES, ENERGY, PRESSURE + optional field: ERROR (not ever sending) +------------------------------------------------------------------------- */ + +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]; + else { + double **f = atom->f; + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + fcopy[i][0] = fconvert*f[i][0]; + fcopy[i][1] = fconvert*f[i][1]; + fcopy[i][2] = fconvert*f[i][2]; + } + forces = &fcopy[0][0]; + } + } + cs->pack_parallel(FORCES,4,atom->nlocal,atom->tag,3,forces); + + double eng = force->pair->eng_vdwl + force->pair->eng_coul; + double engall; + 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]; + MPI_Allreduce(&v,&vall,6,MPI_DOUBLE,MPI_SUM,world); + + if (force->kspace) + for (int i = 0; i < 6; i++) + vall[i] += force->kspace->virial[i]; + + double nktv2p = force->nktv2p; + double volume = domain->xprd * domain->yprd * domain->zprd; + double factor = pconvert / volume * nktv2p; + for (int i = 0; i < 6; i++) vall[i] *= factor; + + cs->pack(PRESSURE,4,6,vall); +} diff --git a/src/MESSAGE/server_md.h b/src/MESSAGE/server_md.h new file mode 100644 index 00000000000..289d70bdd8a --- /dev/null +++ b/src/MESSAGE/server_md.h @@ -0,0 +1,38 @@ +/* -*- 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_SERVER_MD_H +#define LMP_SERVER_MD_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class ServerMD : protected Pointers { + public: + ServerMD(class LAMMPS *); + ~ServerMD(); + void loop(); + + private: + int units; + double fconvert,econvert,pconvert; + double **fcopy; + + void box_change(double *, double *); + void send_fev(int); +}; + +} + +#endif diff --git a/src/Makefile b/src/Makefile index 948d203cfe0..b9cabfd67bb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -53,7 +53,7 @@ endif # PACKEXT = subset that require an external (downloaded) library PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \ - granular kim kokkos kspace latte manybody mc meam misc \ + granular kim kokkos kspace latte manybody mc meam message misc \ molecule mpiio mscg opt peri poems \ python qeq reax replica rigid shock snap spin srd voronoi @@ -65,14 +65,14 @@ PACKUSER = user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ user-quip user-reaxc user-smd user-smtbq user-sph user-tally \ user-uef user-vtk -PACKLIB = compress gpu kim kokkos latte meam mpiio mscg poems \ +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-smd user-vtk PACKSYS = compress mpiio python user-lb -PACKINT = gpu kokkos meam poems reax user-atc user-awpmd user-colvars +PACKINT = gpu kokkos meam message poems reax user-atc user-awpmd user-colvars PACKEXT = kim mscg voronoi \ user-h5md user-molfile user-netcdf user-qmmm user-quip \ diff --git a/src/atom.cpp b/src/atom.cpp index eb2f357890a..95f5406d959 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1533,7 +1533,8 @@ void Atom::set_mass(const char *file, int line, int /*narg*/, char **arg) } /* ---------------------------------------------------------------------- - set all masses as read in from restart file + set all masses + called from reading of restart file, also from ServerMD ------------------------------------------------------------------------- */ void Atom::set_mass(double *values) diff --git a/src/domain.cpp b/src/domain.cpp index 1eb848fe06a..4e9b4140509 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -1208,13 +1208,10 @@ int Domain::closest_image(double *pos, int j) /* ---------------------------------------------------------------------- find and return Xj image = periodic image of Xj that is closest to Xi for triclinic, add/subtract tilt factors in other dims as needed - not currently used (Jan 2017): - used to be called by pair TIP4P styles but no longer, - due to use of other closest_image() method + called by ServerMD class ------------------------------------------------------------------------- */ -void Domain::closest_image(const double * const xi, const double * const xj, - double * const xjimage) +void Domain::closest_image(double *xi, double *xj, double *xjimage) { double dx = xj[0] - xi[0]; double dy = xj[1] - xi[1]; diff --git a/src/domain.h b/src/domain.h index 5581f9a45fc..ed24116cf40 100644 --- a/src/domain.h +++ b/src/domain.h @@ -116,8 +116,7 @@ class Domain : protected Pointers { void minimum_image_once(double *); int closest_image(int, int); int closest_image(double *, int); - void closest_image(const double * const, const double * const, - double * const); + void closest_image(double *, double *, double *); void remap(double *, imageint &); void remap(double *); void remap_near(double *, double *); diff --git a/src/lammps.cpp b/src/lammps.cpp index df6519f9f4b..fcdfecf30a8 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -47,8 +47,8 @@ #include "accelerator_omp.h" #include "timer.h" #include "python.h" -#include "memory.h" #include "version.h" +#include "memory.h" #include "error.h" #include "lmpinstalledpkgs.h" @@ -73,12 +73,46 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) output = NULL; python = NULL; + clientserver = 0; + cslib = NULL; + cscomm = 0; + screen = NULL; logfile = NULL; infile = NULL; initclock = MPI_Wtime(); + // check if -mpi is first arg + // if so, then 2 apps were launched with one mpirun command + // this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS + // e.g. for client/server coupling with another code + // in the future LAMMPS might leverage this in other ways + // universe communicator needs to shrink to be just LAMMPS + // syntax: -mpi color + // color = integer for this app, different than other app(s) + // do the following: + // perform an MPI_Comm_split() to create a new LAMMPS-only subcomm + // NOTE: this assumes other app(s) does same thing, else will hang! + // re-create universe with subcomm + // store full multi-app comm in cscomm + // cscomm is used by CSLIB package to exchange messages w/ other app + + int iarg = 1; + if (narg-iarg >= 2 && (strcmp(arg[iarg],"-mpi") == 0 || + strcmp(arg[iarg],"-m") == 0)) { + int me,nprocs; + MPI_Comm_rank(communicator,&me); + MPI_Comm_size(communicator,&nprocs); + int color = atoi(arg[iarg+1]); + MPI_Comm subcomm; + MPI_Comm_split(communicator,color,me,&subcomm); + cscomm = communicator; + communicator = subcomm; + delete universe; + universe = new Universe(this,communicator); + } + // parse input switches int inflag = 0; @@ -107,59 +141,30 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) int *pfirst = NULL; int *plast = NULL; - int iarg = 1; + iarg = 1; while (iarg < narg) { - if (strcmp(arg[iarg],"-partition") == 0 || - strcmp(arg[iarg],"-p") == 0) { - universe->existflag = 1; + + if (strcmp(arg[iarg],"-echo") == 0 || + strcmp(arg[iarg],"-e") == 0) { if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - iarg++; - while (iarg < narg && arg[iarg][0] != '-') { - universe->add_world(arg[iarg]); - iarg++; - } + iarg += 2; + + } else if (strcmp(arg[iarg],"-help") == 0 || + strcmp(arg[iarg],"-h") == 0) { + if (iarg+1 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + helpflag = 1; + citeflag = 0; + iarg += 1; + } else if (strcmp(arg[iarg],"-in") == 0 || strcmp(arg[iarg],"-i") == 0) { if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); inflag = iarg + 1; iarg += 2; - } else if (strcmp(arg[iarg],"-screen") == 0 || - strcmp(arg[iarg],"-sc") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - screenflag = iarg + 1; - iarg += 2; - } else if (strcmp(arg[iarg],"-log") == 0 || - strcmp(arg[iarg],"-l") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - logflag = iarg + 1; - iarg += 2; - } else if (strcmp(arg[iarg],"-var") == 0 || - strcmp(arg[iarg],"-v") == 0) { - if (iarg+3 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - iarg += 3; - while (iarg < narg && arg[iarg][0] != '-') iarg++; - } else if (strcmp(arg[iarg],"-echo") == 0 || - strcmp(arg[iarg],"-e") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - iarg += 2; - } else if (strcmp(arg[iarg],"-pscreen") == 0 || - strcmp(arg[iarg],"-ps") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - partscreenflag = iarg + 1; - iarg += 2; - } else if (strcmp(arg[iarg],"-plog") == 0 || - strcmp(arg[iarg],"-pl") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - partlogflag = iarg + 1; - iarg += 2; + } else if (strcmp(arg[iarg],"-kokkos") == 0 || strcmp(arg[iarg],"-k") == 0) { if (iarg+2 > narg) @@ -172,6 +177,26 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) kkfirst = iarg; while (iarg < narg && arg[iarg][0] != '-') iarg++; kklast = iarg; + + } else if (strcmp(arg[iarg],"-log") == 0 || + strcmp(arg[iarg],"-l") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + logflag = iarg + 1; + iarg += 2; + + } else if (strcmp(arg[iarg],"-mpi") == 0 || + strcmp(arg[iarg],"-m") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + if (iarg != 1) error->universe_all(FLERR,"Invalid command-line argument"); + iarg += 2; + + } else if (strcmp(arg[iarg],"-nocite") == 0 || + strcmp(arg[iarg],"-nc") == 0) { + citeflag = 0; + iarg++; + } else if (strcmp(arg[iarg],"-package") == 0 || strcmp(arg[iarg],"-pk") == 0) { if (iarg+2 > narg) @@ -188,31 +213,32 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) else break; } plast[npack++] = iarg; - } else if (strcmp(arg[iarg],"-suffix") == 0 || - strcmp(arg[iarg],"-sf") == 0) { + + } else if (strcmp(arg[iarg],"-partition") == 0 || + strcmp(arg[iarg],"-p") == 0) { + universe->existflag = 1; if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - delete [] suffix; - delete [] suffix2; - suffix2 = NULL; - suffix_enable = 1; - // hybrid option to set fall-back for suffix2 - if (strcmp(arg[iarg+1],"hybrid") == 0) { - if (iarg+4 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - int n = strlen(arg[iarg+2]) + 1; - suffix = new char[n]; - strcpy(suffix,arg[iarg+2]); - n = strlen(arg[iarg+3]) + 1; - suffix2 = new char[n]; - strcpy(suffix2,arg[iarg+3]); - iarg += 4; - } else { - int n = strlen(arg[iarg+1]) + 1; - suffix = new char[n]; - strcpy(suffix,arg[iarg+1]); - iarg += 2; + iarg++; + while (iarg < narg && arg[iarg][0] != '-') { + universe->add_world(arg[iarg]); + iarg++; } + + } else if (strcmp(arg[iarg],"-plog") == 0 || + strcmp(arg[iarg],"-pl") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + partlogflag = iarg + 1; + iarg += 2; + + } else if (strcmp(arg[iarg],"-pscreen") == 0 || + strcmp(arg[iarg],"-ps") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + partscreenflag = iarg + 1; + iarg += 2; + } else if (strcmp(arg[iarg],"-reorder") == 0 || strcmp(arg[iarg],"-ro") == 0) { if (iarg+3 > narg) @@ -221,6 +247,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) error->universe_all(FLERR,"Cannot use -reorder after -partition"); universe->reorder(arg[iarg+1],arg[iarg+2]); iarg += 3; + } else if (strcmp(arg[iarg],"-restart") == 0 || strcmp(arg[iarg],"-r") == 0) { if (iarg+3 > narg) @@ -241,17 +268,47 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) wdfirst = iarg; while (iarg < narg && arg[iarg][0] != '-') iarg++; wdlast = iarg; - } else if (strcmp(arg[iarg],"-nocite") == 0 || - strcmp(arg[iarg],"-nc") == 0) { - citeflag = 0; - iarg++; - } else if (strcmp(arg[iarg],"-help") == 0 || - strcmp(arg[iarg],"-h") == 0) { - if (iarg+1 > narg) + + } else if (strcmp(arg[iarg],"-screen") == 0 || + strcmp(arg[iarg],"-sc") == 0) { + if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - helpflag = 1; - citeflag = 0; - iarg += 1; + screenflag = iarg + 1; + iarg += 2; + + } else if (strcmp(arg[iarg],"-suffix") == 0 || + strcmp(arg[iarg],"-sf") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + delete [] suffix; + delete [] suffix2; + suffix2 = NULL; + suffix_enable = 1; + // hybrid option to set fall-back for suffix2 + if (strcmp(arg[iarg+1],"hybrid") == 0) { + if (iarg+4 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + int n = strlen(arg[iarg+2]) + 1; + suffix = new char[n]; + strcpy(suffix,arg[iarg+2]); + n = strlen(arg[iarg+3]) + 1; + suffix2 = new char[n]; + strcpy(suffix2,arg[iarg+3]); + iarg += 4; + } else { + int n = strlen(arg[iarg+1]) + 1; + suffix = new char[n]; + strcpy(suffix,arg[iarg+1]); + iarg += 2; + } + + } else if (strcmp(arg[iarg],"-var") == 0 || + strcmp(arg[iarg],"-v") == 0) { + if (iarg+3 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + iarg += 3; + while (iarg < narg && arg[iarg][0] != '-') iarg++; + } else error->universe_all(FLERR,"Invalid command-line argument"); } @@ -595,6 +652,14 @@ LAMMPS::~LAMMPS() delete [] suffix; delete [] suffix2; + // free the MPI comm created by -mpi command-line arg processed in constructor + // it was passed to universe as if original universe world + // may have been split later by partitions, universe will free the splits + // free a copy of uorig here, so check in universe destructor will still work + + MPI_Comm copy = universe->uorig; + if (cscomm) MPI_Comm_free(©); + delete input; delete universe; delete error; @@ -814,6 +879,7 @@ void LAMMPS::help() "-in filename : read input from file, not stdin (-i)\n" "-kokkos on/off ... : turn KOKKOS mode on or off (-k)\n" "-log none/filename : where to send log output (-l)\n" + "-mpicolor color : which exe in a multi-exe mpirun cmd (-m)\n" "-nocite : disable writing log.cite file (-nc)\n" "-package style ... : invoke package command (-pk)\n" "-partition size1 size2 ... : assign partition sizes (-p)\n" diff --git a/src/lammps.h b/src/lammps.h index b2c86734710..5ccef3026ed 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -51,6 +51,10 @@ class LAMMPS { int num_package; // number of cmdline package commands int cite_enable; // 1 if generating log.cite, 0 if disabled + int clientserver; // 0 = neither, 1 = client, 2 = server + void *cslib; // client/server messaging via CSlib + MPI_Comm cscomm; // MPI comm for client+server in mpi/one mode + class KokkosLMP *kokkos; // KOKKOS accelerator class class AtomKokkos *atomKK; // KOKKOS version of Atom class class MemoryKokkos *memoryKK; // KOKKOS version of Memory class