diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8f7ac9a6e7..0f99cc6274 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -37,7 +37,7 @@ include(PreventInSourceBuilds) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) #release comes with -O3 by default - set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) @@ -106,6 +106,8 @@ if(BUILD_LIB) endif() endif() +option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) + if(NOT BUILD_EXE AND NOT BUILD_LIB) message(FATAL_ERROR "You need to at least enable one of two following options: BUILD_LIB or BUILD_EXE") endif() @@ -222,6 +224,9 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-PLUMED OR PKG_USER-QUI find_package(LAPACK) find_package(BLAS) if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) + if(CMAKE_GENERATOR STREQUAL "Ninja") + status(FATAL_ERROR "Cannot build internal linear algebra library with Ninja build tool due to lack for Fortran support") + endif() enable_language(Fortran) file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/[^.]*.[fF]) add_library(linalg STATIC ${LAPACK_SOURCES}) @@ -298,6 +303,7 @@ include(Packages/USER-QUIP) include(Packages/USER-QMMM) include(Packages/USER-VTK) include(Packages/KIM) +include(Packages/LATTE) include(Packages/MESSAGE) include(Packages/MSCG) include(Packages/COMPRESS) @@ -517,6 +523,19 @@ if(BUILD_EXE) set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) +endif() + +if(BUILD_TOOLS) + add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp) + install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR}) + + # ninja-build currently does not support fortran. thus we skip building this tool + if(NOT CMAKE_GENERATOR STREQUAL "Ninja") + message(STATUS "Skipping building 'chain.x' with Ninja build tool due to lack of Fortran support") + enable_language(Fortran) + add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f) + target_link_libraries(chain.x ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) + endif() enable_language(C) get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) @@ -525,7 +544,6 @@ if(BUILD_EXE) target_link_libraries(msi2lmp m) install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) - endif() include(Documentation) @@ -655,5 +673,10 @@ if(PKG_KOKKOS) message(STATUS "Kokkos Arch: ${KOKKOS_ARCH}") endif() if(PKG_KSPACE) - message(STATUS "Using ${FFT} as FFT") + message(STATUS "Using ${FFT} as primary FFT library") + if(FFT_SINGLE) + message(STATUS "Using single precision FFTs") + else() + message(STATUS "Using double precision FFTs") + endif() endif() diff --git a/cmake/Modules/Packages/KIM.cmake b/cmake/Modules/Packages/KIM.cmake index 21ebd0f8e0..8815f73881 100644 --- a/cmake/Modules/Packages/KIM.cmake +++ b/cmake/Modules/Packages/KIM.cmake @@ -13,6 +13,9 @@ if(PKG_KIM) endif() option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) if(DOWNLOAD_KIM) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded KIM-API library with Ninja build tool") + endif() message(STATUS "KIM-API download requested - we will build our own") enable_language(C) enable_language(Fortran) diff --git a/cmake/Modules/Packages/KSPACE.cmake b/cmake/Modules/Packages/KSPACE.cmake index dfa141de58..adca8b91a9 100644 --- a/cmake/Modules/Packages/KSPACE.cmake +++ b/cmake/Modules/Packages/KSPACE.cmake @@ -1,5 +1,5 @@ if(PKG_KSPACE) - option(FFT_SINGLE "Use single precision FFT instead of double" OFF) + option(FFT_SINGLE "Use single precision FFTs instead of double precision FFTs" OFF) set(FFTW "FFTW3") if(FFT_SINGLE) set(FFTW "FFTW3F") @@ -7,26 +7,30 @@ if(PKG_KSPACE) endif() find_package(${FFTW} QUIET) if(${FFTW}_FOUND) - set(FFT "${FFTW}" CACHE STRING "FFT library for KSPACE package") + set(FFT "FFTW3" CACHE STRING "FFT library for KSPACE package") else() set(FFT "KISS" CACHE STRING "FFT library for KSPACE package") endif() - set(FFT_VALUES KISS ${FFTW} MKL CUFFT) + set(FFT_VALUES KISS FFTW MKL CUFFT) set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES}) validate_option(FFT FFT_VALUES) string(TOUPPER ${FFT} FFT) - if(NOT FFT STREQUAL "KISS") - find_package(${FFT} REQUIRED) - if(NOT FFT STREQUAL "FFTW3F") - add_definitions(-DFFT_FFTW) - else() - add_definitions(-DFFT_${FFT}) - endif() - include_directories(${${FFT}_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${${FFT}_LIBRARIES}) + + if(FFT STREQUAL "FFTW3") + find_package(${FFTW} REQUIRED) + add_definitions(-DFFT_FFTW3) + include_directories(${${FFTW}_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${${FFTW}_LIBRARIES}) + elseif(FFT STREQUAL "MKL") + find_package(MKL REQUIRED) + add_definitions(-DFFT_MKL) + include_directories(${MKL_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) else() + # last option is KISSFFT add_definitions(-DFFT_KISS) endif() + set(FFT_PACK "array" CACHE STRING "Optimization for FFT") set(FFT_PACK_VALUES array pointer memcpy) set_property(CACHE FFT_PACK PROPERTY STRINGS ${FFT_PACK_VALUES}) diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index a709561562..de7116780b 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -11,6 +11,9 @@ if(PKG_LATTE) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") endif() + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded LATTE library with Ninja build tool") + endif() message(STATUS "LATTE download requested - we will build our own") include(ExternalProject) ExternalProject_Add(latte_build diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index e8744bc192..b442580583 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -11,6 +11,9 @@ if(PKG_MSCG) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") endif() + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded MSCG library with Ninja build tool") + endif() include(ExternalProject) if(NOT LAPACK_FOUND) set(EXTRA_MSCG_OPTS "-DLAPACK_LIBRARIES=${CMAKE_CURRENT_BINARY_DIR}/liblinalg.a") diff --git a/cmake/Modules/Packages/USER-PLUMED.cmake b/cmake/Modules/Packages/USER-PLUMED.cmake index 422527dd06..500558fc72 100644 --- a/cmake/Modules/Packages/USER-PLUMED.cmake +++ b/cmake/Modules/Packages/USER-PLUMED.cmake @@ -17,6 +17,9 @@ if(PKG_USER-PLUMED) option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) if(DOWNLOAD_PLUMED) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded Plumed library with Ninja build tool") + endif() if(BUILD_MPI) set(PLUMED_CONFIG_MPI "--enable-mpi") set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) diff --git a/cmake/Modules/Packages/USER-SCAFACOS.cmake b/cmake/Modules/Packages/USER-SCAFACOS.cmake index adb002081f..475f2585c8 100644 --- a/cmake/Modules/Packages/USER-SCAFACOS.cmake +++ b/cmake/Modules/Packages/USER-SCAFACOS.cmake @@ -13,6 +13,9 @@ if(PKG_USER-SCAFACOS) endif() option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) if(DOWNLOAD_SCAFACOS) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded ScaFaCoS library with Ninja build tool") + endif() message(STATUS "ScaFaCoS download requested - we will build our own") include(ExternalProject) ExternalProject_Add(scafacos_build diff --git a/cmake/Modules/Packages/VORONOI.cmake b/cmake/Modules/Packages/VORONOI.cmake index df4551b6e7..5ce974a7ae 100644 --- a/cmake/Modules/Packages/VORONOI.cmake +++ b/cmake/Modules/Packages/VORONOI.cmake @@ -7,6 +7,9 @@ if(PKG_VORONOI) endif() option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) if(DOWNLOAD_VORO) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded Voro++ library with Ninja build tool") + endif() message(STATUS "Voro++ download requested - we will build our own") include(ExternalProject) diff --git a/doc/lammps.1 b/doc/lammps.1 index f4a801779a..4685ad22a3 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "5 June 2019" "2019-06-05" +.TH LAMMPS "19 July 2019" "2019-07-19" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index 265c16e3d4..a16ba995a8 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -32,10 +32,18 @@ cmake \[options ...\] ../cmake # configuration with (command-line) cmake make # compilation :pre The cmake command will detect available features, enable selected -packages and options, and will generate the build environment. The make -command will then compile and link LAMMPS, producing (by default) an -executable called "lmp" and a library called "liblammps.a" in the -"build" folder. +packages and options, and will generate the build environment. By default +this build environment will be created for "Unix Makefiles" on most +platforms and particularly on Linux. However, alternate build tools +(e.g. Ninja) and support files for Integrated Development Environments +(IDE) like Eclipse, CodeBlocks, or Kate can be generated, too. This is +selected via the "-G" command line flag. For the rest of the documentation +we will assume that the build environment is generated for makefiles +and thus the make command will be used to compile and link LAMMPS as +indicated above, producing (by default) an executable called "lmp" and +a library called "liblammps.a" in the "build" folder. When generating +a build environment for the "Ninja" build tool, the build command would +be "ninja" instead of "make". If your machine has multiple CPU cores (most do these days), using a command like "make -jN" (with N being the number of available local diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 58ca148555..80f91d5291 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -50,11 +50,11 @@ An alphabetic list of all general LAMMPS commands. "dump"_dump.html, "dump adios"_dump_adios.html, "dump image"_dump_image.html, -"dump_modify"_dump_modify.html, "dump movie"_dump_image.html, "dump netcdf"_dump_netcdf.html, "dump netcdf/mpiio"_dump_netcdf.html, "dump vtk"_dump_vtk.html, +"dump_modify"_dump_modify.html, "dynamical_matrix"_dynamical_matrix.html, "echo"_echo.html, "fix"_fix.html, diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index fea085b4ed..6077fad8ec 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -222,6 +222,8 @@ OPT. "sph/rhosum"_pair_sph_rhosum.html, "sph/taitwater"_pair_sph_taitwater.html, "sph/taitwater/morris"_pair_sph_taitwater_morris.html, +"spin/dipole/cut"_pair_spin_dipole.html, +"spin/dipole/long"_pair_spin_dipole.html, "spin/dmi"_pair_spin_dmi.html, "spin/exchange"_pair_spin_exchange.html, "spin/magelec"_pair_spin_magelec.html, diff --git a/doc/src/Eqs/angle_class2_p6.tex b/doc/src/Eqs/angle_class2_p6.tex new file mode 100644 index 0000000000..37fd87e9ec --- /dev/null +++ b/doc/src/Eqs/angle_class2_p6.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E_{a} = K_2\left(\theta - \theta_0\right)^2 + K_3\left(\theta - \theta_0\right)^3 + K_4\left(\theta - \theta_0\right)^4 + K_5\left(\theta - \theta_0\right)^5 + K_6\left(\theta - \theta_0\right)^6 +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/angle_cosine_buck6d.tex b/doc/src/Eqs/angle_cosine_buck6d.tex new file mode 100644 index 0000000000..49be2fc8c2 --- /dev/null +++ b/doc/src/Eqs/angle_cosine_buck6d.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E = K \left[ 1 + \cos(n\theta - \theta_0)\right] +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/improper_inversion_harmonic.tex b/doc/src/Eqs/improper_inversion_harmonic.tex new file mode 100644 index 0000000000..a1607a1149 --- /dev/null +++ b/doc/src/Eqs/improper_inversion_harmonic.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E = K \left(\theta - \theta_0\right)^2 +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/pair_agni.tex b/doc/src/Eqs/pair_agni.tex new file mode 100644 index 0000000000..b9aa7882fc --- /dev/null +++ b/doc/src/Eqs/pair_agni.tex @@ -0,0 +1,18 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + F_i^u & = & \sum_t^{N_t}\alpha_t \cdot \exp\left[-\frac{\left(d_{i,t}^u\right)^2}{2l^2}\right] \\ + d_{i,t}^u & = & \left|\left| V_i^u(\eta) - V_t^u(\eta) \right|\right| \\ + V_i^u(\eta) & = & \sum_{j \neq i}\frac{r^u_{ij}}{r_{ij}} \cdot e^{-\left(\frac{r_{ij}}{\eta} \right)^2} \cdot f_d\left(r_{ij}\right) \\ + f_d\left(r_{ij}\right) & = & \frac{1}{2} \left[\cos\left(\frac{\pi r_{ij}}{R_c}\right) + 1 \right] +\end{eqnarray*} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/pair_buck6d.txt b/doc/src/Eqs/pair_buck6d.tex similarity index 91% rename from doc/src/Eqs/pair_buck6d.txt rename to doc/src/Eqs/pair_buck6d.tex index 4888444d8c..903c0685be 100644 --- a/doc/src/Eqs/pair_buck6d.txt +++ b/doc/src/Eqs/pair_buck6d.tex @@ -1,6 +1,7 @@ \documentclass[12pt]{article} \begin{document} +\pagestyle{empty} \begin{eqnarray*} E = A e^{-\kappa r} - \frac{C}{r^6} \cdot \frac{1}{1 + D r^{14}} \qquad r < r_c \\ diff --git a/doc/src/Eqs/pair_coul_gauss.tex b/doc/src/Eqs/pair_coul_gauss.tex new file mode 100644 index 0000000000..1eb9c05a6f --- /dev/null +++ b/doc/src/Eqs/pair_coul_gauss.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E = \frac{C_{q_i q_j}}{\epsilon r_{ij}}\,\, \textrm{erf}\left(\alpha_{ij} r_{ij}\right)\quad\quad\quad r < r_c +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index 1d635ed841..c55d3743ab 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -5890,6 +5890,11 @@ The element names in the ADP file do not match those requested. :dd The element names in the EAM file do not match those requested. :dd +{Incorrect format of ... section in data file} :dt + +Number or type of values per line in the given section of the data file +is not consistent with the requirements for this section. :dd + {Incorrect format in COMB potential file} :dt Incorrect number of words per line in the potential file. :dd diff --git a/doc/src/Install_linux.txt b/doc/src/Install_linux.txt index ec063e7a95..9aebd30c05 100644 --- a/doc/src/Install_linux.txt +++ b/doc/src/Install_linux.txt @@ -15,7 +15,8 @@ Binaries are available for different versions of Linux: "Pre-built Fedora Linux executables"_#fedora "Pre-built EPEL Linux executables (RHEL, CentOS)"_#epel "Pre-built OpenSuse Linux executables"_#opensuse -"Gentoo Linux executable"_#gentoo :all(b) +"Gentoo Linux executable"_#gentoo +"Arch Linux build-script"_#arch :all(b) :line @@ -168,3 +169,31 @@ for details. Thanks to Nicolas Bock and Christoph Junghans (LANL) for setting up this Gentoo capability. + +:line + +Archlinux build-script :h4,link(arch) + +LAMMPS is available via Arch's unofficial Arch User repository (AUR). + +There are three scripts available, named lammps, lammps-beta and lammps-git. +They respectively package the stable, patch and git releases. + +To install, you will need to have the git package installed. You may use +any of the above names in-place of lammps. + +$ git clone https://aur.archlinux.org/lammps.git :pre +$ cd lammps :pre +$ makepkg -s :pre +# makepkg -i :pre + +To update, you may repeat the above, or change into the cloned directory, +and execute the following, after which, if there are any changes, you may +use makepkg as above. + +$ git pull :pre + +Alternatively, you may use an AUR helper to install these packages. + +Note that the AUR provides build-scripts that download the source and +the build the package on your machine. diff --git a/doc/src/Eqs/dreiding_hbond.jpg b/doc/src/JPG/dreiding_hbond.jpg similarity index 100% rename from doc/src/Eqs/dreiding_hbond.jpg rename to doc/src/JPG/dreiding_hbond.jpg diff --git a/doc/src/Eqs/umbrella.jpg b/doc/src/JPG/umbrella.jpg similarity index 100% rename from doc/src/Eqs/umbrella.jpg rename to doc/src/JPG/umbrella.jpg diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 2fa9623f36..80d72aac57 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -5 Jun 2019 version :c,h2 +19 Jul 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/doc/src/PDF/USER-CGDNA.pdf b/doc/src/PDF/USER-CGDNA.pdf index 7fcf366015..2577875f68 100644 Binary files a/doc/src/PDF/USER-CGDNA.pdf and b/doc/src/PDF/USER-CGDNA.pdf differ diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 1528adc420..bd5addda6f 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -911,6 +911,8 @@ the usual manner via MD. Various pair, fix, and compute styles. src/SPIN: filenames -> commands "Howto spins"_Howto_spins.html +"pair_style spin/dipole/cut"_pair_spin_dipole.html +"pair_style spin/dipole/long"_pair_spin_dipole.html "pair_style spin/dmi"_pair_spin_dmi.html "pair_style spin/exchange"_pair_spin_exchange.html "pair_style spin/magelec"_pair_spin_magelec.html diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index fd33491253..99d29864dc 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -46,16 +46,15 @@ software version 7.5 or later must be installed on your system. See the discussion for the "GPU package"_Speed_gpu.html for details of how to check and do this. -NOTE: Kokkos with CUDA currently implicitly assumes that the MPI -library is CUDA-aware and has support for GPU-direct. This is not -always the case, especially when using pre-compiled MPI libraries -provided by a Linux distribution. This is not a problem when using -only a single GPU and a single MPI rank on a desktop. When running -with multiple MPI ranks, you may see segmentation faults without -GPU-direct support. These can be avoided by adding the flags "-pk -kokkos gpu/direct off"_Run_options.html to the LAMMPS command line or -by using the command "package kokkos gpu/direct off"_package.html in -the input file. +NOTE: Kokkos with CUDA currently implicitly assumes that the MPI library +is CUDA-aware. This is not always the case, especially when using +pre-compiled MPI libraries provided by a Linux distribution. This is not +a problem when using only a single GPU with a single MPI rank. When +running with multiple MPI ranks, you may see segmentation faults without +CUDA-aware MPI support. These can be avoided by adding the flags "-pk +kokkos cuda/aware off"_Run_options.html to the LAMMPS command line or by +using the command "package kokkos cuda/aware off"_package.html in the +input file. [Building LAMMPS with the KOKKOS package:] @@ -217,9 +216,8 @@ case, also packing/unpacking communication buffers on the host may give speedup (see the KOKKOS "package"_package.html command). Using CUDA MPS is recommended in this scenario. -Using a CUDA-aware MPI library with -support for GPU-direct is highly recommended. GPU-direct use can be -avoided by using "-pk kokkos gpu/direct no"_package.html. As above for +Using a CUDA-aware MPI library is highly recommended. CUDA-aware MPI use can be +avoided by using "-pk kokkos cuda/aware no"_package.html. As above for multi-core CPUs (and no GPU), if N is the number of physical cores/node, then the number of MPI tasks/node should not exceed N. diff --git a/doc/src/angle_table.txt b/doc/src/angle_table.txt index 6b9187e512..61c987f587 100644 --- a/doc/src/angle_table.txt +++ b/doc/src/angle_table.txt @@ -143,6 +143,16 @@ instructions on how to use the accelerated styles effectively. :line +[Restart info:] + +This angle style writes the settings for the "angle_style table" +command to "binary restart files"_restart.html, so a angle_style +command does not need to specified in an input script that reads a +restart file. However, the coefficient information is not stored in +the restart file, since it is tabulated in the potential files. Thus, +angle_coeff commands do need to be specified in the restart input +script. + [Restrictions:] This angle style can only be used if LAMMPS was built with the diff --git a/doc/src/bond_table.txt b/doc/src/bond_table.txt index fbf6eb5815..7235214af0 100644 --- a/doc/src/bond_table.txt +++ b/doc/src/bond_table.txt @@ -140,6 +140,16 @@ instructions on how to use the accelerated styles effectively. :line +[Restart info:] + +This bond style writes the settings for the "bond_style table" +command to "binary restart files"_restart.html, so a bond_style +command does not need to specified in an input script that reads a +restart file. However, the coefficient information is not stored in +the restart file, since it is tabulated in the potential files. Thus, +bond_coeff commands do need to be specified in the restart input +script. + [Restrictions:] This bond style can only be used if LAMMPS was built with the MOLECULE diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 87dbee57d6..53ed373aa5 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -171,42 +171,40 @@ The individual style names on the "Commands compute"_Commands_compute.html doc page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. -"ackland/atom"_compute_ackland_atom.html - +"ackland/atom"_compute_ackland_atom.html - determines the local lattice structure based on the Ackland formulation "adf"_compute_adf.html - angular distribution function of triples of atoms "aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom -"angle"_compute_angle.html - -"angle/local"_compute_angle_local.html - -"angle/local"_compute_bond_local.html - theta and energy of each angle +"angle"_compute_angle.html - energy of each angle sub-style +"angle/local"_compute_angle_local.html - theta and energy of each angle "angmom/chunk"_compute_angmom_chunk.html - angular momentum for each chunk -"basal/atom"_compute_basal_atom.html - +"basal/atom"_compute_basal_atom.html - calculates the hexagonal close-packed ā€œcā€ lattice vector of each atom "body/local"_compute_body_local.html - attributes of body sub-particles -"bond"_compute_bond.html - values computed by a bond style +"bond"_compute_bond.html - energy of each bond sub-style "bond/local"_compute_bond_local.html - distance and energy of each bond "centro/atom"_compute_centro_atom.html - centro-symmetry parameter for each atom "chunk/atom"_compute_chunk_atom.html - assign chunk IDs to each atom "chunk/spread/atom"_compute_chunk_spread_atom.html - spreads chunk values to each atom in chunk "cluster/atom"_compute_cluster_atom.html - cluster ID for each atom "cna/atom"_compute_cna_atom.html - common neighbor analysis (CNA) for each atom -"cnp/atom"_compute_cnp_atom.html - +"cnp/atom"_compute_cnp_atom.html - common neighborhood parameter (CNP) for each atom "com"_compute_com.html - center-of-mass of group of atoms "com/chunk"_compute_com_chunk.html - center-of-mass for each chunk "contact/atom"_compute_contact_atom.html - contact count for each spherical particle "coord/atom"_compute_coord_atom.html - coordination number for each atom "damage/atom"_compute_damage_atom.html - Peridynamic damage for each atom -"dihedral"_compute_dihedral.html - +"dihedral"_compute_dihedral.html - energy of each dihedral sub-style "dihedral/local"_compute_dihedral_local.html - angle of each dihedral "dilatation/atom"_compute_dilatation_atom.html - Peridynamic dilatation for each atom -"dipole/chunk"_compute_dipole_chunk.html - +"dipole/chunk"_compute_dipole_chunk.html - dipole vector and total dipole for each chunk "displace/atom"_compute_displace_atom.html - displacement of each atom "dpd"_compute_dpd.html - "dpd/atom"_compute_dpd_atom.html - -"edpd/temp/atom"_compute_edpd_temp_atom.html - -"entropy/atom"_compute_entropy_atom.html - +"edpd/temp/atom"_compute_edpd_temp_atom.html - per-atom temperature for each eDPD particle in a group +"entropy/atom"_compute_entropy_atom.html - pair entropy fingerprint of each atom "erotate/asphere"_compute_erotate_asphere.html - rotational energy of aspherical particles "erotate/rigid"_compute_erotate_rigid.html - rotational energy of rigid bodies "erotate/sphere"_compute_erotate_sphere.html - rotational energy of spherical particles -"erotate/sphere/atom"_compute_erotate_sphere.html - rotational energy for each spherical particle -"erotate/sphere/atom"_compute_erotate_sphere_atom.html - +"erotate/sphere/atom"_compute_erotate_sphere_atom.html - rotational energy for each spherical particle "event/displace"_compute_event_displace.html - detect event on atom displacement "fep"_compute_fep.html - "force/tally"_compute_tally.html - @@ -218,17 +216,17 @@ compute"_Commands_compute.html doc page are followed by one or more of "heat/flux"_compute_heat_flux.html - heat flux through a group of atoms "heat/flux/tally"_compute_tally.html - "hexorder/atom"_compute_hexorder_atom.html - bond orientational order parameter q6 -"improper"_compute_improper.html - +"improper"_compute_improper.html - energy of each improper sub-style "improper/local"_compute_improper_local.html - angle of each improper "inertia/chunk"_compute_inertia_chunk.html - inertia tensor for each chunk "ke"_compute_ke.html - translational kinetic energy "ke/atom"_compute_ke_atom.html - kinetic energy for each atom -"ke/atom/eff"_compute_ke_atom_eff.html - -"ke/eff"_compute_ke_eff.html - +"ke/atom/eff"_compute_ke_atom_eff.html - per-atom translational and radial kinetic energy in the electron force field model +"ke/eff"_compute_ke_eff.html - kinetic energy of a group of nuclei and electrons in the electron force field model "ke/rigid"_compute_ke_rigid.html - translational kinetic energy of rigid bodies -"meso/e/atom"_compute_meso_e_atom.html - -"meso/rho/atom"_compute_meso_rho_atom.html - -"meso/t/atom"_compute_meso_t_atom.html - +"meso/e/atom"_compute_meso_e_atom.html - per-atom internal energy of Smooth-Particle Hydrodynamics atoms +"meso/rho/atom"_compute_meso_rho_atom.html - per-atom mesoscopic density of Smooth-Particle Hydrodynamics atoms +"meso/t/atom"_compute_meso_t_atom.html - per-atom internal temperature of Smooth-Particle Hydrodynamics atoms "msd"_compute_msd.html - mean-squared displacement of group of atoms "msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk "msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms @@ -242,73 +240,72 @@ compute"_Commands_compute.html doc page are followed by one or more of "pe/tally"_compute_tally.html - "plasticity/atom"_compute_plasticity_atom.html - Peridynamic plasticity for each atom "pressure"_compute_pressure.html - total pressure and pressure tensor -"pressure/cylinder"_compute_pressure_cylinder.html - -"pressure/uef"_compute_pressure_uef.html - +"pressure/cylinder"_compute_pressure_cylinder.html - pressure tensor in cylindrical coordinates +"pressure/uef"_compute_pressure_uef.html - pressure tensor in the reference frame of an applied flow field "property/atom"_compute_property_atom.html - convert atom attributes to per-atom vectors/arrays "property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "property/local"_compute_property_local.html - convert local attributes to localvectors/arrays -"ptm/atom"_compute_ptm_atom.html - +"ptm/atom"_compute_ptm_atom.html - determines the local lattice structure based on the Polyhedral Template Matching method "rdf"_compute_rdf.html - radial distribution function g(r) histogram of group of atoms "reduce"_compute_reduce.html - combine per-atom quantities into a single global value "reduce/chunk"_compute_reduce_chunk.html - reduce per-atom quantities within each chunk "reduce/region"_compute_reduce.html - same as compute reduce, within a region "rigid/local"_compute_rigid_local.html - extract rigid body attributes -"saed"_compute_saed.html - +"saed"_compute_saed.html - electron diffraction intensity on a mesh of reciprocal lattice nodes "slice"_compute_slice.html - extract values from global vector or array "smd/contact/radius"_compute_smd_contact_radius.html - -"smd/damage"_compute_smd_damage.html - +"smd/damage"_compute_smd_damage.html - damage status of SPH particles in Smooth Mach Dynamics "smd/hourglass/error"_compute_smd_hourglass_error.html - -"smd/internal/energy"_compute_smd_internal_energy.html - -"smd/plastic/strain"_compute_smd_plastic_strain.html - -"smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html - -"smd/rho"_compute_smd_rho.html - -"smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html - -"smd/tlsph/dt"_compute_smd_tlsph_dt.html - +"smd/internal/energy"_compute_smd_internal_energy.html - per-particle enthalpy in Smooth Mach Dynamics +"smd/plastic/strain"_compute_smd_plastic_strain.html - equivalent plastic strain per particle in Smooth Mach Dynamics +"smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html - time rate of the equivalent plastic strain in Smooth Mach Dynamics +"smd/rho"_compute_smd_rho.html - per-particle mass density in Smooth Mach Dynamics +"smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html - deformation gradient in Smooth Mach Dynamics +"smd/tlsph/dt"_compute_smd_tlsph_dt.html - CFL-stable time increment per particle in Smooth Mach Dynamics "smd/tlsph/num/neighs"_compute_smd_tlsph_num_neighs.html - "smd/tlsph/shape"_compute_smd_tlsph_shape.html - "smd/tlsph/strain"_compute_smd_tlsph_strain.html - "smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html - -"smd/tlsph/stress"_compute_smd_tlsph_stress.html - -"smd/triangle/vertices"_compute_smd_triangle_vertices.html - +"smd/tlsph/stress"_compute_smd_tlsph_stress.html - per-particle Cauchy stress tensor for SPH particles "smd/triangle/vertices"_compute_smd_triangle_vertices.html - "smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html - "smd/ulsph/strain"_compute_smd_ulsph_strain.html - "smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html - -"smd/ulsph/stress"_compute_smd_ulsph_stress.html - -"smd/vol"_compute_smd_vol.html - +"smd/ulsph/stress"_compute_smd_ulsph_stress.html - per-particle Cauchy stress tensor and von Mises equivalent stress in Smooth Mach Dynamics +"smd/vol"_compute_smd_vol.html - per-particle volumes and their sum in Smooth Mach Dynamics "sna/atom"_compute_sna_atom.html - calculate bispectrum coefficients for each atom "snad/atom"_compute_sna_atom.html - derivative of bispectrum coefficients for each atom "snav/atom"_compute_sna_atom.html - virial contribution from bispectrum coefficients for each atom -"spin"_compute_spin.html - +"spin"_compute_spin.html - magnetic quantities for a system of atoms having spins "stress/atom"_compute_stress_atom.html - stress tensor for each atom -"stress/mop"_compute_stress_mop.html - -"stress/mop/profile"_compute_stress_mop.html - +"stress/mop"_compute_stress_mop.html - normal components of the local stress tensor using the method of planes +"stress/mop/profile"_compute_stress_mop.html - profile of the normal components of the local stress tensor using the method of planes "stress/tally"_compute_tally.html - -"tdpd/cc/atom"_compute_tdpd_cc_atom.html - +"tdpd/cc/atom"_compute_tdpd_cc_atom.html - per-atom chemical concentration of a specified species for each tDPD particle "temp"_compute_temp.html - temperature of group of atoms "temp/asphere"_compute_temp_asphere.html - temperature of aspherical particles "temp/body"_compute_temp_body.html - temperature of body particles "temp/chunk"_compute_temp_chunk.html - temperature of each chunk "temp/com"_compute_temp_com.html - temperature after subtracting center-of-mass velocity -"temp/cs"_compute_temp_cs.html - +"temp/cs"_compute_temp_cs.html - temperature based on the center-of-mass velocity of atom pairs that are bonded to each other "temp/deform"_compute_temp_deform.html - temperature excluding box deformation velocity -"temp/deform/eff"_compute_temp_deform_eff.html - -"temp/drude"_compute_temp_drude.html - -"temp/eff"_compute_temp_eff.html - +"temp/deform/eff"_compute_temp_deform_eff.html - temperature excluding box deformation velocity in the electron force field model +"temp/drude"_compute_temp_drude.html - temperature of Core-Drude pairs +"temp/eff"_compute_temp_eff.html - temperature of a group of nuclei and electrons in the electron force field model "temp/partial"_compute_temp_partial.html - temperature excluding one or more dimensions of velocity "temp/profile"_compute_temp_profile.html - temperature excluding a binned velocity profile "temp/ramp"_compute_temp_ramp.html - temperature excluding ramped velocity component "temp/region"_compute_temp_region.html - temperature of a region of atoms -"temp/region/eff"_compute_temp_region_eff.html - -"temp/rotate"_compute_temp_rotate.html - +"temp/region/eff"_compute_temp_region_eff.html - temperature of a region of nuclei and electrons in the electron force field model +"temp/rotate"_compute_temp_rotate.html - temperature of a group of atoms after subtracting out their center-of-mass and angular velocities "temp/sphere"_compute_temp_sphere.html - temperature of spherical particles -"temp/uef"_compute_temp_uef.html - +"temp/uef"_compute_temp_uef.html - kinetic energy tensor in the reference frame of an applied flow field "ti"_compute_ti.html - thermodynamic integration free energy values "torque/chunk"_compute_torque_chunk.html - torque applied on each chunk "vacf"_compute_vacf.html - velocity auto-correlation function of group of atoms "vcm/chunk"_compute_vcm_chunk.html - velocity of center-of-mass for each chunk "voronoi/atom"_compute_voronoi_atom.html - Voronoi volume and neighbors for each atom -"xrd"_compute_xrd.html - :ul +"xrd"_compute_xrd.html - x-ray diffraction intensity on a mesh of reciprocal lattice nodes :ul [Restrictions:] none diff --git a/doc/src/compute_tally.txt b/doc/src/compute_tally.txt index 6401be54e9..125eba1302 100644 --- a/doc/src/compute_tally.txt +++ b/doc/src/compute_tally.txt @@ -88,6 +88,8 @@ potentials only include the pair potential portion of the EAM interaction when used by this compute, not the embedding term. Also bonded or Kspace interactions do not contribute to this compute. +The computes in this package are not compatible with dynamic groups. + [Related commands:] {compute group/group}_compute_group_group.html, {compute diff --git a/doc/src/dihedral_table.txt b/doc/src/dihedral_table.txt index 3f679f5709..b3cfd37570 100644 --- a/doc/src/dihedral_table.txt +++ b/doc/src/dihedral_table.txt @@ -191,6 +191,16 @@ switch"_Run_options.html when you invoke LAMMPS, or you can use the See the "Speed packages"_Speed_packages.html doc page for more instructions on how to use the accelerated styles effectively. +[Restart info:] + +This dihedral style writes the settings for the "dihedral_style table" +command to "binary restart files"_restart.html, so a dihedral_style +command does not need to specified in an input script that reads a +restart file. However, the coefficient information is not stored in +the restart file, since it is tabulated in the potential files. Thus, +dihedral_coeff commands do need to be specified in the restart input +script. + [Restrictions:] This dihedral style can only be used if LAMMPS was built with the diff --git a/doc/src/dihedral_table_cut.txt b/doc/src/dihedral_table_cut.txt index b72f34e36e..560f5375a7 100644 --- a/doc/src/dihedral_table_cut.txt +++ b/doc/src/dihedral_table_cut.txt @@ -189,6 +189,16 @@ Note that one file can contain many sections, each with a tabulated potential. LAMMPS reads the file section by section until it finds one that matches the specified keyword. +[Restart info:] + +This dihedral style writes the settings for the "dihedral_style table/cut" +command to "binary restart files"_restart.html, so a dihedral_style +command does not need to specified in an input script that reads a +restart file. However, the coefficient information is not stored in +the restart file, since it is tabulated in the potential files. Thus, +dihedral_coeff commands do need to be specified in the restart input +script. + [Restrictions:] This dihedral style can only be used if LAMMPS was built with the diff --git a/doc/src/if.txt b/doc/src/if.txt index 20caf1a1ef..ceec8f55db 100644 --- a/doc/src/if.txt +++ b/doc/src/if.txt @@ -57,8 +57,7 @@ Boolean expression is FALSE, then no commands are executed. The syntax for Boolean expressions is described below. Each command (t1, f1, e1, etc) can be any valid LAMMPS input script -command, except an "include"_include.html command, which is not -allowed. If the command is more than one word, it must enclosed in +command. If the command is more than one word, it must enclosed in quotes, so it will be treated as a single argument, as in the examples above. diff --git a/doc/src/improper_fourier.txt b/doc/src/improper_fourier.txt index 8b2021dccd..1b569b3894 100644 --- a/doc/src/improper_fourier.txt +++ b/doc/src/improper_fourier.txt @@ -27,7 +27,7 @@ The {fourier} improper style uses the following potential: where K is the force constant and omega is the angle between the IL axis and the IJK plane: -:c,image(Eqs/umbrella.jpg) +:c,image(JPG/umbrella.jpg) If all parameter (see bellow) is not zero, the all the three possible angles will taken in account. diff --git a/doc/src/improper_inversion_harmonic.txt b/doc/src/improper_inversion_harmonic.txt index 857eaecc5f..bf114daeb0 100644 --- a/doc/src/improper_inversion_harmonic.txt +++ b/doc/src/improper_inversion_harmonic.txt @@ -28,7 +28,7 @@ where K is the force constant and omega is the angle evaluated for all three axis-plane combinations centered around the atom I. For the IL axis and the IJK plane omega looks as follows: -:c,image(Eqs/umbrella.jpg) +:c,image(JPG/umbrella.jpg) Note that the {inversion/harmonic} angle term evaluation differs to the "improper_umbrella"_improper_umbrella.html due to the cyclic diff --git a/doc/src/improper_umbrella.txt b/doc/src/improper_umbrella.txt index 6c29ec7ac5..9fe6ac07e1 100644 --- a/doc/src/improper_umbrella.txt +++ b/doc/src/improper_umbrella.txt @@ -29,7 +29,7 @@ commonly referred to as a classic inversion and used in the where K is the force constant and omega is the angle between the IL axis and the IJK plane: -:c,image(Eqs/umbrella.jpg) +:c,image(JPG/umbrella.jpg) If omega0 = 0 the potential term has a minimum for the planar structure. Otherwise it has two minima at +/- omega0, with a barrier diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 2738c9b051..8abe9cffa1 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -647,6 +647,7 @@ pair_sph_lj.html pair_sph_rhosum.html pair_sph_taitwater.html pair_sph_taitwater_morris.html +pair_spin_dipole.html pair_spin_dmi.html pair_spin_exchange.html pair_spin_magelec.html diff --git a/doc/src/package.txt b/doc/src/package.txt index 6a6d17bcbc..edd409a842 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -64,7 +64,7 @@ args = arguments specific to the style :l {no_affinity} values = none {kokkos} args = keyword value ... zero or more keyword/value pairs may be appended - keywords = {neigh} or {neigh/qeq} or {neigh/thread} or {newton} or {binsize} or {comm} or {comm/exchange} or {comm/forward} or {comm/reverse} or {gpu/direct} + keywords = {neigh} or {neigh/qeq} or {neigh/thread} or {newton} or {binsize} or {comm} or {comm/exchange} or {comm/forward} or {comm/reverse} or {cuda/aware} {neigh} value = {full} or {half} full = full neighbor list half = half neighbor list built in thread-safe manner @@ -87,9 +87,9 @@ args = arguments specific to the style :l no = perform communication pack/unpack in non-KOKKOS mode host = perform pack/unpack on host (e.g. with OpenMP threading) device = perform pack/unpack on device (e.g. on GPU) - {gpu/direct} = {off} or {on} - off = do not use GPU-direct - on = use GPU-direct (default) + {cuda/aware} = {off} or {on} + off = do not use CUDA-aware MPI + on = use CUDA-aware MPI (default) {omp} args = Nthreads keyword value ... Nthread = # of OpenMP threads to associate with each MPI process zero or more keyword/value pairs may be appended @@ -520,19 +520,21 @@ pack/unpack communicated data. When running small systems on a GPU, performing the exchange pack/unpack on the host CPU can give speedup since it reduces the number of CUDA kernel launches. -The {gpu/direct} keyword chooses whether GPU-direct will be used. When +The {cuda/aware} keyword chooses whether CUDA-aware MPI will be used. When this keyword is set to {on}, buffers in GPU memory are passed directly through MPI send/receive calls. This reduces overhead of first copying -the data to the host CPU. However GPU-direct is not supported on all +the data to the host CPU. However CUDA-aware MPI is not supported on all systems, which can lead to segmentation faults and would require using a -value of {off}. If LAMMPS can safely detect that GPU-direct is not +value of {off}. If LAMMPS can safely detect that CUDA-aware MPI is not available (currently only possible with OpenMPI v2.0.0 or later), then -the {gpu/direct} keyword is automatically set to {off} by default. When -the {gpu/direct} keyword is set to {off} while any of the {comm} +the {cuda/aware} keyword is automatically set to {off} by default. When +the {cuda/aware} keyword is set to {off} while any of the {comm} keywords are set to {device}, the value for these {comm} keywords will be automatically changed to {host}. This setting has no effect if not -running on GPUs. GPU-direct is available for OpenMPI 1.8 (or later -versions), Mvapich2 1.9 (or later), and CrayMPI. +running on GPUs. CUDA-aware MPI is available for OpenMPI 1.8 (or later +versions), Mvapich2 1.9 (or later) when the "MV2_USE_CUDA" environment +variable is set to "1", CrayMPI, and IBM Spectrum MPI when the "-gpu" +flag is used. :line @@ -641,8 +643,8 @@ switch"_Run_options.html. For the KOKKOS package, the option defaults for GPUs are neigh = full, neigh/qeq = full, newton = off, binsize for GPUs = 2x LAMMPS default -value, comm = device, gpu/direct = on. When LAMMPS can safely detect -that GPU-direct is not available, the default value of gpu/direct +value, comm = device, cuda/aware = on. When LAMMPS can safely detect +that CUDA-aware MPI is not available, the default value of cuda/aware becomes "off". For CPUs or Xeon Phis, the option defaults are neigh = half, neigh/qeq = half, newton = on, binsize = 0.0, and comm = no. The option neigh/thread = on when there are 16K atoms or less on an MPI diff --git a/doc/src/pair_class2.txt b/doc/src/pair_class2.txt index 2d6b325fed..9e25560071 100644 --- a/doc/src/pair_class2.txt +++ b/doc/src/pair_class2.txt @@ -155,7 +155,7 @@ All of the lj/class2 pair styles write their information to "binary restart files"_restart.html, so pair_style and pair_coeff commands do not need to be specified in an input script that reads a restart file. -Only the {lj/class2} pair style support the use of the +Only the {lj/class2} and {lj/class2/coul/long} pair styles support the use of the {inner}, {middle}, and {outer} keywords of the "run_style respa"_run_style.html command, meaning the pairwise forces can be partitioned by distance at different levels of the rRESPA hierarchy. diff --git a/doc/src/pair_hbond_dreiding.txt b/doc/src/pair_hbond_dreiding.txt index 9dd0bed87f..ec470f601f 100644 --- a/doc/src/pair_hbond_dreiding.txt +++ b/doc/src/pair_hbond_dreiding.txt @@ -46,7 +46,7 @@ Here, {r} is the radial distance between the donor (D) and acceptor (A) atoms and {theta} is the bond angle between the acceptor, the hydrogen (H) and the donor atoms: -:c,image(Eqs/dreiding_hbond.jpg) +:c,image(JPG/dreiding_hbond.jpg) These 3-body interactions can be defined for pairs of acceptor and donor atoms, based on atom types. For each donor/acceptor atom pair, diff --git a/doc/src/pair_meamc.txt b/doc/src/pair_meamc.txt index 80f69b1a46..7c42e9d2f2 100644 --- a/doc/src/pair_meamc.txt +++ b/doc/src/pair_meamc.txt @@ -147,7 +147,8 @@ asub = "A" parameter for MEAM (see e.g. "(Baskes)"_#Baskes) :pre The alpha, b0, b1, b2, b3, t0, t1, t2, t3 parameters correspond to the standard MEAM parameters in the literature "(Baskes)"_#Baskes (the b -parameters are the standard beta parameters). The rozero parameter is +parameters are the standard beta parameters). Note that only parameters +normalized to t0 = 1.0 are supported. The rozero parameter is an element-dependent density scaling that weights the reference background density (see e.g. equation 4.5 in "(Gullet)"_#Gullet) and is typically 1.0 for single-element systems. The ibar parameter diff --git a/doc/src/pair_modify.txt b/doc/src/pair_modify.txt index 4824a3d83e..c446aa29d0 100644 --- a/doc/src/pair_modify.txt +++ b/doc/src/pair_modify.txt @@ -13,7 +13,8 @@ pair_modify command :h3 pair_modify keyword values ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {pair} or {shift} or {mix} or {table} or {table/disp} or {tabinner} or {tabinner/disp} or {tail} or {compute} :l +keyword = {pair} or {shift} or {mix} or {table} or {table/disp} or {tabinner} +or {tabinner/disp} or {tail} or {compute} or {nofdotr} :l {pair} values = sub-style N {special} which wt1 wt2 wt3 or sub-style N {compute/tally} flag sub-style = sub-style of "pair hybrid"_pair_hybrid.html @@ -33,7 +34,8 @@ keyword = {pair} or {shift} or {mix} or {table} or {table/disp} or {tabinner} or {tabinner/disp} value = cutoff cutoff = inner cutoff at which to begin table (distance units) {tail} value = {yes} or {no} - {compute} value = {yes} or {no} :pre + {compute} value = {yes} or {no} + {nofdotr} :pre :ule [Examples:] @@ -212,6 +214,10 @@ a pair style will not work, because the "kspace_style"_kspace_style.html command requires a Kspace-compatible pair style be defined. +The {nofdotr} keyword allows to disable an optimization that computes +the global stress tensor from the total forces and atom positions rather +than from summing forces between individual pairs of atoms. + :line The {special} keyword allows to override the 1-2, 1-3, and 1-4 diff --git a/doc/src/pair_oxdna.txt b/doc/src/pair_oxdna.txt index b63b5371cf..dfcd93c9a8 100644 --- a/doc/src/pair_oxdna.txt +++ b/doc/src/pair_oxdna.txt @@ -23,9 +23,11 @@ style1 = {hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxs style2 = {oxdna/excv} or {oxdna/stk} or {oxdna/hbond} or {oxdna/xstk} or {oxdna/coaxstk} args = list of arguments for these particular styles :ul - {oxdna/stk} args = seq T 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 + {oxdna/stk} args = seq T xi kappa 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 seq = seqav (for average sequence stacking strength) or seqdep (for sequence-dependent stacking strength) T = temperature (oxDNA units, 0.1 = 300 K) + xi = temperature-independent coefficient in stacking strength + kappa = coefficient of linear temperature dependence in stacking strength {oxdna/hbond} args = seq eps 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 seq = seqav (for average sequence base-pairing strength) or seqdep (for sequence-dependent base-pairing strength) eps = 1.077 (between base pairs A-T and C-G) or 0 (all other pairs) :pre @@ -34,7 +36,7 @@ args = list of arguments for these particular styles :ul pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqdep 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqdep 0.1 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 pair_coeff * * oxdna/hbond seqdep 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 1 4 oxdna/hbond seqdep 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 2 3 oxdna/hbond seqdep 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 @@ -62,7 +64,7 @@ NOTE: These pair styles have to be used together with the related oxDNA bond sty {oxdna/fene} for the connectivity of the phosphate backbone (see also documentation of "bond_style oxdna/fene"_bond_oxdna.html). Most of the coefficients in the above example have to be kept fixed and cannot be changed without reparameterizing the entire model. -Exceptions are the first and second coefficient after {oxdna/stk} (seq=seqdep and T=0.1 in the above example) +Exceptions are the first four coefficients after {oxdna/stk} (seq=seqdep, T=0.1, xi=1.3448 and kappa=2.6568 in the above example) and the first coefficient after {oxdna/hbond} (seq=seqdep in the above example). When using a Langevin thermostat, e.g. through "fix langevin"_fix_langevin.html or "fix nve/dotc/langevin"_fix_nve_dotc_langevin.html diff --git a/doc/src/pair_oxdna2.txt b/doc/src/pair_oxdna2.txt index f2963f7b17..3e462f384d 100644 --- a/doc/src/pair_oxdna2.txt +++ b/doc/src/pair_oxdna2.txt @@ -24,10 +24,12 @@ style1 = {hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/ style2 = {oxdna2/excv} or {oxdna2/stk} or {oxdna2/hbond} or {oxdna2/xstk} or {oxdna2/coaxstk} or {oxdna2/dh} args = list of arguments for these particular styles :ul - {oxdna2/stk} args = seq T 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 + {oxdna2/stk} args = seq T xi kappa 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 seq = seqav (for average sequence stacking strength) or seqdep (for sequence-dependent stacking strength) T = temperature (oxDNA units, 0.1 = 300 K) - {oxdna/hbond} args = seq eps 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 + xi = temperature-independent coefficient in stacking strength + kappa = coefficient of linear temperature dependence in stacking strength + {oxdna2/hbond} args = seq eps 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 seq = seqav (for average sequence base-pairing strength) or seqdep (for sequence-dependent base-pairing strength) eps = 1.0678 (between base pairs A-T and C-G) or 0 (all other pairs) {oxdna2/dh} args = T rhos qeff @@ -39,7 +41,7 @@ args = list of arguments for these particular styles :ul pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqdep 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqdep 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 pair_coeff * * oxdna2/hbond seqdep 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 1 4 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 2 3 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 @@ -68,8 +70,8 @@ NOTE: These pair styles have to be used together with the related oxDNA2 bond st {oxdna2/fene} for the connectivity of the phosphate backbone (see also documentation of "bond_style oxdna2/fene"_bond_oxdna.html). Most of the coefficients in the above example have to be kept fixed and cannot be changed without reparameterizing the entire model. -Exceptions are the first and the second coefficient after {oxdna2/stk} (seq=seqdep and T=0.1 in the above example), -the first coefficient after {oxdna/hbond} (seq=seqdep in the above example) and the three coefficients +Exceptions are the first four coefficients after {oxdna2/stk} (seq=seqdep, T=0.1, xi=1.3523 and kappa=2.6717 in the above example), +the first coefficient after {oxdna2/hbond} (seq=seqdep in the above example) and the three coefficients after {oxdna2/dh} (T=0.1, rhos=1.0, qeff=0.815 in the above example). When using a Langevin thermostat e.g. through "fix langevin"_fix_langevin.html or "fix nve/dotc/langevin"_fix_nve_dotc_langevin.html the temperature coefficients have to be matched to the one used in the fix. diff --git a/doc/src/pair_spin_dipole.txt b/doc/src/pair_spin_dipole.txt index 2f27f91d08..0d6471e07f 100644 --- a/doc/src/pair_spin_dipole.txt +++ b/doc/src/pair_spin_dipole.txt @@ -81,9 +81,3 @@ currently supported. "fix nve/spin"_fix_nve_spin.html [Default:] none - -:line - -:link(Allen2) -[(Allen)] Allen and Tildesley, Computer Simulation of Liquids, -Clarendon Press, Oxford, 1987. diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index e305bc705d..8a35e5a467 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -284,6 +284,8 @@ accelerated styles exist. "sph/rhosum"_pair_sph_rhosum.html - "sph/taitwater"_pair_sph_taitwater.html - "sph/taitwater/morris"_pair_sph_taitwater_morris.html - +"spin/dipole/cut"_pair_spin_dipole.html - +"spin/dipole/long"_pair_spin_dipole.html - "spin/dmi"_pair_spin_dmi.html - "spin/exchange"_pair_spin_exchange.html - "spin/magelec"_pair_spin_magelec.html - diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index babdd2d1cc..2f63f18bad 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -105,6 +105,7 @@ Pair Styles :h1 pair_sph_rhosum pair_sph_taitwater pair_sph_taitwater_morris + pair_spin_dipole pair_spin_dmi pair_spin_exchange pair_spin_magelec diff --git a/doc/src/read_data.txt b/doc/src/read_data.txt index 62112ea886..5fb91ba797 100644 --- a/doc/src/read_data.txt +++ b/doc/src/read_data.txt @@ -565,6 +565,7 @@ molecular: atom-ID molecule-ID atom-type x y z peri: atom-ID atom-type volume density x y z smd: atom-ID atom-type molecule volume mass kernel-radius contact-radius x y z sphere: atom-ID atom-type diameter density x y z +spin: atom-ID atom-type sp x y z spx spy spz template: atom-ID molecule-ID template-index template-atom atom-type x y z tri: atom-ID molecule-ID atom-type triangleflag density x y z wavepacket: atom-ID atom-type charge spin eradius etag cs_re cs_im x y z @@ -595,6 +596,8 @@ mux,muy,muz = components of dipole moment of atom (dipole units) q = charge on atom (charge units) rho = density (need units) for SPH particles spin = electron spin (+1/-1), 0 = nuclei, 2 = fixed-core, 3 = pseudo-cores (i.e. ECP) +sp = norm of magnetic spin of atom (in number of Bohr magnetons) +spx,spy,spz = components of magnetic spin of atom (adim normalized vector) template-atom = which atom within a template molecule the atom is template-index = which molecule within the molecule template the atom is part of theta = internal temperature of a DPD particle diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css b/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css index 58c5bec697..5e0d43b128 100644 --- a/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css +++ b/doc/utils/sphinx-config/_themes/lammps_theme/static/css/theme.css @@ -5092,4 +5092,17 @@ span[id*='MathJax-Span'] { src: local("Roboto Slab Bold"), local("RobotoSlab-Bold"), url(../fonts/RobotoSlab-Bold.ttf) format("truetype"); } +.codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'] { + font-size: 12px; + line-height: 1.5; + display: block; + overflow: auto; + color: #404040; + padding: 12px 12px; +} + +.codeblock,div[class^='highlight'] { + padding: 0; +} + /*# sourceMappingURL=theme.css.map */ diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a023c5b821..da5c869075 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -101,6 +101,7 @@ api Appl Apu arccos +Archlinux arcsin arg args @@ -1520,6 +1521,7 @@ Magdeburg magelec Maginn magneton +magnetons mainboard mainboards makefile @@ -1527,6 +1529,7 @@ Makefile makefiles Makefiles makelist +makepkg Makse malloc Malolepsza diff --git a/examples/USER/cgdna/README b/examples/USER/cgdna/README index 7b05418661..8a9dc44359 100644 --- a/examples/USER/cgdna/README +++ b/examples/USER/cgdna/README @@ -22,6 +22,17 @@ A - C - G - T - A - C - G - T | | | | | | | | T - G - C - A T - G - C - A +/examples/duplex3: +This is basically the duplex1 run with sequence-dependent stacking +and hydrogen-bonding strengths enabled and both nucleotide mass and +moment of inertia set to the value of the standalone implementation +of oxDNA (M = I = 1). To achieve this, the masses can be set directly +in the input and data file, whereas the moment of inertia is set via +the diameter of the ellipsoid in the data file and has a value of 3.16227766. +The change of mass and moment of inertia allows direct comparision of +e.g. trajectory data, energies or time-dependent observables on a per-timestep +basis until numerical noise causes deviations at later simulation times. + /util: This directory contains a simple python setup tool which creates single straight or helical DNA strands, DNA duplexes or arrays of DNA diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/data.duplex1 b/examples/USER/cgdna/examples/oxDNA/duplex1/data.duplex1 index 6aee3233dd..0ef671c603 100644 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/data.duplex1 +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/data.duplex1 @@ -32,7 +32,7 @@ Atoms 9 3 4.860249842674775e-01 3.518234140414733e-01 3.897628551303121e-01 2 1 1 10 4 5.999999999999996e-01 -1.332267629550188e-16 -1.110223024625157e-16 2 1 1 -# Atom-ID, translational, rotational velocity +# Atom-ID, translational velocity, angular momentum Velocities 1 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 b/examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 index 6485312731..34e17380af 100644 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/in.duplex1 @@ -1,6 +1,7 @@ variable number equal 1 variable ofreq equal 1000 variable efreq equal 1000 +variable T equal 0.1 units lj @@ -30,7 +31,7 @@ bond_coeff * 2.0 0.25 0.7525 # oxDNA pair interactions pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqav ${T} 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 @@ -39,9 +40,9 @@ pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1 # NVE ensemble fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 #fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 timestep 1e-5 @@ -72,6 +73,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 10000 +run 1000000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.18Jun19.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.18Jun19.duplex1.g++.1 new file mode 100644 index 0000000000..8b1c5c3807 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/log.18Jun19.duplex1.g++.1 @@ -0,0 +1,1165 @@ +LAMMPS (18 Jun 2019) +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + special bonds CPU = 5e-05 secs + read_data CPU = 0.001522 secs + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav ${T} 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqav 0.1 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 2.859 | 2.859 | 2.859 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4711818 0.0069384985 -1.4642433 2.5836586e-06 +1000 ekin = 0.00113448721737003 | erot = 0.00413455947734281 | epot = -14.6477022915193 | etot = -14.6424332448246 +2000 ekin = 0.00449927223902336 | erot = 0.0164446434455805 | epot = -14.6633771605337 | etot = -14.6424332448491 +3000 ekin = 0.00997964450841065 | erot = 0.0366523356056461 | epot = -14.6890652250033 | etot = -14.6424332448892 +4000 ekin = 0.0173888111295073 | erot = 0.0643039804300224 | epot = -14.7241260365031 | etot = -14.6424332449436 +5000 ekin = 0.0264744514136619 | erot = 0.0987844033142069 | epot = -14.7676920997383 | etot = -14.6424332450104 +6000 ekin = 0.0369277948556079 | erot = 0.139336571052566 | epot = -14.8186976109956 | etot = -14.6424332450875 +7000 ekin = 0.04839505571915 | erot = 0.185086295692081 | epot = -14.8759145965832 | etot = -14.642433245172 +8000 ekin = 0.0604909336920643 | erot = 0.235071307523532 | epot = -14.9379954864767 | etot = -14.6424332452611 +9000 ekin = 0.0728137406440561 | erot = 0.288273694501538 | epot = -15.003520680497 | etot = -14.6424332453514 +10000 ekin = 0.0849615563085878 | erot = 0.343654369293473 | epot = -15.0710491710418 | etot = -14.6424332454398 +11000 ekin = 0.0965486715045649 | erot = 0.400187932108223 | epot = -15.1391698491357 | etot = -14.6424332455229 +12000 ekin = 0.10722146628289 | erot = 0.456896095459165 | epot = -15.20655080734 | etot = -14.642433245598 +13000 ekin = 0.116672809719548 | erot = 0.512877765427643 | epot = -15.2719838208099 | etot = -14.6424332456627 +14000 ekin = 0.12465407373104 | erot = 0.567333962045116 | epot = -15.3344212814913 | etot = -14.6424332457151 +15000 ekin = 0.13098393968427 | erot = 0.619586028256667 | epot = -15.3930032136954 | etot = -14.6424332457544 +16000 ekin = 0.135553354544872 | erot = 0.669086028489761 | epot = -15.447072628815 | etot = -14.6424332457804 +17000 ekin = 0.138326263958247 | erot = 0.715418858085449 | epot = -15.4961783678372 | etot = -14.6424332457935 +18000 ekin = 0.139336096664052 | erot = 0.758296324627745 | epot = -15.5400656670872 | etot = -14.6424332457954 +19000 ekin = 0.138678360045177 | erot = 0.797544234275864 | epot = -15.5786558401088 | etot = -14.6424332457878 +20000 ekin = 0.136500074655373 | erot = 0.83308420441103 | epot = -15.6120175248394 | etot = -14.642433245773 +21000 ekin = 0.132987065285671 | erot = 0.864912408452581 | epot = -15.6403327194916 | etot = -14.6424332457533 +22000 ekin = 0.128350288213556 | erot = 0.893077649557994 | epot = -15.6638611835027 | etot = -14.6424332457311 +23000 ekin = 0.122812385135508 | erot = 0.917661024683964 | epot = -15.6829066555277 | etot = -14.6424332457083 +24000 ekin = 0.116595521408284 | erot = 0.938759014332096 | epot = -15.6977877814267 | etot = -14.6424332456863 +25000 ekin = 0.109911323474816 | erot = 0.956471207347236 | epot = -15.7088157764882 | etot = -14.6424332456662 +26000 ekin = 0.102953426207644 | erot = 0.970893163953198 | epot = -15.7162798358091 | etot = -14.6424332456483 +27000 ekin = 0.0958928250746637 | erot = 0.982114250194049 | epot = -15.7204403209013 | etot = -14.6424332456326 +28000 ekin = 0.0888759410950343 | erot = 0.990219731539835 | epot = -15.7215289182535 | etot = -14.6424332456186 +29000 ekin = 0.0820250748773376 | erot = 0.995296041202909 | epot = -15.719754361686 | etot = -14.6424332456058 +30000 ekin = 0.0754407616839748 | erot = 0.997437949320991 | epot = -15.7153119565981 | etot = -14.6424332455932 +31000 ekin = 0.0692054432610605 | erot = 0.996756332762285 | epot = -15.7083950216035 | etot = -14.6424332455802 +32000 ekin = 0.0633878377978472 | erot = 0.993385345349211 | epot = -15.699206428713 | etot = -14.6424332455659 +33000 ekin = 0.0580474070871663 | erot = 0.987487973309961 | epot = -15.6879686259471 | etot = -14.64243324555 +34000 ekin = 0.0532383791888181 | erot = 0.979259192921736 | epot = -15.6749308176426 | etot = -14.642433245532 +35000 ekin = 0.0490128758307997 | erot = 0.968926197407215 | epot = -15.66037231875 | etot = -14.642433245512 +36000 ekin = 0.0454228081410747 | erot = 0.95674540962595 | epot = -15.6446014632576 | etot = -14.6424332454906 +37000 ekin = 0.0425203357176436 | erot = 0.942996238000708 | epot = -15.6279498191869 | etot = -14.6424332454685 +38000 ekin = 0.0403568280949567 | erot = 0.92797176661665 | epot = -15.6107618401582 | etot = -14.6424332454466 +39000 ekin = 0.0389804214212708 | erot = 0.911966804110001 | epot = -15.5933804709572 | etot = -14.642433245426 +40000 ekin = 0.0384324238856422 | erot = 0.8952639595629 | epot = -15.5761296288567 | etot = -14.6424332454081 +41000 ekin = 0.0387429860408521 | erot = 0.878118672838247 | epot = -15.5592949042733 | etot = -14.6424332453942 +42000 ekin = 0.0399266053637504 | erot = 0.860744395135471 | epot = -15.5431042458848 | etot = -14.6424332453856 +43000 ekin = 0.0419781561011205 | erot = 0.843299365355946 | epot = -15.52771076684 | etot = -14.6424332453829 +44000 ekin = 0.0448701894086706 | erot = 0.825876603312506 | epot = -15.5131800381079 | etot = -14.6424332453867 +45000 ekin = 0.0485521857411509 | erot = 0.808498758184836 | epot = -15.4994841893228 | etot = -14.6424332453969 +46000 ekin = 0.0529522094031963 | erot = 0.791119212186772 | epot = -15.4865046670025 | etot = -14.6424332454125 +47000 ekin = 0.0579809824236739 | erot = 0.773630265882115 | epot = -15.4740444937379 | etot = -14.6424332454321 +48000 ekin = 0.063537784649307 | erot = 0.755878310836066 | epot = -15.4618493409392 | etot = -14.6424332454538 +49000 ekin = 0.0695169124457283 | erot = 0.737684732482629 | epot = -15.4496348904038 | etot = -14.6424332454754 +50000 ekin = 0.0758129058454745 | erot = 0.718870126218063 | epot = -15.4371162775588 | etot = -14.6424332454952 +51000 ekin = 0.082322663864191 | erot = 0.69927859951883 | epot = -15.4240345088949 | etot = -14.6424332455119 +52000 ekin = 0.0889431481334984 | erot = 0.67879880709845 | epot = -15.4101752007568 | etot = -14.6424332455248 +53000 ekin = 0.0955646689255781 | erot = 0.657379086769954 | epot = -15.3953770012299 | etot = -14.6424332455344 +54000 ekin = 0.102061477509349 | erot = 0.635035489168609 | epot = -15.3795302122192 | etot = -14.6424332455412 +55000 ekin = 0.108282960174 | erot = 0.611853171347129 | epot = -15.3625693770671 | etot = -14.6424332455459 +56000 ekin = 0.114049426281782 | erot = 0.58798294592476 | epot = -15.3444656177551 | etot = -14.6424332455485 +57000 ekin = 0.119155806186856 | erot = 0.563635255923989 | epot = -15.3252243076595 | etot = -14.6424332455486 +58000 ekin = 0.123384552305436 | erot = 0.539073355224011 | epot = -15.3048911530747 | etot = -14.6424332455453 +59000 ekin = 0.126526300954942 | erot = 0.514606324860975 | epot = -15.2835658713528 | etot = -14.6424332455369 +60000 ekin = 0.128404399836505 | erot = 0.490581338842491 | epot = -15.2614189842015 | etot = -14.6424332455225 +61000 ekin = 0.128898142362338 | erot = 0.46737389240369 | epot = -15.2387052802676 | etot = -14.6424332455016 +62000 ekin = 0.127959880290304 | erot = 0.445374820089083 | epot = -15.2157679458544 | etot = -14.642433245475 +63000 ekin = 0.125622870624957 | erot = 0.424973765390021 | epot = -15.1930298814589 | etot = -14.6424332454439 +64000 ekin = 0.121999044843205 | erot = 0.406539918574829 | epot = -15.1709722088285 | etot = -14.6424332454105 +65000 ekin = 0.117268056619305 | erot = 0.390401831022814 | epot = -15.1501031330194 | etot = -14.6424332453773 +66000 ekin = 0.111660385257246 | erot = 0.376828594080988 | epot = -15.1309222246848 | etot = -14.6424332453465 +67000 ekin = 0.105437746905138 | erot = 0.366014539812675 | epot = -15.1138855320384 | etot = -14.6424332453205 +68000 ekin = 0.0988737375607886 | erot = 0.3580690141562 | epot = -15.0993759970177 | etot = -14.6424332453007 +69000 ekin = 0.0922368286502271 | erot = 0.353011948772473 | epot = -15.0876820227105 | etot = -14.6424332452878 +70000 ekin = 0.085776901527448 | erot = 0.350775174164851 | epot = -15.0789853209745 | etot = -14.6424332452822 +71000 ekin = 0.0797156921642142 | erot = 0.351208844244805 | epot = -15.0733577816926 | etot = -14.6424332452835 +72000 ekin = 0.0742409440406418 | erot = 0.354092037745935 | epot = -15.0707662270776 | etot = -14.6424332452911 +73000 ekin = 0.0695037498701448 | erot = 0.359146526959505 | epot = -15.0710835221334 | etot = -14.6424332453038 +74000 ekin = 0.0656184497423043 | erot = 0.366052769876549 | epot = -15.0741044649392 | etot = -14.6424332453204 +75000 ekin = 0.0626644690389266 | erot = 0.374467290031506 | epot = -15.07956500441 | etot = -14.6424332453396 +76000 ekin = 0.0606895535086054 | erot = 0.384040683400738 | epot = -15.0871634822693 | etot = -14.64243324536 +77000 ekin = 0.0597139401235012 | erot = 0.394435495890075 | epot = -15.0965826813934 | etot = -14.6424332453798 +78000 ekin = 0.059735062986913 | erot = 0.405343151479082 | epot = -15.1075114598642 | etot = -14.6424332453982 +79000 ekin = 0.0607324264355555 | erot = 0.416499017639937 | epot = -15.1196646894892 | etot = -14.6424332454137 +80000 ekin = 0.06267229049498 | erot = 0.427694630236126 | epot = -15.1328001661568 | etot = -14.6424332454257 +81000 ekin = 0.0655118235328765 | erot = 0.438786127846728 | epot = -15.1467311968131 | etot = -14.6424332454335 +82000 ekin = 0.0692024020835893 | erot = 0.449698113828473 | epot = -15.1613337613493 | etot = -14.6424332454372 +83000 ekin = 0.0736917936906618 | erot = 0.460422490738957 | epot = -15.1765475298665 | etot = -14.6424332454369 +84000 ekin = 0.0789250526546722 | erot = 0.471012272293582 | epot = -15.1923705703818 | etot = -14.6424332454336 +85000 ekin = 0.0848440878750035 | erot = 0.481570908649162 | epot = -15.2088482419522 | etot = -14.642433245428 +86000 ekin = 0.0913860133254624 | erot = 0.492238169205216 | epot = -15.2260574279521 | etot = -14.6424332454214 +87000 ekin = 0.0984805441200046 | erot = 0.503174014616525 | epot = -15.2440878041518 | etot = -14.6424332454153 +88000 ekin = 0.106046830304297 | erot = 0.514542076496056 | epot = -15.263022152211 | etot = -14.6424332454106 +89000 ekin = 0.113990204127984 | erot = 0.526494309539207 | epot = -15.2829177590758 | etot = -14.6424332454087 +90000 ekin = 0.122199339151894 | erot = 0.539158097285698 | epot = -15.3037906818477 | etot = -14.6424332454101 +91000 ekin = 0.130544275971403 | erot = 0.552626637865723 | epot = -15.3256041592524 | etot = -14.6424332454152 +92000 ekin = 0.138875666148815 | erot = 0.566952900962156 | epot = -15.3482618125355 | etot = -14.6424332454245 +93000 ekin = 0.147025440614642 | erot = 0.582146933737432 | epot = -15.3716056197897 | etot = -14.6424332454376 +94000 ekin = 0.154808946847822 | erot = 0.598175891801207 | epot = -15.3954180841032 | etot = -14.6424332454542 +95000 ekin = 0.162028449602152 | erot = 0.614965942453837 | epot = -15.4194276375299 | etot = -14.6424332454739 +96000 ekin = 0.168477779667818 | erot = 0.632405154082029 | epot = -15.4433161792459 | etot = -14.642433245496 +97000 ekin = 0.17394786302672 | erot = 0.650346631628325 | epot = -15.4667277401752 | etot = -14.6424332455201 +98000 ekin = 0.178232875004242 | erot = 0.668611435745948 | epot = -15.4892775562957 | etot = -14.6424332455455 +99000 ekin = 0.181136831926353 | erot = 0.686991165056211 | epot = -15.5105612425543 | etot = -14.6424332455718 +100000 ekin = 0.182480533643598 | erot = 0.705250413407778 | epot = -15.5301641926495 | etot = -14.6424332455981 +101000 ekin = 0.182108871451935 | erot = 0.723129571003179 | epot = -15.547671688079 | etot = -14.6424332456239 +102000 ekin = 0.179898581170268 | erot = 0.740348571090314 | epot = -15.5626803979088 | etot = -14.6424332456482 +103000 ekin = 0.175766517608084 | erot = 0.756612167825837 | epot = -15.5748119311039 | etot = -14.64243324567 +104000 ekin = 0.169678431535445 | erot = 0.771617166851602 | epot = -15.5837288440751 | etot = -14.6424332456881 +105000 ekin = 0.161658036036865 | erot = 0.785061742962005 | epot = -15.5891530247 | etot = -14.6424332457012 +106000 ekin = 0.151795867650478 | erot = 0.796656613424597 | epot = -15.5908857267829 | etot = -14.6424332457078 +107000 ekin = 0.140257112952727 | erot = 0.806137449197231 | epot = -15.5888278078568 | etot = -14.6424332457068 +108000 ekin = 0.127287240201241 | erot = 0.813277564481104 | epot = -15.5829980503796 | etot = -14.6424332456973 +109000 ekin = 0.113214025490917 | erot = 0.817899691734432 | epot = -15.573546962904 | etot = -14.6424332456787 +110000 ekin = 0.0984444823805213 | erot = 0.819885578053921 | epot = -15.5607633060856 | etot = -14.6424332456512 +111000 ekin = 0.0834553769364569 | erot = 0.819182262545785 | epot = -15.545070885098 | etot = -14.6424332456157 +112000 ekin = 0.0687764915871027 | erot = 0.815804215094415 | epot = -15.5270139522555 | etot = -14.642433245574 +113000 ekin = 0.0549665904028903 | erot = 0.809830999844441 | epot = -15.5072308357759 | etot = -14.6424332455285 +114000 ekin = 0.0425830583120619 | erot = 0.801400700350953 | epot = -15.4864170041452 | etot = -14.6424332454821 +115000 ekin = 0.032147280213263 | erot = 0.790699910049051 | epot = -15.4652804357003 | etot = -14.642433245438 +116000 ekin = 0.024108778034577 | erot = 0.777951546674724 | epot = -15.4444935701085 | etot = -14.6424332453992 +117000 ekin = 0.0188117102728931 | erot = 0.763402004774069 | epot = -15.4246469604154 | etot = -14.6424332453684 +118000 ekin = 0.0164673894159043 | erot = 0.747309167856945 | epot = -15.4062098026203 | etot = -14.6424332453474 +119000 ekin = 0.0171359296532898 | erot = 0.729932564575393 | epot = -15.3895017395657 | etot = -14.642433245337 +120000 ekin = 0.0207190822430497 | erot = 0.711526526250247 | epot = -15.3746788538305 | etot = -14.6424332453372 +121000 ekin = 0.0269649552319816 | erot = 0.692336677373422 | epot = -15.3617348779522 | etot = -14.6424332453468 +122000 ekin = 0.0354839220297736 | erot = 0.672599570214091 | epot = -15.3505167376079 | etot = -14.642433245364 +123000 ekin = 0.0457738626451366 | erot = 0.652544850165416 | epot = -15.3407519581971 | etot = -14.6424332453865 +124000 ekin = 0.0572521324296466 | erot = 0.632399068066114 | epot = -15.3320844459074 | etot = -14.6424332454117 +125000 ekin = 0.0692913736002564 | erot = 0.612390156186006 | epot = -15.324114775223 | etot = -14.6424332454368 +126000 ekin = 0.0812564128172846 | erot = 0.592751635109578 | epot = -15.3164412933862 | etot = -14.6424332454593 +127000 ekin = 0.0925398817823717 | erot = 0.573725774407888 | epot = -15.3086989016675 | etot = -14.6424332454772 +128000 ekin = 0.102594692018529 | erot = 0.55556513894369 | epot = -15.3005930764509 | etot = -14.6424332454887 +129000 ekin = 0.110961953873462 | erot = 0.538532171478003 | epot = -15.291927370844 | etot = -14.6424332454925 +130000 ekin = 0.117293279472125 | erot = 0.52289666445339 | epot = -15.2826231894136 | etot = -14.642433245488 +131000 ekin = 0.121366644774014 | erot = 0.508931150171021 | epot = -15.2727310404203 | etot = -14.6424332454752 +132000 ekin = 0.123095155538848 | erot = 0.49690439090507 | epot = -15.2624327918984 | etot = -14.6424332454545 +133000 ekin = 0.122528239670491 | erot = 0.487073282996463 | epot = -15.2520347680938 | etot = -14.6424332454268 +134000 ekin = 0.119845042600695 | erot = 0.47967360116923 | epot = -15.2419518891638 | etot = -14.6424332453939 +135000 ekin = 0.115340171966309 | erot = 0.474910093714588 | epot = -15.2326835110385 | etot = -14.6424332453576 +136000 ekin = 0.10940241928465 | erot = 0.472946484072521 | epot = -15.2247821486777 | etot = -14.6424332453205 +137000 ekin = 0.102487634021818 | erot = 0.473895929917005 | epot = -15.2188168092237 | etot = -14.6424332452849 +138000 ekin = 0.0950874634047233 | erot = 0.477812435582745 | epot = -15.2153331442409 | etot = -14.6424332452534 +139000 ekin = 0.0876961121512815 | erot = 0.484683617748011 | epot = -15.2148129751279 | etot = -14.6424332452286 +140000 ekin = 0.0807775418431626 | erot = 0.494425108537478 | epot = -15.2176358955931 | etot = -14.6424332452125 +141000 ekin = 0.0747355681577817 | erot = 0.50687677080795 | epot = -15.2240455841725 | etot = -14.6424332452068 +142000 ekin = 0.0698891098450116 | erot = 0.521800821238808 | epot = -15.2341231762965 | etot = -14.6424332452127 +143000 ekin = 0.0664544171866063 | erot = 0.538881922424094 | epot = -15.2477695848413 | etot = -14.6424332452306 +144000 ekin = 0.0645355104692083 | erot = 0.557729316020225 | epot = -15.2646980717496 | etot = -14.6424332452602 +145000 ekin = 0.0641233595162911 | erot = 0.577881111412627 | epot = -15.2844377162297 | etot = -14.6424332453008 +146000 ekin = 0.0651036077515188 | erot = 0.598810893851628 | epot = -15.3063477469538 | etot = -14.6424332453507 +147000 ekin = 0.0672719578973601 | erot = 0.619936843681753 | epot = -15.3296420469868 | etot = -14.6424332454077 +148000 ekin = 0.0703557492692045 | erot = 0.640633538190902 | epot = -15.3534225329294 | etot = -14.6424332454693 +149000 ekin = 0.0740398128642427 | erot = 0.660246523237691 | epot = -15.3767195816347 | etot = -14.6424332455328 +150000 ekin = 0.0779944201058678 | erot = 0.678109590376156 | epot = -15.398537256077 | etot = -14.642433245595 +151000 ekin = 0.0819030604172323 | erot = 0.693564488648094 | epot = -15.4179007947185 | etot = -14.6424332456531 +152000 ekin = 0.0854878938552624 | erot = 0.705982563003889 | epot = -15.4339037025634 | etot = -14.6424332457043 +153000 ekin = 0.0885310147328532 | erot = 0.714787575382088 | epot = -15.4457518358609 | etot = -14.6424332457459 +154000 ekin = 0.0908901012887555 | erot = 0.719478762727528 | epot = -15.4528021097924 | etot = -14.6424332457761 +155000 ekin = 0.092507570371455 | erot = 0.719653046097721 | epot = -15.4545938622626 | etot = -14.6424332457934 +156000 ekin = 0.0934129479728847 | erot = 0.715025243753982 | epot = -15.4508714375239 | etot = -14.642433245797 +157000 ekin = 0.0937187435779626 | erot = 0.705445163946324 | epot = -15.4415971533109 | etot = -14.6424332457866 +158000 ekin = 0.0936106185393401 | erot = 0.690910554325706 | epot = -15.4269544186278 | etot = -14.6424332457627 +159000 ekin = 0.0933330174010987 | erot = 0.671575051659785 | epot = -15.4073413147871 | etot = -14.6424332457262 +160000 ekin = 0.0931716565242322 | erot = 0.647750492120645 | epot = -15.3833553943234 | etot = -14.6424332456785 +161000 ekin = 0.0934343296231438 | erot = 0.619903194016586 | epot = -15.3557707692612 | etot = -14.6424332456215 +162000 ekin = 0.0944314104804186 | erot = 0.588644098979611 | epot = -15.3255087550173 | etot = -14.6424332455572 +163000 ekin = 0.0964572425739502 | erot = 0.55471294345392 | epot = -15.2936034315161 | etot = -14.6424332454882 +164000 ekin = 0.0997733472806136 | erot = 0.518956918561936 | epot = -15.2611635112594 | etot = -14.6424332454169 +165000 ekin = 0.104594102019911 | erot = 0.482304549422426 | epot = -15.2293318967882 | etot = -14.6424332453459 +166000 ekin = 0.11107527651625 | erot = 0.445735768512381 | epot = -15.1992442903065 | etot = -14.6424332452778 +167000 ekin = 0.11930559751358 | erot = 0.410249354728318 | epot = -15.1719881974571 | etot = -14.6424332452152 +168000 ekin = 0.129301354725086 | erot = 0.37682904617874 | epot = -15.1485636460642 | etot = -14.6424332451604 +169000 ekin = 0.14100396578975 | erot = 0.346409702527097 | epot = -15.1298469134321 | etot = -14.6424332451152 +170000 ekin = 0.154280377439942 | erot = 0.319844892417961 | epot = -15.1165585149394 | etot = -14.6424332450815 +171000 ekin = 0.168926178621544 | erot = 0.297877221606916 | epot = -15.109236645289 | etot = -14.6424332450606 +172000 ekin = 0.184671319364511 | erot = 0.281112611137243 | epot = -15.108217175555 | etot = -14.6424332450532 +173000 ekin = 0.201188345437118 | erot = 0.269999595570268 | epot = -15.1136211860672 | etot = -14.6424332450598 +174000 ekin = 0.218103052207035 | erot = 0.264814547402982 | epot = -15.12535084469 | etot = -14.6424332450799 +175000 ekin = 0.235007413035623 | erot = 0.265653545950115 | epot = -15.1430942040986 | etot = -14.6424332451129 +176000 ekin = 0.251474534267915 | erot = 0.272431389432266 | epot = -15.1663391688573 | etot = -14.6424332451571 +177000 ekin = 0.267075225143436 | erot = 0.284887984978803 | epot = -15.1943964553329 | etot = -14.6424332452107 +178000 ekin = 0.281395553895287 | erot = 0.302602030915412 | epot = -15.2264308300819 | etot = -14.6424332452712 +179000 ekin = 0.294054514411866 | erot = 0.325011526057904 | epot = -15.2614992858055 | etot = -14.6424332453358 +180000 ekin = 0.304720692896942 | erot = 0.351440214935852 | epot = -15.2985941532343 | etot = -14.6424332454015 +181000 ekin = 0.313126658918426 | erot = 0.381128639602688 | epot = -15.3366885439866 | etot = -14.6424332454655 +182000 ekin = 0.319079775823621 | erot = 0.413268071114152 | epot = -15.374781092463 | etot = -14.6424332455252 +183000 ekin = 0.322468290005762 | erot = 0.447035301736728 | epot = -15.4119368373208 | etot = -14.6424332455783 +184000 ekin = 0.323261947554671 | erot = 0.48162615508044 | epot = -15.4473213482583 | etot = -14.6424332456231 +185000 ekin = 0.321506983530827 | erot = 0.516285658867815 | epot = -15.4802258880574 | etot = -14.6424332456588 +186000 ekin = 0.317316057633682 | erot = 0.550333132629112 | epot = -15.5100824359478 | etot = -14.642433245685 +187000 ekin = 0.310854440590084 | erot = 0.583180936761968 | epot = -15.5364686230541 | etot = -14.642433245702 +188000 ekin = 0.302324329763947 | erot = 0.614346238385429 | epot = -15.55910381386 | etot = -14.6424332457106 +189000 ekin = 0.291949445197116 | erot = 0.64345577901281 | epot = -15.5778384699217 | etot = -14.6424332457118 +190000 ekin = 0.279961942768254 | erot = 0.67024418570442 | epot = -15.5926393741794 | etot = -14.6424332457067 +191000 ekin = 0.266593185653664 | erot = 0.694546781233348 | epot = -15.6035732125832 | etot = -14.6424332456962 +192000 ekin = 0.252069141623363 | erot = 0.716288088786984 | epot = -15.6107904760917 | etot = -14.6424332456814 +193000 ekin = 0.236610293254145 | erot = 0.735467302242536 | epot = -15.6145108411597 | etot = -14.642433245663 +194000 ekin = 0.22043514940511 | erot = 0.75214194302714 | epot = -15.615010338074 | etot = -14.6424332456418 +195000 ekin = 0.20376588009334 | erot = 0.76641079902996 | epot = -15.6126099247417 | etot = -14.6424332456184 +196000 ekin = 0.186834339037366 | erot = 0.778397083250806 | epot = -15.6076646678817 | etot = -14.6424332455935 +197000 ekin = 0.169886782294183 | erot = 0.788232586070618 | epot = -15.6005526139326 | etot = -14.6424332455678 +198000 ekin = 0.153185871077985 | erot = 0.796043434538987 | epot = -15.5916625511591 | etot = -14.6424332455421 +199000 ekin = 0.137008972987403 | erot = 0.801937915798979 | epot = -15.581380134304 | etot = -14.6424332455176 +200000 ekin = 0.121642272364804 | erot = 0.805996673261661 | epot = -15.5700721911217 | etot = -14.6424332454953 +201000 ekin = 0.107370722656483 | erot = 0.808265456806726 | epot = -15.5580694249396 | etot = -14.6424332454764 +202000 ekin = 0.0944644042392164 | erot = 0.808750524310001 | epot = -15.5456481740113 | etot = -14.6424332454621 +203000 ekin = 0.0831623790893979 | erot = 0.807416772443554 | epot = -15.5330123969865 | etot = -14.6424332454535 +204000 ekin = 0.0736556272335549 | erot = 0.80418872541979 | epot = -15.5202775981049 | etot = -14.6424332454516 +205000 ekin = 0.0660710401675949 | erot = 0.79895460735586 | epot = -15.50745889298 | etot = -14.6424332454565 +206000 ekin = 0.0604586317681684 | erot = 0.791573809424189 | epot = -15.4944656866607 | etot = -14.6424332454683 +207000 ekin = 0.0567840026883034 | erot = 0.781888054798422 | epot = -15.4811053029728 | etot = -14.642433245486 +208000 ekin = 0.0549275971601569 | erot = 0.769736381379661 | epot = -15.4670972240478 | etot = -14.642433245508 +209000 ekin = 0.054691444753805 | erot = 0.754973659533912 | epot = -15.4520983498196 | etot = -14.6424332455319 +210000 ekin = 0.055813012677523 | erot = 0.737491764374765 | epot = -15.4357380226072 | etot = -14.6424332455549 +211000 ekin = 0.0579847210238433 | erot = 0.717241838880031 | epot = -15.417659805478 | etot = -14.6424332455742 +212000 ekin = 0.0608768356205362 | erot = 0.694255492639193 | epot = -15.3975655738466 | etot = -14.6424332455869 +213000 ekin = 0.06416104270831 | erot = 0.668662476163316 | epot = -15.3752567644624 | etot = -14.6424332455907 +214000 ekin = 0.0675321043587428 | erot = 0.64070249551798 | epot = -15.3506678454611 | etot = -14.6424332455844 +215000 ekin = 0.070725533636788 | erot = 0.610729417267909 | epot = -15.3238881964721 | etot = -14.6424332455674 +216000 ekin = 0.0735300437834057 | erot = 0.579207054837054 | epot = -15.2951703441606 | etot = -14.6424332455401 +217000 ekin = 0.0757943994895767 | erot = 0.546696813208958 | epot = -15.2649244582023 | etot = -14.6424332455037 +218000 ekin = 0.0774290394184473 | erot = 0.513838451215592 | epot = -15.2337007360942 | etot = -14.6424332454601 +219000 ekin = 0.0784033323161932 | erot = 0.481325894960063 | epot = -15.2021624726878 | etot = -14.6424332454116 +220000 ekin = 0.0787395495628362 | erot = 0.449880299616975 | epot = -15.1710530945401 | etot = -14.6424332453603 +221000 ekin = 0.0785046319692606 | erot = 0.420222425154575 | epot = -15.1411603024325 | etot = -14.6424332453087 +222000 ekin = 0.0778006814288784 | erot = 0.393045972165179 | epot = -15.1132798988531 | etot = -14.642433245259 +223000 ekin = 0.0767549035403029 | erot = 0.368992968905302 | epot = -15.0881811176588 | etot = -14.6424332452132 +224000 ekin = 0.0755095293719489 | erot = 0.348631757026569 | epot = -15.0665745315716 | etot = -14.6424332451731 +225000 ekin = 0.0742120885680923 | erot = 0.332437700423116 | epot = -15.0490830341315 | etot = -14.6424332451403 +226000 ekin = 0.0730063028703669 | erot = 0.320776497496383 | epot = -15.0362160454828 | etot = -14.6424332451161 +227000 ekin = 0.072023814088989 | erot = 0.313889923623787 | epot = -15.0283469828147 | etot = -14.642433245102 +228000 ekin = 0.0713769419944175 | erot = 0.31188394524302 | epot = -15.025694132336 | etot = -14.6424332450985 +229000 ekin = 0.0711526728859894 | erot = 0.314719386436074 | epot = -15.0283053044287 | etot = -14.6424332451066 +230000 ekin = 0.0714080974064438 | erot = 0.322205638587393 | epot = -15.0360469811206 | etot = -14.6424332451268 +231000 ekin = 0.0721675361185073 | erot = 0.333998222200335 | epot = -15.0485990034776 | etot = -14.6424332451588 +232000 ekin = 0.073421602289788 | erot = 0.349601270465542 | epot = -15.0654561179573 | etot = -14.6424332452019 +233000 ekin = 0.0751284397495051 | erot = 0.368376135876568 | epot = -15.0859378208814 | etot = -14.6424332452553 +234000 ekin = 0.0772173235430231 | erot = 0.389557254435346 | epot = -15.1092078232955 | etot = -14.6424332453172 +235000 ekin = 0.0795947059788063 | erot = 0.412276079792834 | epot = -15.1343040311561 | etot = -14.6424332453845 +236000 ekin = 0.0821526186131156 | erot = 0.435593295650787 | epot = -15.1601791597182 | etot = -14.6424332454543 +237000 ekin = 0.084779101422344 | erot = 0.458538653868273 | epot = -15.1857510008135 | etot = -14.6424332455229 +238000 ekin = 0.0873700423841441 | erot = 0.480156759890549 | epot = -15.2099600478608 | etot = -14.6424332455861 +239000 ekin = 0.0898415153120331 | erot = 0.499556095556538 | epot = -15.2318308565087 | etot = -14.6424332456401 +240000 ekin = 0.0921414623518645 | erot = 0.515957735404849 | epot = -15.2505324434381 | etot = -14.6424332456814 +241000 ekin = 0.0942594490127862 | erot = 0.528739776890127 | epot = -15.2654324716098 | etot = -14.6424332457069 +242000 ekin = 0.0962332805866192 | erot = 0.537473606139427 | epot = -15.276140132441 | etot = -14.6424332457149 +243000 ekin = 0.0981515319325858 | erot = 0.541948785982857 | epot = -15.2825335636204 | etot = -14.642433245705 +244000 ekin = 0.100151482350114 | erot = 0.542184479376275 | epot = -15.2847692074041 | etot = -14.6424332456777 +245000 ekin = 0.102412491094951 | erot = 0.538426702319034 | epot = -15.2832724390489 | etot = -14.642433245635 +246000 ekin = 0.105145395544293 | erot = 0.531132085866979 | epot = -15.2787107269906 | etot = -14.6424332455793 +247000 ekin = 0.108578961411821 | erot = 0.52093999420686 | epot = -15.271952201133 | etot = -14.6424332455143 +248000 ekin = 0.112944688754725 | erot = 0.50863565229471 | epot = -15.2640135864931 | etot = -14.6424332454436 +249000 ekin = 0.118461348905719 | erot = 0.495107336752391 | epot = -15.2560019310293 | etot = -14.6424332453712 +250000 ekin = 0.125320510714173 | erot = 0.481300713195434 | epot = -15.2490544692103 | etot = -14.6424332453007 +251000 ekin = 0.133674056956427 | erot = 0.468173145421896 | epot = -15.2442804476139 | etot = -14.6424332452356 +252000 ekin = 0.143624355874461 | erot = 0.456650355971834 | epot = -15.2427079570251 | etot = -14.6424332451788 +253000 ekin = 0.155217400156353 | erot = 0.447587277163379 | epot = -15.2452379224523 | etot = -14.6424332451326 +254000 ekin = 0.168438906846637 | erot = 0.441734376015244 | epot = -15.2526065279605 | etot = -14.6424332450987 +255000 ekin = 0.183213121646734 | erot = 0.439710227351439 | epot = -15.2653565940763 | etot = -14.6424332450781 +256000 ekin = 0.199403908834921 | erot = 0.441980689731424 | epot = -15.283817843638 | etot = -14.6424332450717 +257000 ekin = 0.216817638464824 | erot = 0.448844730303074 | epot = -15.3080956138475 | etot = -14.6424332450796 +258000 ekin = 0.235207399038843 | erot = 0.460426746273175 | epot = -15.3380673904137 | etot = -14.6424332451017 +259000 ekin = 0.254278151369354 | erot = 0.476675120646266 | epot = -15.3733865171527 | etot = -14.6424332451371 +260000 ekin = 0.273692576680278 | erot = 0.497366691704049 | epot = -15.4134925135692 | etot = -14.6424332451849 +261000 ekin = 0.293077534076593 | erot = 0.522116767902341 | epot = -15.4576275472227 | etot = -14.6424332452438 +262000 ekin = 0.312031202024041 | erot = 0.550394247117889 | epot = -15.5048586944538 | etot = -14.6424332453119 +263000 ekin = 0.330131107619666 | erot = 0.58154128199589 | epot = -15.5541056350029 | etot = -14.6424332453873 +264000 ekin = 0.346943319973835 | erot = 0.614796773442864 | epot = -15.6041733388843 | etot = -14.6424332454676 +265000 ekin = 0.36203307825833 | erot = 0.649322794992431 | epot = -15.6537891188012 | etot = -14.6424332455505 +266000 ekin = 0.374977027500473 | erot = 0.684232889055386 | epot = -15.7016431621889 | etot = -14.6424332456331 +267000 ekin = 0.385377045185273 | erot = 0.718621072058621 | epot = -15.7464313629566 | etot = -14.6424332457127 +268000 ekin = 0.392875374680177 | erot = 0.751590369461549 | epot = -15.7868989899282 | etot = -14.6424332457865 +269000 ekin = 0.397170471139152 | erot = 0.782279784272065 | epot = -15.8218835012632 | etot = -14.6424332458519 +270000 ekin = 0.398032662028036 | erot = 0.809888771673587 | epot = -15.8503546796086 | etot = -14.642433245907 +271000 ekin = 0.395318487598681 | erot = 0.833698516709737 | epot = -15.8714502502579 | etot = -14.6424332459495 +272000 ekin = 0.388982474352113 | erot = 0.853089551908481 | epot = -15.8845052722386 | etot = -14.642433245978 +273000 ekin = 0.379085147931406 | erot = 0.867555470405084 | epot = -15.8890738643282 | etot = -14.6424332459917 +274000 ekin = 0.36579632219322 | erot = 0.876712662629334 | epot = -15.8849422308128 | etot = -14.6424332459903 +275000 ekin = 0.349393082921511 | erot = 0.880306121913819 | epot = -15.8721324508092 | etot = -14.6424332459739 +276000 ekin = 0.330252358905648 | erot = 0.878211432148985 | epot = -15.8508970369982 | etot = -14.6424332459435 +277000 ekin = 0.308838461220188 | erot = 0.870433084876957 | epot = -15.8217047919976 | etot = -14.6424332459005 +278000 ekin = 0.285686394604086 | erot = 0.857099294885159 | epot = -15.7852189353358 | etot = -14.6424332458466 +279000 ekin = 0.261382042766412 | erot = 0.838453513181032 | epot = -15.7422688017312 | etot = -14.6424332457837 +280000 ekin = 0.23654047332595 | erot = 0.814842890587961 | epot = -15.6938166096284 | etot = -14.6424332457145 +281000 ekin = 0.211783602608016 | erot = 0.78670403285839 | epot = -15.6409208811076 | etot = -14.6424332456411 +282000 ekin = 0.187718337271894 | erot = 0.754546508157669 | epot = -15.5846980909958 | etot = -14.6424332455662 +283000 ekin = 0.164916115090795 | erot = 0.718934708845181 | epot = -15.5262840694281 | etot = -14.6424332454921 +284000 ekin = 0.143894549221715 | erot = 0.680468811939352 | epot = -15.4667966065823 | etot = -14.6424332454213 +285000 ekin = 0.125101678372295 | erot = 0.639765701847641 | epot = -15.4073006255757 | etot = -14.6424332453557 +286000 ekin = 0.108903164107394 | erot = 0.597440790010453 | epot = -15.3487771994148 | etot = -14.6424332452969 +287000 ekin = 0.0955726645551815 | erot = 0.554091668604978 | epot = -15.2920975784066 | etot = -14.6424332452464 +288000 ekin = 0.0852855448006968 | erot = 0.510284456822097 | epot = -15.2380032468277 | etot = -14.6424332452049 +289000 ekin = 0.07811604131029 | erot = 0.466543535623142 | epot = -15.1870928221065 | etot = -14.6424332451731 +290000 ekin = 0.0740379578618433 | erot = 0.423345127589082 | epot = -15.1398163306018 | etot = -14.6424332451509 +291000 ekin = 0.072928910063375 | erot = 0.381114879437431 | epot = -15.0964770346385 | etot = -14.6424332451377 +292000 ekin = 0.0745780357927571 | erot = 0.340229271737873 | epot = -15.0572405526631 | etot = -14.6424332451325 +293000 ekin = 0.0786969407539254 | erot = 0.301020346548472 | epot = -15.0221505324365 | etot = -14.6424332451341 +294000 ekin = 0.0849334564702411 | erot = 0.263782947588667 | epot = -14.9911496491996 | etot = -14.6424332451407 +295000 ekin = 0.0928875723607584 | erot = 0.228783448806939 | epot = -14.9641042663184 | etot = -14.6424332451507 +296000 ekin = 0.102128697507195 | erot = 0.19626884038738 | epot = -14.9408307830571 | etot = -14.6424332451625 +297000 ekin = 0.112213252496717 | erot = 0.166475068218863 | epot = -14.9211215658901 | etot = -14.6424332451745 +298000 ekin = 0.122701527066801 | erot = 0.139633685446912 | epot = -14.9047684576991 | etot = -14.6424332451854 +299000 ekin = 0.13317279291057 | erot = 0.115976150690173 | epot = -14.8915821887951 | etot = -14.6424332451943 +300000 ekin = 0.143237839707087 | erot = 0.0957354521215326 | epot = -14.8814065370293 | etot = -14.6424332452007 +301000 ekin = 0.152548387988438 | erot = 0.0791450908732747 | epot = -14.8741267240661 | etot = -14.6424332452044 +302000 ekin = 0.160803184299453 | erot = 0.0664357608561943 | epot = -14.8696721903613 | etot = -14.6424332452057 +303000 ekin = 0.167750948486611 | erot = 0.0578302677257495 | epot = -14.868014461417 | etot = -14.6424332452046 +304000 ekin = 0.173190665587053 | erot = 0.0535373136372916 | epot = -14.8691612244265 | etot = -14.6424332452022 +305000 ekin = 0.176969952948865 | erot = 0.0537447402909072 | epot = -14.8731479384385 | etot = -14.6424332451988 +306000 ekin = 0.178982363290529 | erot = 0.0586126977876584 | epot = -14.8800283062732 | etot = -14.642433245195 +307000 ekin = 0.179164502944002 | erot = 0.0682670321056827 | epot = -14.8898647802413 | etot = -14.6424332451916 +308000 ekin = 0.177493763288021 | erot = 0.0827930029186529 | epot = -14.9027200113955 | etot = -14.6424332451889 +309000 ekin = 0.173987301150961 | erot = 0.102229291870645 | epot = -14.9186498382089 | etot = -14.6424332451873 +310000 ekin = 0.168702678647172 | erot = 0.126562162216051 | epot = -14.9376980860502 | etot = -14.642433245187 +311000 ekin = 0.16174029700891 | erot = 0.155719593406526 | epot = -14.9598931356034 | etot = -14.642433245188 +312000 ekin = 0.15324744012492 | erot = 0.189565237977728 | epot = -14.985245923293 | etot = -14.6424332451904 +313000 ekin = 0.14342338999696 | erot = 0.227892126760383 | epot = -15.0137487619518 | etot = -14.6424332451944 +314000 ekin = 0.132524706018464 | erot = 0.270416174780403 | epot = -15.0453741259986 | etot = -14.6424332451998 +315000 ekin = 0.120869409552541 | erot = 0.31676970828902 | epot = -15.0800723630488 | etot = -14.6424332452072 +316000 ekin = 0.108838546104728 | erot = 0.366495437994318 | epot = -15.1177672293161 | etot = -14.642433245217 +317000 ekin = 0.0968734934277246 | erot = 0.419041536809129 | epot = -15.1583482754668 | etot = -14.6424332452299 +318000 ekin = 0.0854675378549793 | erot = 0.47375872576408 | epot = -15.2016595088657 | etot = -14.6424332452467 +319000 ekin = 0.0751507271451901 | erot = 0.529900497448216 | epot = -15.247484469862 | etot = -14.6424332452686 +320000 ekin = 0.0664678443364345 | erot = 0.586627760739854 | epot = -15.2955288503729 | etot = -14.6424332452966 +321000 ekin = 0.0599504590563252 | erot = 0.643019202691537 | epot = -15.3454029070798 | etot = -14.6424332453319 +322000 ekin = 0.0560852142800011 | erot = 0.698088453267024 | epot = -15.3966069129217 | etot = -14.6424332453747 +323000 ekin = 0.0552815181248971 | erot = 0.750808639916102 | epot = -15.4485234034659 | etot = -14.6424332454249 +324000 ekin = 0.057842325520568 | erot = 0.800144112657426 | epot = -15.5004196836595 | etot = -14.6424332454815 +325000 ekin = 0.0639414864634492 | erot = 0.845088070114938 | epot = -15.5514628021208 | etot = -14.6424332455424 +326000 ekin = 0.0736101694210054 | erot = 0.884703689967212 | epot = -15.6007471049934 | etot = -14.6424332456052 +327000 ekin = 0.0867333560896964 | erot = 0.91816541981297 | epot = -15.6473320215697 | etot = -14.642433245667 +328000 ekin = 0.103055779603987 | erot = 0.944796600223873 | epot = -15.6902856255527 | etot = -14.6424332457249 +329000 ekin = 0.12219544617078 | erot = 0.964099781594463 | epot = -15.7287284735416 | etot = -14.6424332457764 +330000 ekin = 0.143662406710238 | erot = 0.975776996237359 | epot = -15.7618726487672 | etot = -14.6424332458196 +331000 ekin = 0.166880785133575 | erot = 0.979738667517989 | epot = -15.7890526985047 | etot = -14.6424332458532 +332000 ekin = 0.191212923969923 | erot = 0.976101405902871 | epot = -15.8097475757491 | etot = -14.6424332458763 +333000 ekin = 0.215985355319577 | erot = 0.965176233539036 | epot = -15.8235948347474 | etot = -14.6424332458887 +334000 ekin = 0.240516656831147 | erot = 0.947449485112495 | epot = -15.8303993878336 | etot = -14.64243324589 +335000 ekin = 0.264146896086235 | erot = 0.923558676868035 | epot = -15.8301388188342 | etot = -14.6424332458799 +336000 ekin = 0.286267467754231 | erot = 0.894265184760612 | epot = -15.8229658983734 | etot = -14.6424332458586 +337000 ekin = 0.306349134750088 | erot = 0.860424939336672 | epot = -15.809207319913 | etot = -14.6424332458262 +338000 ekin = 0.323965497674696 | erot = 0.822957838322753 | epot = -15.7893565817813 | etot = -14.6424332457838 +339000 ekin = 0.338809250788985 | erot = 0.782816380150479 | epot = -15.7640588766724 | etot = -14.6424332457329 +340000 ekin = 0.35069944423374 | erot = 0.740954141303117 | epot = -15.7340868312125 | etot = -14.6424332456757 +341000 ekin = 0.359579293536495 | erot = 0.698295027831847 | epot = -15.700307566983 | etot = -14.6424332456147 +342000 ekin = 0.365505462154926 | erot = 0.655704542034982 | epot = -15.6636432497426 | etot = -14.6424332455527 +343000 ekin = 0.368630832661383 | erot = 0.613964463465552 | epot = -15.6250285416195 | etot = -14.6424332454926 +344000 ekin = 0.369183369589215 | erot = 0.573752273080787 | epot = -15.5853688881069 | etot = -14.6424332454369 +345000 ekin = 0.367443732824289 | erot = 0.535626361233146 | epot = -15.5455033394448 | etot = -14.6424332453874 +346000 ekin = 0.36372393313177 | erot = 0.500017626276193 | epot = -15.5061748047535 | etot = -14.6424332453455 +347000 ekin = 0.358348705277679 | erot = 0.467227585427262 | epot = -15.4680095360169 | etot = -14.642433245312 +348000 ekin = 0.351640582954838 | erot = 0.437432666908102 | epot = -15.4315064951499 | etot = -14.642433245287 +349000 ekin = 0.343909024694815 | erot = 0.410693986169929 | epot = -15.3970362561344 | etot = -14.6424332452696 +350000 ekin = 0.335443435968793 | erot = 0.386971649880727 | epot = -15.3648483311092 | etot = -14.6424332452597 +351000 ekin = 0.326509584093778 | erot = 0.366142474251511 | epot = -15.3350853036005 | etot = -14.6424332452552 +352000 ekin = 0.317348699022207 | erot = 0.34801993040111 | epot = -15.3078018746784 | etot = -14.6424332452551 +353000 ekin = 0.30817846664876 | erot = 0.332375117501944 | epot = -15.2829868294085 | etot = -14.6424332452578 +354000 ekin = 0.299195119854399 | erot = 0.318957598139001 | epot = -15.2605859632553 | etot = -14.6424332452619 +355000 ekin = 0.290575888248862 | erot = 0.307515001370356 | epot = -15.2405241348854 | etot = -14.6424332452662 +356000 ekin = 0.282481160312497 | erot = 0.29781040621721 | epot = -15.2227248117992 | etot = -14.6424332452695 +357000 ekin = 0.275055828993789 | erot = 0.289636664277857 | epot = -15.2071257385429 | etot = -14.6424332452713 +358000 ekin = 0.26842942725494 | erot = 0.282827006912222 | epot = -15.1936896794383 | etot = -14.6424332452711 +359000 ekin = 0.262714810201762 | erot = 0.277261507858003 | epot = -15.1824095633288 | etot = -14.642433245269 +360000 ekin = 0.258005302569436 | erot = 0.272869227748658 | epot = -15.1733077755836 | etot = -14.6424332452655 +361000 ekin = 0.254370400621781 | erot = 0.269626137802017 | epot = -15.1664297836851 | etot = -14.6424332452613 +362000 ekin = 0.251850290178651 | erot = 0.267549186087959 | epot = -15.1618327215239 | etot = -14.6424332452573 +363000 ekin = 0.250449609862751 | erot = 0.266687109597485 | epot = -15.159569964715 | etot = -14.6424332452548 +364000 ekin = 0.250131041863336 | erot = 0.267108788857729 | epot = -15.1596730759762 | etot = -14.6424332452551 +365000 ekin = 0.250809442162066 | erot = 0.268890073928026 | epot = -15.1621327613494 | etot = -14.6424332452593 +366000 ekin = 0.25234731876335 | erot = 0.272100073006091 | epot = -15.1668806370379 | etot = -14.6424332452684 +367000 ekin = 0.254552520178511 | erot = 0.276787886819413 | epot = -15.1737736522811 | etot = -14.6424332452832 +368000 ekin = 0.257178996153298 | erot = 0.282970699523766 | epot = -15.1825829409812 | etot = -14.6424332453042 +369000 ekin = 0.259931424908708 | erot = 0.29062401114344 | epot = -15.1929886813832 | etot = -14.642433245331 +370000 ekin = 0.262474349326632 | erot = 0.299674631814998 | epot = -15.2045822265049 | etot = -14.6424332453633 +371000 ekin = 0.264446209428301 | erot = 0.309996869297344 | epot = -15.2168763241253 | etot = -14.6424332453996 +372000 ekin = 0.265478281861433 | erot = 0.321412142686654 | epot = -15.2293236699864 | etot = -14.6424332454383 +373000 ekin = 0.265218028290041 | erot = 0.333692059448718 | epot = -15.2413433332161 | etot = -14.6424332454774 +374000 ekin = 0.26335572124772 | erot = 0.346564809671271 | epot = -15.2523537764331 | etot = -14.6424332455141 +375000 ekin = 0.259652497500777 | erot = 0.359724567998165 | epot = -15.2618103110451 | etot = -14.6424332455462 +376000 ekin = 0.253967268934319 | erot = 0.372843454384699 | epot = -15.2692439688902 | etot = -14.6424332455711 +377000 ekin = 0.246279333497663 | erot = 0.385585491299193 | epot = -15.2742980703837 | etot = -14.6424332455868 +378000 ekin = 0.236703249874173 | erot = 0.397621906702965 | epot = -15.2767584021691 | etot = -14.642433245592 +379000 ekin = 0.22549275694072 | erot = 0.408647066936832 | epot = -15.2765730694637 | etot = -14.6424332455862 +380000 ekin = 0.213031377534934 | erot = 0.418394279001949 | epot = -15.2738589021069 | etot = -14.64243324557 +381000 ekin = 0.19980887731166 | erot = 0.426650676217107 | epot = -15.2688927990735 | etot = -14.6424332455448 +382000 ekin = 0.186384809014969 | erot = 0.433270396060972 | epot = -15.2620884505889 | etot = -14.642433245513 +383000 ekin = 0.173342616140343 | erot = 0.4381852790555 | epot = -15.2539611406731 | etot = -14.6424332454773 +384000 ekin = 0.161239700828087 | erot = 0.441412371407271 | epot = -15.2450853176757 | etot = -14.6424332454403 +385000 ekin = 0.15055995464474 | erot = 0.443057612556821 | epot = -15.2360508126064 | etot = -14.6424332454049 +386000 ekin = 0.141675129696877 | erot = 0.443315241526503 | epot = -15.2274236165962 | etot = -14.6424332453728 +387000 ekin = 0.134820015696259 | erot = 0.442462667351556 | epot = -15.2197159283931 | etot = -14.6424332453452 +388000 ekin = 0.130083976412379 | erot = 0.44085081351593 | epot = -15.2133680352507 | etot = -14.6424332453224 +389000 ekin = 0.12741857023722 | erot = 0.43889024628032 | epot = -15.2087420618216 | etot = -14.6424332453041 +390000 ekin = 0.126658423092956 | erot = 0.43703370208669 | epot = -15.2061253704692 | etot = -14.6424332452895 +391000 ekin = 0.127550804261056 | erot = 0.435755902066133 | epot = -15.2057399516053 | etot = -14.6424332452781 +392000 ekin = 0.129788752936039 | erot = 0.435531744058152 | epot = -15.2077537422634 | etot = -14.6424332452692 +393000 ekin = 0.133043055316541 | erot = 0.43681406507717 | epot = -15.2122903656559 | etot = -14.6424332452622 +394000 ekin = 0.136989561466299 | erot = 0.440012156509965 | epot = -15.2194349632336 | etot = -14.6424332452574 +395000 ekin = 0.141329833042564 | erot = 0.445472096884898 | epot = -15.2292351751821 | etot = -14.6424332452547 +396000 ekin = 0.145804542777373 | erot = 0.45345976764831 | epot = -15.2416975556805 | etot = -14.6424332452548 +397000 ekin = 0.150200153188676 | erot = 0.464147173461378 | epot = -15.2567805719085 | etot = -14.6424332452585 +398000 ekin = 0.154350089766152 | erot = 0.477602441558481 | epot = -15.2743857765906 | etot = -14.642433245266 +399000 ekin = 0.158131920622366 | erot = 0.493783661155649 | epot = -15.2943488270562 | etot = -14.6424332452782 +400000 ekin = 0.161462056173796 | erot = 0.512536568006325 | epot = -15.3164318694755 | etot = -14.6424332452953 +401000 ekin = 0.164289301181072 | erot = 0.533595989002473 | epot = -15.3403185355012 | etot = -14.6424332453177 +402000 ekin = 0.166588323050693 | erot = 0.556590928839834 | epot = -15.3656124972355 | etot = -14.642433245345 +403000 ekin = 0.168353810379696 | erot = 0.581053183644485 | epot = -15.3918402394011 | etot = -14.6424332453769 +404000 ekin = 0.169595821301193 | erot = 0.606429376023291 | epot = -15.4184584427372 | etot = -14.6424332454127 +405000 ekin = 0.170336578562018 | erot = 0.63209629254071 | epot = -15.444866116554 | etot = -14.6424332454513 +406000 ekin = 0.170608761978812 | erot = 0.65737934451496 | epot = -15.4704213519851 | etot = -14.6424332454913 +407000 ekin = 0.170455178567329 | erot = 0.681573854094723 | epot = -15.4944622781935 | etot = -14.6424332455315 +408000 ekin = 0.169929554809759 | erot = 0.703968692151394 | epot = -15.5163314925311 | etot = -14.64243324557 +409000 ekin = 0.169098093451394 | erot = 0.723871579521683 | epot = -15.5354029185781 | etot = -14.6424332456051 +410000 ekin = 0.168041369040759 | erot = 0.740635137248624 | epot = -15.5511097519242 | etot = -14.6424332456348 +411000 ekin = 0.166856102809036 | erot = 0.753682569971393 | epot = -15.5629719184382 | etot = -14.6424332456577 +412000 ekin = 0.165656359033239 | erot = 0.762531725093238 | epot = -15.5706213297988 | etot = -14.6424332456724 +413000 ekin = 0.164573741711749 | erot = 0.766816218739624 | epot = -15.5738232061291 | etot = -14.6424332456777 +414000 ekin = 0.163756240957875 | erot = 0.766302377571564 | epot = -15.5724918642026 | etot = -14.6424332456732 +415000 ekin = 0.163365479945837 | erot = 0.76090092022446 | epot = -15.5666996458289 | etot = -14.6424332456586 +416000 ekin = 0.16357224009456 | erot = 0.750672586698944 | epot = -15.556678072428 | etot = -14.6424332456345 +417000 ekin = 0.164550286199954 | erot = 0.7358272978906 | epot = -15.5428108296923 | etot = -14.6424332456018 +418000 ekin = 0.166468663393413 | erot = 0.716716857299939 | epot = -15.5256187662552 | etot = -14.6424332455618 +419000 ekin = 0.169482781127082 | erot = 0.693821649098591 | epot = -15.5057376757421 | etot = -14.6424332455164 +420000 ekin = 0.173724722667737 | erot = 0.66773219168281 | epot = -15.4838901598182 | etot = -14.6424332454677 +421000 ekin = 0.179293310761201 | erot = 0.639126725581016 | epot = -15.4608532817598 | etot = -14.6424332454176 +422000 ekin = 0.18624451452154 | erot = 0.608746211198834 | epot = -15.437423971089 | etot = -14.6424332453687 +423000 ekin = 0.194582798147166 | erot = 0.577368165576623 | epot = -15.4143842090466 | etot = -14.6424332453228 +424000 ekin = 0.204253993032127 | erot = 0.545780680985215 | epot = -15.3924679192995 | etot = -14.6424332452822 +425000 ekin = 0.215140228919709 | erot = 0.514757766830984 | epot = -15.3723312409989 | etot = -14.6424332452482 +426000 ekin = 0.227057395200028 | erot = 0.485036881514174 | epot = -15.354527521936 | etot = -14.6424332452218 +427000 ekin = 0.239755526228602 | erot = 0.457299221560653 | epot = -15.3394879929934 | etot = -14.6424332452042 +428000 ekin = 0.252922416271923 | erot = 0.432153058134052 | epot = -15.3275087196016 | etot = -14.6424332451956 +429000 ekin = 0.266190667181531 | erot = 0.410120192007372 | epot = -15.3187441043849 | etot = -14.642433245196 +430000 ekin = 0.279148248287616 | erot = 0.391625457761957 | epot = -15.3132069512549 | etot = -14.6424332452053 +431000 ekin = 0.291352495295092 | erot = 0.376989149810484 | epot = -15.3107748903279 | etot = -14.6424332452223 +432000 ekin = 0.302347287571197 | erot = 0.366422254466197 | epot = -15.311202787284 | etot = -14.6424332452466 +433000 ekin = 0.311682921771834 | erot = 0.360024429012416 | epot = -15.3141405960599 | etot = -14.6424332452756 +434000 ekin = 0.318937954387398 | erot = 0.357784738270779 | epot = -15.3191559379664 | etot = -14.6424332453082 +435000 ekin = 0.323742037714837 | erot = 0.359585207272863 | epot = -15.3257604903308 | etot = -14.6424332453431 +436000 ekin = 0.325798554031316 | erot = 0.365207245305789 | epot = -15.3334390447156 | etot = -14.6424332453785 +437000 ekin = 0.324905697097303 | erot = 0.374340922349983 | epot = -15.3416798648586 | etot = -14.6424332454113 +438000 ekin = 0.320974589858357 | erot = 0.386596930160468 | epot = -15.3500047654588 | etot = -14.64243324544 +439000 ekin = 0.314043077746361 | erot = 0.401520852185505 | epot = -15.3579971753956 | etot = -14.6424332454637 +440000 ekin = 0.304283988020539 | erot = 0.41860913221399 | epot = -15.3653263657148 | etot = -14.6424332454802 +441000 ekin = 0.292006859111611 | erot = 0.437325916193047 | epot = -15.3717660207934 | etot = -14.6424332454888 +442000 ekin = 0.277652365815072 | erot = 0.457119792518877 | epot = -15.3772054038232 | etot = -14.6424332454893 +443000 ekin = 0.261778853590747 | erot = 0.477439412175799 | epot = -15.3816515112488 | etot = -14.6424332454822 +444000 ekin = 0.245040553434245 | erot = 0.497747053376455 | epot = -15.3852208522799 | etot = -14.6424332454692 +445000 ekin = 0.22815726042029 | erot = 0.517529408202492 | epot = -15.3881199140742 | etot = -14.6424332454515 +446000 ekin = 0.211875681729375 | erot = 0.536305196856599 | epot = -15.3906141240179 | etot = -14.6424332454319 +447000 ekin = 0.196923472681452 | erot = 0.553629632753464 | epot = -15.3929863508487 | etot = -14.6424332454138 +448000 ekin = 0.183958277880794 | erot = 0.569096233371 | epot = -15.3954877566523 | etot = -14.6424332454005 +449000 ekin = 0.173515771313211 | erot = 0.582336947151656 | epot = -15.3982859638601 | etot = -14.6424332453953 +450000 ekin = 0.16596236119942 | erot = 0.593021970145928 | epot = -15.4014175767459 | etot = -14.6424332454006 +451000 ekin = 0.161459280835239 | erot = 0.600860851249481 | epot = -15.4047533775022 | etot = -14.6424332454175 +452000 ekin = 0.159944578253891 | erot = 0.605606408076383 | epot = -15.4079842317757 | etot = -14.6424332454454 +453000 ekin = 0.161137653115343 | erot = 0.607062496368097 | epot = -15.410633394965 | etot = -14.6424332454815 +454000 ekin = 0.164567591513362 | erot = 0.605095779306141 | epot = -15.4120966163413 | etot = -14.6424332455218 +455000 ekin = 0.169622334209561 | erot = 0.599650455421321 | epot = -15.4117060351916 | etot = -14.6424332455607 +456000 ekin = 0.175611802350685 | erot = 0.590763702894581 | epot = -15.4088087508385 | etot = -14.6424332455932 +457000 ekin = 0.181835621982265 | erot = 0.578578749363229 | epot = -15.40284761696 | etot = -14.6424332456146 +458000 ekin = 0.187645727030889 | erot = 0.563352302649372 | epot = -15.3934312753016 | etot = -14.6424332456214 +459000 ekin = 0.192495880384907 | erot = 0.54545371714964 | epot = -15.380382843147 | etot = -14.6424332456124 +460000 ekin = 0.195973381637234 | erot = 0.525354597712022 | epot = -15.3637612249374 | etot = -14.6424332455881 +461000 ekin = 0.197811920991222 | erot = 0.503609203464283 | epot = -15.3438543700064 | etot = -14.6424332455509 +462000 ekin = 0.197887724919133 | erot = 0.480827560284776 | epot = -15.3211485307076 | etot = -14.6424332455037 +463000 ekin = 0.196203198485172 | erot = 0.457644248439133 | epot = -15.2962806923751 | etot = -14.6424332454508 +464000 ekin = 0.192863034125905 | erot = 0.434686220431894 | epot = -15.2699824999537 | etot = -14.6424332453959 +465000 ekin = 0.188047435822221 | erot = 0.412542760094015 | epot = -15.2430234412586 | etot = -14.6424332453423 +466000 ekin = 0.181986107552773 | erot = 0.39174001067487 | epot = -15.2161593635207 | etot = -14.642433245293 +467000 ekin = 0.174935400197984 | erot = 0.372721626737719 | epot = -15.1900902721857 | etot = -14.64243324525 +468000 ekin = 0.167159826102143 | erot = 0.355836258353913 | epot = -15.1654293296704 | etot = -14.6424332452144 +469000 ekin = 0.158918218022589 | erot = 0.34133189076746 | epot = -15.1426833539768 | etot = -14.6424332451868 +470000 ekin = 0.150454185653206 | erot = 0.329356584635659 | epot = -15.1222440154559 | etot = -14.642433245167 +471000 ekin = 0.141990180749416 | erot = 0.319964871778407 | epot = -15.1043882976824 | etot = -14.6424332451545 +472000 ekin = 0.13372435386821 | erot = 0.313128906246327 | epot = -15.089286505263 | etot = -14.6424332451484 +473000 ekin = 0.12582939810187 | erot = 0.308753392325055 | epot = -15.0770160355743 | etot = -14.6424332451474 +474000 ekin = 0.118452666363187 | erot = 0.306693264414364 | epot = -15.0675791759277 | etot = -14.6424332451502 +475000 ekin = 0.111716976218892 | erot = 0.306773053291038 | epot = -15.0609232746652 | etot = -14.6424332451553 +476000 ekin = 0.105721655633223 | erot = 0.308806833537935 | epot = -15.0569617343327 | etot = -14.6424332451616 +477000 ekin = 0.100543523675713 | erot = 0.312617617130682 | epot = -15.055594385974 | etot = -14.6424332451676 +478000 ekin = 0.0962376398644524 | erot = 0.31805505563592 | epot = -15.0567259406729 | etot = -14.6424332451726 +479000 ekin = 0.0928377950023796 | erot = 0.325010357031072 | epot = -15.0602813972091 | etot = -14.6424332451757 +480000 ekin = 0.0903568546344123 | erot = 0.333427427764652 | epot = -15.0662175275756 | etot = -14.6424332451766 +481000 ekin = 0.0887871989354825 | erot = 0.343309423711621 | epot = -15.074529867822 | etot = -14.6424332451749 +482000 ekin = 0.0881016191313879 | erot = 0.354720133059457 | epot = -15.085254997362 | etot = -14.6424332451711 +483000 ekin = 0.0882551127429667 | erot = 0.367779908275293 | epot = -15.0984682661837 | etot = -14.6424332451655 +484000 ekin = 0.0891880440123837 | erot = 0.382656193510863 | epot = -15.1142774826819 | etot = -14.6424332451586 +485000 ekin = 0.0908310739090695 | erot = 0.399549033149904 | epot = -15.1328133522102 | etot = -14.6424332451512 +486000 ekin = 0.0931120890965809 | erot = 0.418672269926982 | epot = -15.1542176041678 | etot = -14.6424332451442 +487000 ekin = 0.0959650526362282 | erot = 0.440231422324969 | epot = -15.1786297200997 | etot = -14.6424332451385 +488000 ekin = 0.09934026138313 | erot = 0.464399451388414 | epot = -15.2061729579063 | etot = -14.6424332451348 +489000 ekin = 0.103214957393528 | erot = 0.491291775407016 | epot = -15.2369399779348 | etot = -14.6424332451343 +490000 ekin = 0.107602676592561 | erot = 0.520941965501655 | epot = -15.2709778872321 | etot = -14.6424332451379 +491000 ekin = 0.112559247659633 | erot = 0.553279563919971 | epot = -15.3082720567263 | etot = -14.6424332451467 +492000 ekin = 0.118183136718381 | erot = 0.588111425310919 | epot = -15.3487278071915 | etot = -14.6424332451622 +493000 ekin = 0.124608040121107 | erot = 0.625107908280808 | epot = -15.3921491935878 | etot = -14.6424332451858 +494000 ekin = 0.131986393307421 | erot = 0.663795156036237 | epot = -15.4382147945631 | etot = -14.6424332452194 +495000 ekin = 0.140463823895351 | erot = 0.703554605722113 | epot = -15.4864516748821 | etot = -14.6424332452647 +496000 ekin = 0.150146408031555 | erot = 0.743630741562816 | epot = -15.5362103949171 | etot = -14.6424332453228 +497000 ekin = 0.161064579067727 | erot = 0.783147917316502 | epot = -15.5866457417786 | etot = -14.6424332453944 +498000 ekin = 0.173139219154636 | erot = 0.821136754971001 | epot = -15.6367092196045 | etot = -14.6424332454789 +499000 ekin = 0.186156317831577 | erot = 0.856570103854305 | epot = -15.6851596672597 | etot = -14.6424332455738 +500000 ekin = 0.199756195068125 | erot = 0.888407758271075 | epot = -15.7305971990145 | etot = -14.6424332456753 +501000 ekin = 0.213441517837528 | erot = 0.915648078729389 | epot = -15.7715228423447 | etot = -14.6424332457778 +502000 ekin = 0.226605416599141 | erot = 0.93738343364528 | epot = -15.8064220961188 | etot = -14.6424332458744 +503000 ekin = 0.238577508979596 | erot = 0.952855183120654 | epot = -15.833865938058 | etot = -14.6424332459578 +504000 ekin = 0.24868234701908 | erot = 0.961503066783773 | epot = -15.852618659824 | etot = -14.6424332460212 +505000 ekin = 0.256302488972939 | erot = 0.96300365636181 | epot = -15.8617393913938 | etot = -14.6424332460591 +506000 ekin = 0.26093758314799 | erot = 0.957293217915516 | epot = -15.8606640471316 | etot = -14.6424332460681 +507000 ekin = 0.262251679303339 | erot = 0.944571918253385 | epot = -15.8492568436041 | etot = -14.6424332460474 +508000 ekin = 0.260103184115661 | erot = 0.92528856492912 | epot = -15.8278249950432 | etot = -14.6424332459984 +509000 ekin = 0.254554875284732 | erot = 0.900107536932478 | epot = -15.7970956581425 | etot = -14.6424332459253 +510000 ekin = 0.245864483352381 | erot = 0.86986171798002 | epot = -15.7581594471659 | etot = -14.6424332458335 +511000 ekin = 0.234458914530907 | erot = 0.835496660121178 | epot = -15.7123888203816 | etot = -14.6424332457296 +512000 ekin = 0.220896820243755 | erot = 0.798011684060757 | epot = -15.6613417499247 | etot = -14.6424332456202 +513000 ekin = 0.205824805091356 | erot = 0.758403224573394 | epot = -15.6066612751765 | etot = -14.6424332455118 +514000 ekin = 0.189932244119312 | erot = 0.717614706855625 | epot = -15.5499801963846 | etot = -14.6424332454096 +515000 ekin = 0.173908748202557 | erot = 0.676495918868222 | epot = -15.4928379123889 | etot = -14.6424332453181 +516000 ekin = 0.158407108511411 | erot = 0.63577351602134 | epot = -15.4366138697731 | etot = -14.6424332452404 +517000 ekin = 0.144013350185933 | erot = 0.596033149114553 | epot = -15.3824797444789 | etot = -14.6424332451784 +518000 ekin = 0.131224514119668 | erot = 0.55771282568585 | epot = -15.3313705849382 | etot = -14.6424332451327 +519000 ekin = 0.120434042407116 | erot = 0.521106495595107 | epot = -15.2839737831051 | etot = -14.6424332451028 +520000 ekin = 0.111924165177635 | erot = 0.486376443197646 | epot = -15.240733853463 | etot = -14.6424332450877 +521000 ekin = 0.105864424816456 | erot = 0.453572806058813 | epot = -15.2018704759605 | etot = -14.6424332450853 +522000 ekin = 0.102315362067633 | erot = 0.422658367130362 | epot = -15.1674069742913 | etot = -14.6424332450933 +523000 ekin = 0.101236366465094 | erot = 0.393536647096269 | epot = -15.1372062586706 | etot = -14.6424332451092 +524000 ekin = 0.102496717236358 | erot = 0.366081244307823 | epot = -15.1110112066744 | etot = -14.6424332451302 +525000 ekin = 0.105888887335355 | erot = 0.340164343214516 | epot = -15.0884864757035 | etot = -14.6424332451536 +526000 ekin = 0.111143247849968 | erot = 0.315682368378613 | epot = -15.0692588614059 | etot = -14.6424332451774 +527000 ekin = 0.117943398961207 | erot = 0.292576937806905 | epot = -15.0529535819675 | etot = -14.6424332451994 +528000 ekin = 0.125941474254371 | erot = 0.270849598243589 | epot = -15.0392243177162 | etot = -14.6424332452183 +529000 ekin = 0.134772916008756 | erot = 0.250569317238961 | epot = -15.0277754784808 | etot = -14.642433245233 +530000 ekin = 0.144070383401965 | erot = 0.231872340651302 | epot = -15.0183759692967 | etot = -14.6424332452434 +531000 ekin = 0.153476601968781 | erot = 0.214954741433939 | epot = -15.0108645886523 | etot = -14.6424332452495 +532000 ekin = 0.162656054076991 | erot = 0.200058697647332 | epot = -15.0051479969763 | etot = -14.642433245252 +533000 ekin = 0.171305419079578 | erot = 0.18745414318241 | epot = -15.0011928075133 | etot = -14.6424332452513 +534000 ekin = 0.179162595538559 | erot = 0.177417842692309 | epot = -14.9990136834797 | etot = -14.6424332452488 +535000 ekin = 0.186014006484955 | erot = 0.17021209444076 | epot = -14.9986593461708 | etot = -14.6424332452451 +536000 ekin = 0.191699759238898 | erot = 0.166065149224471 | epot = -15.0001981537044 | etot = -14.642433245241 +537000 ekin = 0.196116169930243 | erot = 0.165155084977473 | epot = -15.003704500145 | etot = -14.6424332452373 +538000 ekin = 0.199215220532696 | erot = 0.167598364569312 | epot = -15.0092468303365 | etot = -14.6424332452345 +539000 ekin = 0.20100070966893 | erot = 0.173443713615195 | epot = -15.0168776685174 | etot = -14.6424332452333 +540000 ekin = 0.201521164037735 | erot = 0.182671367030132 | epot = -15.0266257763018 | etot = -14.6424332452339 +541000 ekin = 0.200859940141596 | erot = 0.195197211440065 | epot = -15.0384903968184 | etot = -14.6424332452368 +542000 ekin = 0.199123298889485 | erot = 0.210880936221535 | epot = -15.0524374803529 | etot = -14.6424332452419 +543000 ekin = 0.196427519384798 | erot = 0.229537017788165 | epot = -15.0683977824221 | etot = -14.6424332452492 +544000 ekin = 0.192886294946265 | erot = 0.25094720200201 | epot = -15.0862667422075 | etot = -14.6424332452593 +545000 ekin = 0.188599710888656 | erot = 0.274873110236005 | epot = -15.1059060663961 | etot = -14.6424332452715 +546000 ekin = 0.18364604524401 | erot = 0.301067663120887 | epot = -15.1271469536507 | etot = -14.6424332452858 +547000 ekin = 0.178077473819964 | erot = 0.329284179376543 | epot = -15.1497948984983 | etot = -14.6424332453018 +548000 ekin = 0.171920510268456 | erot = 0.359282253787671 | epot = -15.1736360093753 | etot = -14.6424332453191 +549000 ekin = 0.165181670578856 | erot = 0.390829837836003 | epot = -15.1984447537518 | etot = -14.6424332453369 +550000 ekin = 0.15785840865594 | erot = 0.423701326923092 | epot = -15.2239929809337 | etot = -14.6424332453547 +551000 ekin = 0.149954809005835 | erot = 0.457671882722257 | epot = -15.2500599370996 | etot = -14.6424332453715 +552000 ekin = 0.141500835822419 | erot = 0.492508662666464 | epot = -15.2764427438757 | etot = -14.6424332453869 +553000 ekin = 0.132573145480449 | erot = 0.527960055130273 | epot = -15.3029664460107 | etot = -14.6424332453999 +554000 ekin = 0.123314645146749 | erot = 0.563744383275372 | epot = -15.3294922738325 | etot = -14.6424332454104 +555000 ekin = 0.113949270900195 | erot = 0.599539792628959 | epot = -15.3559223089471 | etot = -14.642433245418 +556000 ekin = 0.104788088804118 | erot = 0.634977129568407 | epot = -15.3821984637958 | etot = -14.6424332454232 +557000 ekin = 0.0962230654738397 | erot = 0.669637513728588 | epot = -15.4082938246296 | etot = -14.6424332454272 +558000 ekin = 0.0887059614381524 | erot = 0.703055990484034 | epot = -15.4341951973535 | etot = -14.6424332454313 +559000 ekin = 0.0827118847692362 | erot = 0.734732129426798 | epot = -15.4598772596337 | etot = -14.6424332454377 +560000 ekin = 0.0786899547209647 | erot = 0.764147748400966 | epot = -15.4852709485704 | etot = -14.6424332454485 +561000 ekin = 0.0770067720584792 | erot = 0.790791153077553 | epot = -15.5102311706015 | etot = -14.6424332454654 +562000 ekin = 0.0778911706718854 | erot = 0.814186471630276 | epot = -15.5345108877916 | etot = -14.6424332454895 +563000 ekin = 0.0813901113631692 | erot = 0.833925925483943 | epot = -15.5577492823672 | etot = -14.6424332455201 +564000 ekin = 0.0873448530183735 | erot = 0.849702302566485 | epot = -15.5794804011401 | etot = -14.6424332455553 +565000 ekin = 0.0953935152513606 | erot = 0.861338569497979 | epot = -15.5991653303409 | etot = -14.6424332455915 +566000 ekin = 0.105001366117363 | erot = 0.868811531658242 | epot = -15.6162461434002 | etot = -14.6424332456246 +567000 ekin = 0.11551478920907 | erot = 0.872266750929345 | epot = -15.6302147857879 | etot = -14.6424332456494 +568000 ekin = 0.126230320989268 | erot = 0.872022546762513 | epot = -15.6406861134138 | etot = -14.642433245662 +569000 ekin = 0.13646757520452 | erot = 0.868561781939776 | epot = -15.6474626028035 | etot = -14.6424332456592 +570000 ekin = 0.145634823228517 | erot = 0.862511177264942 | epot = -15.6505792461335 | etot = -14.6424332456401 +571000 ekin = 0.153278250259444 | erot = 0.85460899135856 | epot = -15.6503204872235 | etot = -14.6424332456055 +572000 ekin = 0.159109636953228 | erot = 0.845662918619192 | epot = -15.6472058011307 | etot = -14.6424332455583 +573000 ekin = 0.163011362016512 | erot = 0.836500892322368 | epot = -15.6419454998419 | etot = -14.642433245503 +574000 ekin = 0.165021239079037 | erot = 0.827918058207513 | epot = -15.6353725427317 | etot = -14.6424332454451 +575000 ekin = 0.165302195907189 | erot = 0.820623479706097 | epot = -15.6283589210035 | etot = -14.6424332453902 +576000 ekin = 0.164102988099436 | erot = 0.815190165400348 | epot = -15.6217263988437 | etot = -14.642433245344 +577000 ekin = 0.161716152385033 | erot = 0.812011817945282 | epot = -15.6161612156414 | etot = -14.6424332453111 +578000 ekin = 0.158438569369342 | erot = 0.811269345694562 | epot = -15.6121411603589 | etot = -14.642433245295 +579000 ekin = 0.154538688866582 | erot = 0.812909695779756 | epot = -15.609881629944 | etot = -14.6424332452977 +580000 ekin = 0.150232988451456 | erot = 0.816638977239882 | epot = -15.6093052110108 | etot = -14.6424332453195 +581000 ekin = 0.145672809811769 | erot = 0.821931135408107 | epot = -15.610037190579 | etot = -14.6424332453591 +582000 ekin = 0.140941476788221 | erot = 0.828052590347089 | epot = -15.6114273125489 | etot = -14.6424332454136 +583000 ekin = 0.136060602595884 | erot = 0.834102246891801 | epot = -15.6125960949663 | etot = -14.6424332454786 +584000 ekin = 0.131003759893416 | erot = 0.839065139153076 | epot = -15.6125021445954 | etot = -14.6424332455489 +585000 ekin = 0.125715216480047 | erot = 0.841876757443314 | epot = -15.610025219542 | etot = -14.6424332456187 +586000 ekin = 0.120131224766283 | erot = 0.841493945660697 | epot = -15.6040584161089 | etot = -14.6424332456819 +587000 ekin = 0.114201380569862 | erot = 0.836967317747552 | epot = -15.5936019440503 | etot = -14.6424332457329 +588000 ekin = 0.107907808224941 | erot = 0.82750959597709 | epot = -15.577850649969 | etot = -14.642433245767 +589000 ekin = 0.101280337908465 | erot = 0.812554260667714 | epot = -15.5562678443569 | etot = -14.6424332457808 +590000 ekin = 0.0944063548781498 | erot = 0.791799488415112 | epot = -15.5286390890655 | etot = -14.6424332457722 +591000 ekin = 0.0874345511051164 | erot = 0.765233519218438 | epot = -15.4951013160648 | etot = -14.6424332457413 +592000 ekin = 0.0805723392090151 | erot = 0.733139214281057 | epot = -15.4561447991796 | etot = -14.6424332456895 +593000 ekin = 0.0740771594091624 | erot = 0.696077455345293 | epot = -15.4125878603745 | etot = -14.6424332456201 +594000 ekin = 0.0682423089615835 | erot = 0.654850963355498 | epot = -15.3655265178546 | etot = -14.6424332455375 +595000 ekin = 0.0633782539035135 | erot = 0.610451848321739 | epot = -15.3162633476725 | etot = -14.6424332454472 +596000 ekin = 0.0597906540673872 | erot = 0.563997548399991 | epot = -15.2662214478226 | etot = -14.6424332453552 +597000 ekin = 0.0577565493651072 | erot = 0.516660644083797 | epot = -15.2168504387165 | etot = -14.6424332452676 +598000 ekin = 0.0575003158564822 | erot = 0.469598294353737 | epot = -15.1695318554 | etot = -14.6424332451897 +599000 ekin = 0.0591710965315271 | erot = 0.423886769451641 | epot = -15.1254911111098 | etot = -14.6424332451266 +600000 ekin = 0.0628234356919084 | erot = 0.380465849282374 | epot = -15.085722530056 | etot = -14.6424332450817 +601000 ekin = 0.0684027903404234 | erot = 0.340096852290236 | epot = -15.0509328876879 | etot = -14.6424332450572 +602000 ekin = 0.0757374499151454 | erot = 0.303336891510158 | epot = -15.0215075864789 | etot = -14.6424332450536 +603000 ekin = 0.0845381560125067 | erot = 0.270530726253859 | epot = -14.9975021273365 | etot = -14.6424332450701 +604000 ekin = 0.0944063594091286 | erot = 0.241820347964902 | epot = -14.9786599524778 | etot = -14.6424332451038 +605000 ekin = 0.10485156246129 | erot = 0.217171224792453 | epot = -14.9644560324042 | etot = -14.6424332451505 +606000 ekin = 0.115317556389963 | erot = 0.19641293035746 | epot = -14.9541637319522 | etot = -14.6424332452047 +607000 ekin = 0.125216580352814 | erot = 0.179290709848685 | epot = -14.9469405354619 | etot = -14.6424332452604 +608000 ekin = 0.133969542489555 | erot = 0.165523445158836 | epot = -14.9419262329593 | etot = -14.6424332453109 +609000 ekin = 0.141049537027034 | erot = 0.154862582266178 | epot = -14.9383453646431 | etot = -14.6424332453499 +610000 ekin = 0.146025095174092 | erot = 0.1471460408894 | epot = -14.9356043814358 | etot = -14.6424332453723 +611000 ekin = 0.148599079333654 | erot = 0.142341118194537 | epot = -14.9333734429025 | etot = -14.6424332453743 +612000 ekin = 0.148639027540038 | erot = 0.140571068728109 | epot = -14.9316433416225 | etot = -14.6424332453543 +613000 ekin = 0.146195193891189 | erot = 0.14212144139606 | epot = -14.9307498806004 | etot = -14.6424332453132 +614000 ekin = 0.141503544703117 | erot = 0.147424293659367 | epot = -14.9313610836164 | etot = -14.6424332452539 +615000 ekin = 0.134972482667994 | erot = 0.157020849768205 | epot = -14.9344265776182 | etot = -14.642433245182 +616000 ekin = 0.127153892886345 | erot = 0.171505679771382 | epot = -14.9410928177621 | etot = -14.6424332451044 +617000 ekin = 0.118700960496639 | erot = 0.191457667913243 | epot = -14.9525918734392 | etot = -14.6424332450293 +618000 ekin = 0.110316794781978 | erot = 0.217364584488656 | epot = -14.9701146242355 | etot = -14.6424332449648 +619000 ekin = 0.102698942666746 | erot = 0.249548776229802 | epot = -14.9946809638153 | etot = -14.6424332449188 +620000 ekin = 0.0964852203328029 | erot = 0.28810131748882 | epot = -15.0270197827189 | etot = -14.6424332448972 +621000 ekin = 0.0922059091543824 | erot = 0.332831044361685 | epot = -15.0674701984207 | etot = -14.6424332449047 +622000 ekin = 0.0902463647122828 | erot = 0.383233451857076 | epot = -15.1159130615124 | etot = -14.6424332449431 +623000 ekin = 0.0908226920728038 | erot = 0.438482716259981 | epot = -15.1717386533448 | etot = -14.642433245012 +624000 ekin = 0.0939716062548715 | erot = 0.497448307331879 | epot = -15.2338531586956 | etot = -14.6424332451088 +625000 ekin = 0.0995541611252495 | erot = 0.55873588677621 | epot = -15.3007232931297 | etot = -14.6424332452283 +626000 ekin = 0.107271859328467 | erot = 0.620750477447864 | epot = -15.37045558214 | etot = -14.6424332453637 +627000 ekin = 0.116692826740179 | erot = 0.681778220892588 | epot = -15.4409042931397 | etot = -14.642433245507 +628000 ekin = 0.127285245275851 | erot = 0.740081431761277 | epot = -15.5097999226863 | etot = -14.6424332456492 +629000 ekin = 0.138455039155779 | erot = 0.794000196762996 | epot = -15.5748884817003 | etot = -14.6424332457815 +630000 ekin = 0.14958484293864 | erot = 0.842052640233787 | epot = -15.6340707290682 | etot = -14.6424332458958 +631000 ekin = 0.160071499854153 | erot = 0.883025442872994 | epot = -15.6855301887124 | etot = -14.6424332459852 +632000 ekin = 0.169359720293479 | erot = 0.916046503422886 | epot = -15.7278394697615 | etot = -14.6424332460451 +633000 ekin = 0.176970053692838 | erot = 0.940632922938759 | epot = -15.7600362227044 | etot = -14.6424332460728 +634000 ekin = 0.18251996128985 | erot = 0.956709735133355 | epot = -15.7816629424915 | etot = -14.6424332460683 +635000 ekin = 0.185737466035171 | erot = 0.964597760207225 | epot = -15.7927684722762 | etot = -14.6424332460338 +636000 ekin = 0.186467519302491 | erot = 0.964972204258569 | epot = -15.7938729695347 | etot = -14.6424332459737 +637000 ekin = 0.184671774603369 | erot = 0.958796660379843 | epot = -15.7859016808768 | etot = -14.6424332458936 +638000 ekin = 0.18042282577668 | erot = 0.947239527077098 | epot = -15.770095598654 | etot = -14.6424332458002 +639000 ekin = 0.173894119063272 | erot = 0.931581224200833 | epot = -15.7479085889646 | etot = -14.6424332457005 +640000 ekin = 0.165346701826059 | erot = 0.913120838758217 | epot = -15.720900786185 | etot = -14.6424332456007 +641000 ekin = 0.155113786101867 | erot = 0.893090060094414 | epot = -15.6906370917029 | etot = -14.6424332455066 +642000 ekin = 0.143583869242346 | erot = 0.872580710310524 | epot = -15.6585978249756 | etot = -14.6424332454227 +643000 ekin = 0.131182953687712 | erot = 0.85249016805802 | epot = -15.626106367098 | etot = -14.6424332453522 +644000 ekin = 0.118356305759397 | erot = 0.833486853993089 | epot = -15.5942764050497 | etot = -14.6424332452972 +645000 ekin = 0.105550209083444 | erot = 0.815995971214604 | epot = -15.5639794255564 | etot = -14.6424332452583 +646000 ekin = 0.0931942744180207 | erot = 0.800204061931992 | epot = -15.5358315815853 | etot = -14.6424332452353 +647000 ekin = 0.0816850001788838 | erot = 0.786079744440617 | epot = -15.5101979898464 | etot = -14.6424332452269 +648000 ekin = 0.0713713598428998 | erot = 0.773407243191854 | epot = -15.4872118482658 | etot = -14.6424332452311 +649000 ekin = 0.0625431628711437 | erot = 0.761828976528577 | epot = -15.466805384645 | etot = -14.6424332452453 +650000 ekin = 0.0554227735501042 | erot = 0.750893453411344 | epot = -15.4487494722283 | etot = -14.6424332452669 +651000 ekin = 0.0501605027659902 | erot = 0.740104978445366 | epot = -15.4326987265041 | etot = -14.6424332452927 +652000 ekin = 0.0468336713668948 | erot = 0.728972100417369 | epot = -15.4182390171042 | etot = -14.64243324532 +653000 ekin = 0.0454490492583012 | erot = 0.71705228594169 | epot = -15.4049345805459 | etot = -14.6424332453459 +654000 ekin = 0.0459481524956013 | erot = 0.703990869780751 | epot = -15.3923722676445 | etot = -14.6424332453682 +655000 ekin = 0.0482147495301563 | erot = 0.689552835103781 | epot = -15.3802008300186 | etot = -14.6424332453846 +656000 ekin = 0.052083876127999 | erot = 0.6736463327468 | epot = -15.3681634542687 | etot = -14.6424332453939 +657000 ekin = 0.0573516620867098 | erot = 0.656337023113139 | epot = -15.3561219305948 | etot = -14.6424332453949 +658000 ekin = 0.0637853134946659 | erot = 0.637852348218005 | epot = -15.3440709071003 | etot = -14.6424332453876 +659000 ekin = 0.0711326702887129 | erot = 0.618574815847064 | epot = -15.3321407315083 | etot = -14.6424332453725 +660000 ekin = 0.0791308828116024 | erot = 0.599023454708815 | epot = -15.3205875828713 | etot = -14.6424332453509 +661000 ekin = 0.0875139366244679 | erot = 0.579822939748233 | epot = -15.3097701216978 | etot = -14.6424332453251 +662000 ekin = 0.0960190004205311 | erot = 0.561660610348993 | epot = -15.3001128560677 | etot = -14.6424332452982 +663000 ekin = 0.104391848885269 | erot = 0.54523274605647 | epot = -15.2920578402154 | etot = -14.6424332452737 +664000 ekin = 0.112391863389534 | erot = 0.531182949320087 | epot = -15.286008057965 | etot = -14.6424332452554 +665000 ekin = 0.119797262719802 | erot = 0.520037124798746 | epot = -15.2822676327654 | etot = -14.6424332452468 +666000 ekin = 0.126411190061237 | erot = 0.512141060962394 | epot = -15.2809854962748 | etot = -14.6424332452511 +667000 ekin = 0.132069035722096 | erot = 0.507607681730268 | epot = -15.2821099627224 | etot = -14.64243324527 +668000 ekin = 0.13664691453854 | erot = 0.506281315754884 | epot = -15.2853614755972 | etot = -14.6424332453038 +669000 ekin = 0.140070616008884 | erot = 0.507725566171511 | epot = -15.2902294275315 | etot = -14.6424332453511 +670000 ekin = 0.142323740902266 | erot = 0.511239425097731 | epot = -15.2959964114084 | etot = -14.6424332454084 +671000 ekin = 0.143453306298606 | erot = 0.515903234043229 | epot = -15.3017897858128 | etot = -14.642433245471 +672000 ekin = 0.143571012728166 | erot = 0.520652256715664 | epot = -15.3066565149767 | etot = -14.6424332455328 +673000 ekin = 0.142848733833156 | erot = 0.52437156335394 | epot = -15.3096535427749 | etot = -14.6424332455878 +674000 ekin = 0.1415076132746 | erot = 0.526002362927187 | epot = -15.3099432218319 | etot = -14.6424332456301 +675000 ekin = 0.13980130282334 | erot = 0.524647629020819 | epot = -15.3068821774991 | etot = -14.6424332456549 +676000 ekin = 0.137995095209388 | erot = 0.519664439037725 | epot = -15.3000927799067 | etot = -14.6424332456596 +677000 ekin = 0.136343677284998 | erot = 0.510732098514415 | epot = -15.2895090214424 | etot = -14.642433245643 +678000 ekin = 0.135070664123473 | erot = 0.497888575253319 | epot = -15.2753924849829 | etot = -14.6424332456061 +679000 ekin = 0.134352810446714 | erot = 0.481532294129922 | epot = -15.2583183501282 | etot = -14.6424332455516 +680000 ekin = 0.134310862658442 | erot = 0.462390968603332 | epot = -15.2391350767452 | etot = -14.6424332454834 +681000 ekin = 0.135007638926465 | erot = 0.441462941783532 | epot = -15.2189038261164 | etot = -14.6424332454064 +682000 ekin = 0.136452461528359 | erot = 0.419938865037162 | epot = -15.1988245718911 | etot = -14.6424332453256 +683000 ekin = 0.138609887401901 | erot = 0.399112293315355 | epot = -15.1801554259633 | etot = -14.642433245246 +684000 ekin = 0.141410065652158 | erot = 0.380287181762659 | epot = -15.1641304925878 | etot = -14.642433245173 +685000 ekin = 0.144758102725849 | erot = 0.364688846299896 | epot = -15.1518801941367 | etot = -14.6424332451109 +686000 ekin = 0.148540467122542 | erot = 0.353383275614958 | epot = -15.1443569878014 | etot = -14.6424332450639 +687000 ekin = 0.152627512101174 | erot = 0.347208212231079 | epot = -15.1422689693677 | etot = -14.6424332450355 +688000 ekin = 0.156872371009907 | erot = 0.346718408270883 | epot = -15.1460240243093 | etot = -14.6424332450285 +689000 ekin = 0.161107527975576 | erot = 0.352146941114484 | epot = -15.1556877141346 | etot = -14.6424332450445 +690000 ekin = 0.165141087380535 | erot = 0.363384304940302 | epot = -15.1709586374048 | etot = -14.642433245084 +691000 ekin = 0.16875504264806 | erot = 0.379976931153832 | epot = -15.1911652189475 | etot = -14.6424332451456 +692000 ekin = 0.171707649701815 | erot = 0.401146558394006 | epot = -15.2152874533222 | etot = -14.6424332452264 +693000 ekin = 0.173741393440444 | erot = 0.425831232783773 | epot = -15.2420058715459 | etot = -14.6424332453217 +694000 ekin = 0.174597110621473 | erot = 0.452747528134232 | epot = -15.2697778841809 | etot = -14.6424332454252 +695000 ekin = 0.174033757468432 | erot = 0.480471830915669 | epot = -15.2969388339132 | etot = -14.6424332455291 +696000 ekin = 0.171852263360605 | erot = 0.507536398150921 | epot = -15.3218219071368 | etot = -14.6424332456253 +697000 ekin = 0.167921065286616 | erot = 0.532533688685243 | epot = -15.3428879996772 | etot = -14.6424332457054 +698000 ekin = 0.162200409472727 | erot = 0.55422061991701 | epot = -15.3588542751519 | etot = -14.6424332457621 +699000 ekin = 0.15476241571153 | erot = 0.5716133610199 | epot = -15.3688090225212 | etot = -14.6424332457897 +700000 ekin = 0.14580423000504 | erot = 0.584063387080082 | epot = -15.3723008628698 | etot = -14.6424332457847 +701000 ekin = 0.135652269555348 | erot = 0.591306922713837 | epot = -15.3693924380155 | etot = -14.6424332457463 +702000 ekin = 0.124756460204831 | erot = 0.59348246434204 | epot = -15.3606721702235 | etot = -14.6424332456766 +703000 ekin = 0.113674325949313 | erot = 0.591114401850656 | epot = -15.3472219733804 | etot = -14.6424332455805 +704000 ekin = 0.10304567594439 | erot = 0.585064323190966 | epot = -15.3305432446002 | etot = -14.6424332454648 +705000 ekin = 0.0935593581958762 | erot = 0.576454826529771 | epot = -15.3124474300639 | etot = -14.6424332453383 +706000 ekin = 0.0859140824287833 | erot = 0.566573150252444 | epot = -15.2949204778916 | etot = -14.6424332452103 +707000 ekin = 0.0807756759567746 | erot = 0.556763427605772 | epot = -15.2799723486536 | etot = -14.642433245091 +708000 ekin = 0.0787333622616091 | erot = 0.548316855287971 | epot = -15.2694834625388 | etot = -14.6424332449892 +709000 ekin = 0.0802577669172368 | erot = 0.542368667950884 | epot = -15.2650596797811 | etot = -14.642433244913 +710000 ekin = 0.0856633545554253 | erot = 0.539809747046289 | epot = -15.2679063464703 | etot = -14.6424332448686 +711000 ekin = 0.0950778519056264 | erot = 0.541219180888341 | epot = -15.2787302776541 | etot = -14.6424332448601 +712000 ekin = 0.108420876625267 | erot = 0.546822307908336 | epot = -15.2976764294225 | etot = -14.6424332448889 +713000 ekin = 0.125393451698069 | erot = 0.556476834654442 | epot = -15.3243035313066 | etot = -14.642433244954 +714000 ekin = 0.145479367624701 | erot = 0.569687600115953 | epot = -15.3576002127927 | etot = -14.642433245052 +715000 ekin = 0.167958541120038 | erot = 0.585648522299648 | epot = -15.3960403085969 | etot = -14.6424332451773 +716000 ekin = 0.191931735854292 | erot = 0.603308292527993 | epot = -15.4376732737045 | etot = -14.6424332453222 +717000 ekin = 0.216355400179768 | erot = 0.621454592033853 | epot = -15.4802432376918 | etot = -14.6424332454782 +718000 ekin = 0.240085056513064 | erot = 0.638810139728766 | epot = -15.5213284418775 | etot = -14.6424332456357 +719000 ekin = 0.261925698577658 | erot = 0.654132895983949 | epot = -15.5584918403468 | etot = -14.6424332457852 +720000 ekin = 0.280687969313511 | erot = 0.666312379865697 | epot = -15.5894335950967 | etot = -14.6424332459175 +721000 ekin = 0.295249345590605 | erot = 0.674454385927248 | epot = -15.6121369775423 | etot = -14.6424332460244 +722000 ekin = 0.304619886334631 | erot = 0.677947410255691 | epot = -15.625000542689 | etot = -14.6424332460987 +723000 ekin = 0.308011983728238 | erot = 0.676505724572098 | epot = -15.626950954435 | etot = -14.6424332461346 +724000 ekin = 0.304912667283913 | erot = 0.670186105902335 | epot = -15.6175320193145 | etot = -14.6424332461282 +725000 ekin = 0.295155116710332 | erot = 0.659377522493187 | epot = -15.5969658852808 | etot = -14.6424332460772 +726000 ekin = 0.278983134898071 | erot = 0.644765363163033 | epot = -15.5661817440431 | etot = -14.642433245982 +727000 ekin = 0.257098790791563 | erot = 0.627273860368268 | epot = -15.5268058970054 | etot = -14.6424332458455 +728000 ekin = 0.230680158271426 | erot = 0.607992016186298 | epot = -15.4811054201321 | etot = -14.6424332456743 +729000 ekin = 0.201354496272596 | erot = 0.588089464040467 | epot = -15.431877205792 | etot = -14.6424332454789 +730000 ekin = 0.171114103974836 | erot = 0.568729214721698 | epot = -15.3822765639703 | etot = -14.6424332452738 +731000 ekin = 0.142168923907651 | erot = 0.550984135076315 | epot = -15.3355863040605 | etot = -14.6424332450765 +732000 ekin = 0.116742007096091 | erot = 0.535763349049021 | epot = -15.2949386010514 | etot = -14.6424332449063 +733000 ekin = 0.0968293027534119 | erot = 0.523753647326195 | epot = -15.2630161948611 | etot = -14.6424332447815 +734000 ekin = 0.0839596135584089 | erot = 0.515379592342255 | epot = -15.2417724506168 | etot = -14.6424332447161 +735000 ekin = 0.0789983701762997 | erot = 0.510784464198618 | epot = -15.2322160790924 | etot = -14.6424332447175 +736000 ekin = 0.0820355551921124 | erot = 0.509832642267912 | epot = -15.2343014422445 | etot = -14.6424332447845 +737000 ekin = 0.092382712385484 | erot = 0.512132550856022 | epot = -15.246948508149 | etot = -14.6424332449075 +738000 ekin = 0.108680448513128 | erot = 0.517077971027173 | epot = -15.2681916646103 | etot = -14.64243324507 +739000 ekin = 0.129093715682691 | erot = 0.523904364925655 | epot = -15.2954313258603 | etot = -14.642433245252 +740000 ekin = 0.151555277793326 | erot = 0.531755895778055 | epot = -15.3257444190045 | etot = -14.6424332454331 +741000 ekin = 0.174012721806035 | erot = 0.539758083451399 | epot = -15.3562040508525 | etot = -14.6424332455951 +742000 ekin = 0.194640916830793 | erot = 0.547090549697037 | epot = -15.384164712252 | etot = -14.6424332457242 +743000 ekin = 0.211995737397977 | erot = 0.553054125335024 | epot = -15.4074831085446 | etot = -14.6424332458116 +744000 ekin = 0.225100508722008 | erot = 0.557126762307225 | epot = -15.4246605168831 | etot = -14.6424332458539 +745000 ekin = 0.233469424485825 | erot = 0.559003260236789 | epot = -15.4349059305745 | etot = -14.6424332458519 +746000 ekin = 0.23707991346408 | erot = 0.558614810498058 | epot = -15.4381279697723 | etot = -14.6424332458102 +747000 ekin = 0.236308652983949 | erot = 0.556125790081372 | epot = -15.4348676888016 | etot = -14.6424332457363 +748000 ekin = 0.231845097886983 | erot = 0.551907079329025 | epot = -15.4261854228555 | etot = -14.6424332456395 +749000 ekin = 0.224593843483339 | erot = 0.546487360028757 | epot = -15.4135144490424 | etot = -14.6424332455303 +750000 ekin = 0.215574369391403 | erot = 0.540486233484167 | epot = -15.3984938482956 | etot = -14.64243324542 +751000 ekin = 0.205824583426058 | erot = 0.534535356763698 | epot = -15.382793185509 | etot = -14.6424332453192 +752000 ekin = 0.196313335741561 | erot = 0.52919581521731 | epot = -15.3679423961964 | etot = -14.6424332452375 +753000 ekin = 0.187866475787076 | erot = 0.524881252730185 | epot = -15.3551809736995 | etot = -14.6424332451822 +754000 ekin = 0.181110613625657 | erot = 0.521796491095279 | epot = -15.345340349879 | etot = -14.6424332451581 +755000 ekin = 0.176438042203778 | erot = 0.519900210803623 | epot = -15.3387714981735 | etot = -14.6424332451661 +756000 ekin = 0.173994962646486 | erot = 0.518897676280608 | epot = -15.3353258841311 | etot = -14.642433245204 +757000 ekin = 0.173693190270073 | erot = 0.518265706177119 | epot = -15.3343921417132 | etot = -14.642433245266 +758000 ekin = 0.175243155014324 | erot = 0.517307659815294 | epot = -15.3349840601735 | etot = -14.6424332453439 +759000 ekin = 0.178203703092602 | erot = 0.515231902157482 | epot = -15.3358688506779 | etot = -14.6424332454278 +760000 ekin = 0.182042463548487 | erot = 0.51124383794149 | epot = -15.3357195469977 | etot = -14.6424332455077 +761000 ekin = 0.186199747761053 | erot = 0.50463982554006 | epot = -15.3332728188755 | etot = -14.6424332455744 +762000 ekin = 0.190149235945104 | erot = 0.494891409026585 | epot = -15.3274738905921 | etot = -14.6424332456204 +763000 ekin = 0.193449921094625 | erot = 0.481710238280476 | epot = -15.3175934050158 | etot = -14.6424332456407 +764000 ekin = 0.195785552426496 | erot = 0.465087294345703 | epot = -15.3033060924053 | etot = -14.6424332456331 +765000 ekin = 0.196989678184872 | erot = 0.445303873487263 | epot = -15.2847267972702 | etot = -14.6424332455981 +766000 ekin = 0.197055919182987 | erot = 0.422915440288454 | epot = -15.2624046050099 | etot = -14.6424332455385 +767000 ekin = 0.19613407649406 | erot = 0.398712320920584 | epot = -15.2372796428736 | etot = -14.6424332454589 +768000 ekin = 0.194513096652813 | erot = 0.37366293895697 | epot = -15.2106092809754 | etot = -14.6424332453656 +769000 ekin = 0.192592017627635 | erot = 0.348845887484862 | epot = -15.183871150378 | etot = -14.6424332452655 +770000 ekin = 0.190840163686923 | erot = 0.325376840212478 | epot = -15.1586502490658 | etot = -14.6424332451664 +771000 ekin = 0.189748397228249 | erot = 0.304335529900872 | epot = -15.1365171722054 | etot = -14.6424332450763 +772000 ekin = 0.18977434185156 | erot = 0.286697153922422 | epot = -15.1189047407765 | etot = -14.6424332450026 +773000 ekin = 0.191286034501482 | erot = 0.273271857838015 | epot = -15.1069911372911 | etot = -14.6424332449516 +774000 ekin = 0.194510000609465 | erot = 0.264655458971731 | epot = -15.1015987045099 | etot = -14.6424332449287 +775000 ekin = 0.199490639679827 | erot = 0.261194193157327 | epot = -15.1031180777734 | etot = -14.6424332449363 +776000 ekin = 0.206067477065984 | erot = 0.26296580393673 | epot = -15.1114665259772 | etot = -14.6424332449745 +777000 ekin = 0.213875019086146 | erot = 0.269778568413633 | epot = -15.1260868325404 | etot = -14.6424332450407 +778000 ekin = 0.222366868965164 | erot = 0.281188790676632 | epot = -15.1459889047712 | etot = -14.6424332451294 +779000 ekin = 0.230862102268941 | erot = 0.2965359441758 | epot = -15.1698312916782 | etot = -14.6424332452334 +780000 ekin = 0.238608567019415 | erot = 0.314993169090579 | epot = -15.1960349814538 | etot = -14.6424332453438 +781000 ekin = 0.244855557741695 | erot = 0.335629445234049 | epot = -15.222918248427 | etot = -14.6424332454513 +782000 ekin = 0.248927612478521 | erot = 0.357478674283205 | epot = -15.2488395323088 | etot = -14.642433245547 +783000 ekin = 0.250291897529516 | erot = 0.379610269023755 | epot = -15.2723354121766 | etot = -14.6424332456234 +784000 ekin = 0.248613283253053 | erot = 0.401195731117637 | epot = -15.2922422600447 | etot = -14.642433245674 +785000 ekin = 0.243793133450592 | erot = 0.421566090460737 | epot = -15.3077924696064 | etot = -14.6424332456951 +786000 ekin = 0.23598950185229 | erot = 0.440255905200772 | epot = -15.3186786527377 | etot = -14.6424332456846 +787000 ekin = 0.225617610784087 | erot = 0.457030673426299 | epot = -15.3250815298539 | etot = -14.6424332456436 +788000 ekin = 0.213330260901152 | erot = 0.471895861690097 | epot = -15.3276593681662 | etot = -14.642433245575 +789000 ekin = 0.19997849967651 | erot = 0.485087183877581 | epot = -15.3274989290384 | etot = -14.6424332454844 +790000 ekin = 0.186553834702627 | erot = 0.497043141237974 | epot = -15.3260302213197 | etot = -14.6424332453791 +791000 ekin = 0.174114766792028 | erot = 0.508362048565589 | epot = -15.3249100606257 | etot = -14.6424332452681 +792000 ekin = 0.163702420431615 | erot = 0.519746739177318 | epot = -15.3258824047698 | etot = -14.6424332451609 +793000 ekin = 0.156252224966357 | erot = 0.531940822986537 | epot = -15.3306262930203 | etot = -14.6424332450674 +794000 ekin = 0.152510350035351 | erot = 0.545660777312736 | epot = -15.3406043723442 | etot = -14.6424332449961 +795000 ekin = 0.152964251158983 | erot = 0.561528326979184 | epot = -15.3569258230923 | etot = -14.6424332449541 +796000 ekin = 0.157795747358379 | erot = 0.58000757877651 | epot = -15.3802365710807 | etot = -14.6424332449459 +797000 ekin = 0.166862457859208 | erot = 0.601351255568297 | epot = -15.4106469584007 | etot = -14.6424332449732 +798000 ekin = 0.179709603433377 | erot = 0.625560121844245 | epot = -15.4477029703127 | etot = -14.642433245035 +799000 ekin = 0.195609966062416 | erot = 0.65235924717518 | epot = -15.4904024583651 | etot = -14.6424332451275 +800000 ekin = 0.213626158791744 | erot = 0.681194021872009 | epot = -15.5372534259083 | etot = -14.6424332452445 +801000 ekin = 0.232687040193829 | erot = 0.711247726384584 | epot = -15.5863680119569 | etot = -14.6424332453785 +802000 ekin = 0.251669429106226 | erot = 0.741480919833726 | epot = -15.6355835944605 | etot = -14.6424332455205 +803000 ekin = 0.269477067858271 | erot = 0.77069100841835 | epot = -15.6826013219381 | etot = -14.6424332456615 +804000 ekin = 0.2851105414574 | erot = 0.797588259155217 | epot = -15.7251320464048 | etot = -14.6424332457922 +805000 ekin = 0.297723982505655 | erot = 0.82088252879607 | epot = -15.7610397572062 | etot = -14.6424332459044 +806000 ekin = 0.306666387686443 | erot = 0.839373432909784 | epot = -15.7884730665875 | etot = -14.6424332459913 +807000 ekin = 0.311506975554881 | erot = 0.852035914442116 | epot = -15.8059761360445 | etot = -14.6424332460475 +808000 ekin = 0.31204517625202 | erot = 0.858093398524567 | epot = -15.8125718208467 | etot = -14.6424332460701 +809000 ekin = 0.308306642386009 | erot = 0.857071970755237 | epot = -15.8078118591995 | etot = -14.6424332460582 +810000 ekin = 0.3005272205585 | erot = 0.848831113925777 | epot = -15.7917915804977 | etot = -14.6424332460134 +811000 ekin = 0.289127204417746 | erot = 0.83356913861968 | epot = -15.7651295889766 | etot = -14.6424332459392 +812000 ekin = 0.274678427598231 | erot = 0.811804116491095 | epot = -15.7289157899298 | etot = -14.6424332458404 +813000 ekin = 0.257866835579171 | erot = 0.784333459541309 | epot = -15.684633540844 | etot = -14.6424332457235 +814000 ekin = 0.23945308058907 | erot = 0.752176980195558 | epot = -15.63406330638 | etot = -14.6424332455953 +815000 ekin = 0.220233415146299 | erot = 0.716509170266206 | epot = -15.5791758308753 | etot = -14.6424332454628 +816000 ekin = 0.201002751041202 | erot = 0.678586569747871 | epot = -15.5220225661217 | etot = -14.6424332453326 +817000 ekin = 0.18252126107488 | erot = 0.639675603864852 | epot = -15.4646301101504 | etot = -14.6424332452107 +818000 ekin = 0.165485401522705 | erot = 0.600985363831257 | epot = -15.4089040104563 | etot = -14.6424332451023 +819000 ekin = 0.150503789775637 | erot = 0.563608719248849 | epot = -15.356545754036 | etot = -14.6424332450115 +820000 ekin = 0.138078032174191 | erot = 0.528474068971486 | epot = -15.3089853460871 | etot = -14.6424332449414 +821000 ekin = 0.128588386726458 | erot = 0.496309093116269 | epot = -15.2673307247368 | etot = -14.6424332448941 +822000 ekin = 0.122284066133841 | erot = 0.467617125513468 | epot = -15.2323344365177 | etot = -14.6424332448704 +823000 ekin = 0.119278020922153 | erot = 0.442666228475553 | epot = -15.2043774942682 | etot = -14.6424332448705 +824000 ekin = 0.119546158602336 | erot = 0.421490682734476 | epot = -15.1834700862298 | etot = -14.642433244893 +825000 ekin = 0.122931110514093 | erot = 0.403904342218594 | epot = -15.1692686976687 | etot = -14.6424332449361 +826000 ekin = 0.129150803764777 | erot = 0.389525074993895 | epot = -15.1611091237552 | etot = -14.6424332449966 +827000 ekin = 0.137812176400527 | erot = 0.377809252263535 | epot = -15.1580546737348 | etot = -14.6424332450707 +828000 ekin = 0.148430331610601 | erot = 0.368094906955077 | epot = -15.1589584837195 | etot = -14.6424332451538 +829000 ekin = 0.160453205764727 | erot = 0.359651737503703 | epot = -15.1625381885089 | etot = -14.6424332452404 +830000 ekin = 0.173291382900529 | erot = 0.351735589536635 | epot = -15.1674602177621 | etot = -14.642433245325 +831000 ekin = 0.186352012967339 | erot = 0.343644456321088 | epot = -15.17242971469 | etot = -14.6424332454015 +832000 ekin = 0.199074924610278 | erot = 0.334772487912379 | epot = -15.1762806579876 | etot = -14.6424332454649 +833000 ekin = 0.210968084885577 | erot = 0.324658115180513 | epot = -15.1780594455764 | etot = -14.6424332455103 +834000 ekin = 0.22163875726204 | erot = 0.313022323434694 | epot = -15.1770943262316 | etot = -14.6424332455348 +835000 ekin = 0.230816330006794 | erot = 0.299793483319765 | epot = -15.1730430588635 | etot = -14.6424332455369 +836000 ekin = 0.238363132178559 | erot = 0.285116039954826 | epot = -15.1659124176508 | etot = -14.6424332455174 +837000 ekin = 0.244270841534548 | erot = 0.269341751254572 | epot = -15.1560458382684 | etot = -14.6424332454793 +838000 ekin = 0.248642320238245 | erot = 0.253003904099761 | epot = -15.144079469765 | etot = -14.642433245427 +839000 ekin = 0.251661569328948 | erot = 0.236776758984022 | epot = -15.1308715736795 | etot = -14.6424332453665 +840000 ekin = 0.253557306828097 | erot = 0.221424057159249 | epot = -15.1174146092912 | etot = -14.6424332453038 +841000 ekin = 0.254567562695129 | erot = 0.20774147574213 | epot = -15.1047422836817 | etot = -14.6424332452444 +842000 ekin = 0.254912814680555 | erot = 0.196498262353486 | epot = -15.0938443222266 | etot = -14.6424332451926 +843000 ekin = 0.25478313076125 | erot = 0.188382921786766 | epot = -15.0855992976989 | etot = -14.6424332451509 +844000 ekin = 0.254340789692162 | erot = 0.183956927272162 | epot = -15.0807309620847 | etot = -14.6424332451204 +845000 ekin = 0.253734932885183 | erot = 0.183619247980868 | epot = -15.0797874259671 | etot = -14.6424332451011 +846000 ekin = 0.253120504189248 | erot = 0.187583282240197 | epot = -15.0831370315218 | etot = -14.6424332450923 +847000 ekin = 0.252671650081459 | erot = 0.195866742639432 | epot = -15.0909716378146 | etot = -14.6424332450937 +848000 ekin = 0.252580915304066 | erot = 0.208294222463377 | epot = -15.103308382873 | etot = -14.6424332451056 +849000 ekin = 0.253039966843089 | erot = 0.224511555531961 | epot = -15.1199847675035 | etot = -14.6424332451285 +850000 ekin = 0.254204001794782 | erot = 0.244010590097847 | epot = -15.1406478370558 | etot = -14.6424332451632 +851000 ekin = 0.256148339024743 | erot = 0.266162563602639 | epot = -15.1647441478372 | etot = -14.6424332452098 +852000 ekin = 0.258829686440357 | erot = 0.290257858698255 | epot = -15.1915207904057 | etot = -14.6424332452671 +853000 ekin = 0.262064657830147 | erot = 0.315549558167899 | epot = -15.2200474613301 | etot = -14.642433245332 +854000 ekin = 0.265534116125842 | erot = 0.341297947736774 | epot = -15.2492653092626 | etot = -14.6424332454 +855000 ekin = 0.268815174658127 | erot = 0.36681300443161 | epot = -15.2780614245547 | etot = -14.642433245465 +856000 ekin = 0.271435486960143 | erot = 0.391492007902569 | epot = -15.3053607403836 | etot = -14.6424332455209 +857000 ekin = 0.272939108069131 | erot = 0.414849750475003 | epot = -15.3302221041064 | etot = -14.6424332455623 +858000 ekin = 0.272951155046072 | erot = 0.436539390690098 | epot = -15.3519237913214 | etot = -14.6424332455852 +859000 ekin = 0.271229880682515 | erot = 0.456362750061876 | epot = -15.3700258763321 | etot = -14.6424332455877 +860000 ekin = 0.267698633839345 | erot = 0.474269718463609 | epot = -15.3844015978732 | etot = -14.6424332455702 +861000 ekin = 0.262455001757423 | erot = 0.490347316011031 | epot = -15.3952355633033 | etot = -14.6424332455349 +862000 ekin = 0.255758797180063 | erot = 0.504799761302306 | epot = -15.4029918039677 | etot = -14.6424332454854 +863000 ekin = 0.248003564343451 | erot = 0.517921532815844 | epot = -15.4083583425857 | etot = -14.6424332454264 +864000 ekin = 0.239677655585439 | erot = 0.530065823506495 | epot = -15.412176724455 | etot = -14.642433245363 +865000 ekin = 0.23132088944446 | erot = 0.541610953536998 | epot = -15.4153650882816 | etot = -14.6424332453002 +866000 ekin = 0.223481813673878 | erot = 0.552927233334005 | epot = -15.41884229225 | etot = -14.6424332452421 +867000 ekin = 0.216679174488124 | erot = 0.564346499433549 | epot = -15.4234589191144 | etot = -14.6424332451927 +868000 ekin = 0.211369750013082 | erot = 0.576136138939065 | epot = -15.4299391341069 | etot = -14.6424332451547 +869000 ekin = 0.207923502302006 | erot = 0.588478941150607 | epot = -15.4388356885827 | etot = -14.64243324513 +870000 ekin = 0.206606152993159 | erot = 0.601459626888393 | epot = -15.4504990250012 | etot = -14.6424332451197 +871000 ekin = 0.207568796750574 | erot = 0.615058451102447 | epot = -15.4650604929769 | etot = -14.6424332451239 +872000 ekin = 0.210843969893514 | erot = 0.629151875755212 | epot = -15.4824290907906 | etot = -14.6424332451419 +873000 ekin = 0.216347593110671 | erot = 0.643519970828197 | epot = -15.5023008091114 | etot = -14.6424332451726 +874000 ekin = 0.223886305134761 | erot = 0.65785990972427 | epot = -15.5241794600729 | etot = -14.6424332452139 +875000 ekin = 0.233169807544781 | erot = 0.671804662203727 | epot = -15.5474077150118 | etot = -14.6424332452633 +876000 ekin = 0.243827877955837 | erot = 0.684945735792129 | epot = -15.5712068590658 | etot = -14.6424332453179 +877000 ekin = 0.255431632539029 | erot = 0.69685856734628 | epot = -15.5947234452596 | etot = -14.6424332453743 +878000 ekin = 0.267518408507424 | erot = 0.707128927380235 | epot = -15.6170805813169 | etot = -14.6424332454292 +879000 ekin = 0.279619300254511 | erot = 0.715378495712557 | epot = -15.6374310414462 | etot = -14.6424332454792 +880000 ekin = 0.291287955017456 | erot = 0.721287639190631 | epot = -15.6550088397293 | etot = -14.6424332455213 +881000 ekin = 0.302128778463176 | erot = 0.724613422802369 | epot = -15.6691754468184 | etot = -14.6424332455529 +882000 ekin = 0.311822304069024 | erot = 0.725201068168812 | epot = -15.6794566178103 | etot = -14.6424332455725 +883000 ekin = 0.320145243789556 | erot = 0.722987481096488 | epot = -15.6855659704653 | etot = -14.6424332455793 +884000 ekin = 0.326982762202337 | erot = 0.717996120151906 | epot = -15.6874121279283 | etot = -14.642433245574 +885000 ekin = 0.332330882217347 | erot = 0.710323349665211 | epot = -15.6850874774409 | etot = -14.6424332455584 +886000 ekin = 0.336287673337102 | erot = 0.700117442969765 | epot = -15.6788383618422 | etot = -14.6424332455353 +887000 ekin = 0.33903296415872 | erot = 0.687552454430858 | epot = -15.6690186640981 | etot = -14.6424332455086 +888000 ekin = 0.340797654552155 | erot = 0.67280010093964 | epot = -15.6560310009741 | etot = -14.6424332454823 +889000 ekin = 0.341825106167166 | erot = 0.656003407096678 | epot = -15.6402617587246 | etot = -14.6424332454608 +890000 ekin = 0.342328347583419 | erot = 0.637256013160556 | epot = -15.6220176061914 | etot = -14.6424332454474 +891000 ekin = 0.342447730500021 | erot = 0.616590618565289 | epot = -15.6014715945102 | etot = -14.6424332454449 +892000 ekin = 0.342214057419104 | erot = 0.593979026501831 | epot = -15.5786263293753 | etot = -14.6424332454543 +893000 ekin = 0.34152200491664 | erot = 0.569344767729407 | epot = -15.5533000181212 | etot = -14.6424332454752 +894000 ekin = 0.340117934122997 | erot = 0.542587519912816 | epot = -15.525138699541 | etot = -14.6424332455052 +895000 ekin = 0.337605044786637 | erot = 0.513616778977938 | epot = -15.4936550693051 | etot = -14.6424332455405 +896000 ekin = 0.333467462875054 | erot = 0.48239077517223 | epot = -15.4582914836235 | etot = -14.6424332455762 +897000 ekin = 0.327113397523327 | erot = 0.448955709001807 | epot = -15.4185023521314 | etot = -14.6424332456062 +898000 ekin = 0.317936017621265 | erot = 0.413480165458539 | epot = -15.3738494287041 | etot = -14.6424332456243 +899000 ekin = 0.305389123795979 | erot = 0.376280077469313 | epot = -15.3241024468894 | etot = -14.6424332456241 +900000 ekin = 0.289072881395148 | erot = 0.337830752319287 | epot = -15.2693368793143 | etot = -14.6424332455999 +901000 ekin = 0.268822686259622 | erot = 0.298764046957452 | epot = -15.2100199787646 | etot = -14.6424332455475 +902000 ekin = 0.244791653968919 | erot = 0.259850521118035 | epot = -15.1470754205513 | etot = -14.6424332454644 +903000 ekin = 0.217514571462472 | erot = 0.221968047210473 | epot = -15.0819158640236 | etot = -14.6424332453507 +904000 ekin = 0.187939204411346 | erot = 0.186059692012592 | epot = -15.0164321416341 | etot = -14.6424332452102 +905000 ekin = 0.157410847731204 | erot = 0.153084564883822 | epot = -14.9529286576653 | etot = -14.6424332450503 +906000 ekin = 0.127599356271268 | erot = 0.123965703545286 | epot = -14.8939983046991 | etot = -14.6424332448825 +907000 ekin = 0.100365589130667 | erot = 0.0995389863896931 | epot = -14.8423378202422 | etot = -14.6424332447218 +908000 ekin = 0.0775759855945855 | erot = 0.0805066337401435 | epot = -14.800515863919 | etot = -14.6424332445842 +909000 ekin = 0.0608876950034 | erot = 0.0673982354567511 | epot = -14.7707191749454 | etot = -14.6424332444853 +910000 ekin = 0.0515382922989042 | erot = 0.0605415547706379 | epot = -14.7545130915067 | etot = -14.6424332444371 +911000 ekin = 0.0501789452911252 | erot = 0.0600446989620123 | epot = -14.7526568886991 | etot = -14.642433244446 +912000 ekin = 0.0567846925755769 | erot = 0.0657906450221707 | epot = -14.7650085821085 | etot = -14.6424332445108 +913000 ekin = 0.0706603747975489 | erot = 0.0774445361855688 | epot = -14.790538155607 | etot = -14.6424332446239 +914000 ekin = 0.0905398584143666 | erot = 0.0944735694282315 | epot = -14.8274466726145 | etot = -14.6424332447719 +915000 ekin = 0.114756144633904 | erot = 0.116178630204502 | epot = -14.8733680197774 | etot = -14.642433244939 +916000 ekin = 0.141447043407684 | erot = 0.141736093135102 | epot = -14.9256163816514 | etot = -14.6424332451087 +917000 ekin = 0.168758535424836 | erot = 0.170247440483737 | epot = -14.9814392211754 | etot = -14.6424332452668 +918000 ekin = 0.195014913443954 | erot = 0.200793639362701 | epot = -15.0382417982093 | etot = -14.6424332454026 +919000 ekin = 0.218837422087121 | erot = 0.232490666329554 | epot = -15.0937613339258 | etot = -14.6424332455091 +920000 ekin = 0.239206641026195 | erot = 0.264542267085039 | epot = -15.1461821536945 | etot = -14.6424332455832 +921000 ekin = 0.25547457715008 | erot = 0.296286050795184 | epot = -15.1941938735701 | etot = -14.6424332456248 +922000 ekin = 0.267338631216139 | erot = 0.327229363198297 | epot = -15.2370012400506 | etot = -14.6424332456361 +923000 ekin = 0.274791412213564 | erot = 0.357072039930916 | epot = -15.2742966977653 | etot = -14.6424332456208 +924000 ekin = 0.278059017514789 | erot = 0.385714059426418 | epot = -15.306206322525 | etot = -14.6424332455838 +925000 ekin = 0.277537405165931 | erot = 0.413247220089643 | epot = -15.333217870786 | etot = -14.6424332455304 +926000 ekin = 0.273733135235124 | erot = 0.439931173656047 | epot = -15.3560975543575 | etot = -14.6424332454664 +927000 ekin = 0.267211859637652 | erot = 0.466155363877246 | epot = -15.3758004689123 | etot = -14.6424332453974 +928000 ekin = 0.258555847531632 | erot = 0.492389553497958 | epot = -15.3933786463587 | etot = -14.6424332453291 +929000 ekin = 0.248330567886967 | erot = 0.519126582977394 | epot = -15.4098903961312 | etot = -14.6424332452668 +930000 ekin = 0.23705974716086 | erot = 0.546821711627624 | epot = -15.4263147040038 | etot = -14.6424332452153 +931000 ekin = 0.225208144800234 | erot = 0.575833282919438 | epot = -15.4434746728981 | etot = -14.6424332451784 +932000 ekin = 0.213171319360063 | erot = 0.606369490847652 | epot = -15.4619740553666 | etot = -14.6424332451589 +933000 ekin = 0.201271722990057 | erot = 0.638445690374705 | epot = -15.4821506585231 | etot = -14.6424332451583 +934000 ekin = 0.189760460104366 | erot = 0.67185600669489 | epot = -15.5040497119762 | etot = -14.6424332451769 +935000 ekin = 0.178823941832753 | erot = 0.706161996583042 | epot = -15.5274191836291 | etot = -14.6424332452133 +936000 ekin = 0.168594479109611 | erot = 0.74069986583281 | epot = -15.5517275902074 | etot = -14.642433245265 +937000 ekin = 0.159163635629916 | erot = 0.774606336201627 | epot = -15.5762032171597 | etot = -14.6424332453281 +938000 ekin = 0.150596971910416 | erot = 0.806861786791798 | epot = -15.5998920041003 | etot = -14.6424332453981 +939000 ekin = 0.142948711628538 | erot = 0.83634788352242 | epot = -15.6217298406206 | etot = -14.6424332454696 +940000 ekin = 0.136274889167971 | erot = 0.861915676024924 | epot = -15.6406238107303 | etot = -14.6424332455374 +941000 ekin = 0.130643703196498 | erot = 0.882459199117052 | epot = -15.6555361479098 | etot = -14.6424332455962 +942000 ekin = 0.126142088159105 | erot = 0.896989065169274 | epot = -15.66556439897 | etot = -14.6424332456417 +943000 ekin = 0.122877886109369 | erot = 0.904700444356692 | epot = -15.6700115761362 | etot = -14.6424332456702 +944000 ekin = 0.120977407412015 | erot = 0.905030230235472 | epot = -15.6684408833271 | etot = -14.6424332456797 +945000 ekin = 0.120578563691314 | erot = 0.897699054744981 | epot = -15.6607108641056 | etot = -14.6424332456693 +946000 ekin = 0.121820103594724 | erot = 0.882735070928503 | epot = -15.646988420163 | etot = -14.6424332456398 +947000 ekin = 0.124827761130805 | erot = 0.860477935596992 | epot = -15.6277389423211 | etot = -14.6424332455933 +948000 ekin = 0.129698334170726 | erot = 0.831563037038998 | epot = -15.6036946167428 | etot = -14.642433245533 +949000 ekin = 0.136482857560392 | erot = 0.796887554723542 | epot = -15.5758036577472 | etot = -14.6424332454633 +950000 ekin = 0.145170138933426 | erot = 0.757561255989732 | epot = -15.5451646403121 | etot = -14.642433245389 +951000 ekin = 0.155672002997215 | erot = 0.714845916095059 | epot = -15.5129511644075 | etot = -14.6424332453152 +952000 ekin = 0.167811650837965 | erot = 0.67008783325118 | epot = -15.480332729336 | etot = -14.6424332452469 +953000 ekin = 0.181316579472455 | erot = 0.624648095212333 | epot = -15.4483979198734 | etot = -14.6424332451886 +954000 ekin = 0.195817500701693 | erot = 0.579835080695355 | epot = -15.4180858265408 | etot = -14.6424332451437 +955000 ekin = 0.210854606876419 | erot = 0.536843219767442 | epot = -15.3901310717585 | etot = -14.6424332451147 +956000 ekin = 0.22589229983617 | erot = 0.496701376789191 | epot = -15.3650269217278 | etot = -14.6424332451025 +957000 ekin = 0.240343066496498 | erot = 0.460233438090612 | epot = -15.3430097496938 | etot = -14.6424332451067 +958000 ekin = 0.253600493836355 | erot = 0.428032849889929 | epot = -15.3240665888515 | etot = -14.6424332451252 +959000 ekin = 0.265080433744447 | erot = 0.400452005453988 | epot = -15.3079656843532 | etot = -14.6424332451548 +960000 ekin = 0.274268068126047 | erot = 0.37760654944402 | epot = -15.294307862761 | etot = -14.6424332451909 +961000 ekin = 0.280767177998564 | erot = 0.359393861243516 | epot = -15.2825942844706 | etot = -14.6424332452285 +962000 ekin = 0.284346484058158 | erot = 0.34552419881024 | epot = -15.2723039281308 | etot = -14.6424332452624 +963000 ekin = 0.284976816084592 | erot = 0.335562232322765 | epot = -15.2629722936953 | etot = -14.6424332452879 +964000 ekin = 0.282852494243092 | erot = 0.328975986490651 | epot = -15.2542617260353 | etot = -14.6424332453015 +965000 ekin = 0.278391086611333 | erot = 0.325189577593016 | epot = -15.2460139095058 | etot = -14.6424332453015 +966000 ekin = 0.272207924676324 | erot = 0.323635640145639 | epot = -15.2382768101098 | etot = -14.6424332452879 +967000 ekin = 0.265065367868708 | erot = 0.323803079983033 | epot = -15.2313016931144 | etot = -14.6424332452627 +968000 ekin = 0.257801293713459 | erot = 0.325275872287221 | epot = -15.2255104112304 | etot = -14.6424332452297 +969000 ekin = 0.251245661475255 | erot = 0.327759142573571 | epot = -15.2214380492424 | etot = -14.6424332451936 +970000 ekin = 0.246137008995617 | erot = 0.331089781179348 | epot = -15.2196600353345 | etot = -14.6424332451595 +971000 ekin = 0.243051319619918 | erot = 0.335230325664218 | epot = -15.220714890416 | etot = -14.6424332451318 +972000 ekin = 0.242353409643632 | erot = 0.340246678804405 | epot = -15.2250333335622 | etot = -14.6424332451142 +973000 ekin = 0.2441763381681 | erot = 0.346272190710886 | epot = -15.2328817739879 | etot = -14.642433245109 +974000 ekin = 0.248428661663904 | erot = 0.353462430362299 | epot = -15.2443243371435 | etot = -14.6424332451173 +975000 ekin = 0.254824314808745 | erot = 0.361946299431111 | epot = -15.2592038593792 | etot = -14.6424332451394 +976000 ekin = 0.26292684882563 | erot = 0.371779749930331 | epot = -15.2771398439303 | etot = -14.6424332451743 +977000 ekin = 0.27219923533505 | erot = 0.382908123264369 | epot = -15.29754060382 | etot = -14.6424332452206 +978000 ekin = 0.282052066854694 | erot = 0.395142048097406 | epot = -15.3196273602282 | etot = -14.6424332452761 +979000 ekin = 0.291885751915604 | erot = 0.408150081470976 | epot = -15.3424690787245 | etot = -14.6424332453379 +980000 ekin = 0.301125083790157 | erot = 0.421469125221772 | epot = -15.3650274544147 | etot = -14.6424332454028 +981000 ekin = 0.309246535916217 | erot = 0.434531423655031 | epot = -15.3862112050381 | etot = -14.6424332454669 +982000 ekin = 0.315799497488439 | erot = 0.446704965614828 | epot = -15.4049377086292 | etot = -14.642433245526 +983000 ekin = 0.320422573217629 | erot = 0.457342632741568 | epot = -15.4201984515353 | etot = -14.6424332455761 +984000 ekin = 0.322855465254252 | erot = 0.465834622596749 | epot = -15.4311233334646 | etot = -14.6424332456136 +985000 ekin = 0.322946302470394 | erot = 0.47165859097122 | epot = -15.4370381390773 | etot = -14.6424332456357 +986000 ekin = 0.320653917800696 | erot = 0.474422556587648 | epot = -15.437509720029 | etot = -14.6424332456406 +987000 ekin = 0.31604462735714 | erot = 0.473896755512796 | epot = -15.4323746284979 | etot = -14.642433245628 +988000 ekin = 0.309283477263999 | erot = 0.470032116942454 | epot = -15.4217488398048 | etot = -14.6424332455984 +989000 ekin = 0.300620522164939 | erot = 0.462964620619315 | epot = -15.406018388338 | etot = -14.6424332455537 +990000 ekin = 0.290373280687637 | erot = 0.453006262992374 | epot = -15.3858127891766 | etot = -14.6424332454965 +991000 ekin = 0.278906915702925 | erot = 0.440624526216757 | epot = -15.3619646873499 | etot = -14.6424332454302 +992000 ekin = 0.266613826413316 | erot = 0.42641300688875 | epot = -15.3354600786602 | etot = -14.6424332453582 +993000 ekin = 0.253894212445666 | erot = 0.411056197521998 | epot = -15.3073836552517 | etot = -14.6424332452841 +994000 ekin = 0.241138837000196 | erot = 0.395291372385701 | epot = -15.2788634545969 | etot = -14.642433245211 +995000 ekin = 0.228714768908018 | erot = 0.379870207852185 | epot = -15.2510182219023 | etot = -14.6424332451421 +996000 ekin = 0.216954417472331 | erot = 0.365522282703969 | epot = -15.2249099452561 | etot = -14.6424332450798 +997000 ekin = 0.206147766458768 | erot = 0.352922066134627 | epot = -15.2015030776195 | etot = -14.6424332450261 +998000 ekin = 0.196537413161314 | erot = 0.34266049598664 | epot = -15.1816311541306 | etot = -14.6424332449827 +999000 ekin = 0.188315843917132 | erot = 0.335221830000276 | epot = -15.1659709188677 | etot = -14.6424332449503 +1000000 ekin = 0.181624323072266 | erot = 0.330966139643081 | epot = -15.1550237076453 | etot = -14.6424332449299 + 1000000 0.013453654 -1.5270261 0.011523695 -1.4973399 -8.4815516e-05 +Loop time of 18.9591 on 1 procs for 1000000 steps with 10 atoms + +Performance: 45571.887 tau/day, 52745.239 timesteps/s +98.5% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 15.272 | 15.272 | 15.272 | 0.0 | 80.55 +Bond | 0.58511 | 0.58511 | 0.58511 | 0.0 | 3.09 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.19027 | 0.19027 | 0.19027 | 0.0 | 1.00 +Output | 8e-06 | 8e-06 | 8e-06 | 0.0 | 0.00 +Modify | 2.6225 | 2.6225 | 2.6225 | 0.0 | 13.83 +Other | | 0.2893 | | | 1.53 + +Nlocal: 10 ave 10 max 10 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 43 ave 43 max 43 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 43 +Ave neighs/atom = 4.3 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:18 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.18Jun19.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.18Jun19.duplex1.g++.4 new file mode 100644 index 0000000000..59800043d3 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex1/log.18Jun19.duplex1.g++.4 @@ -0,0 +1,1165 @@ +LAMMPS (18 Jun 2019) +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + special bonds CPU = 0.000462 secs + read_data CPU = 0.004857 secs + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav ${T} 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqav 0.1 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.341 | 7.523 | 7.705 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4711818 0.0069384985 -1.4642433 2.5836586e-06 +1000 ekin = 0.00113448721737009 | erot = 0.0041345594773427 | epot = -14.6477022915193 | etot = -14.6424332448246 +2000 ekin = 0.00449927223902292 | erot = 0.0164446434455803 | epot = -14.6633771605337 | etot = -14.6424332448491 +3000 ekin = 0.00997964450840756 | erot = 0.0366523356056466 | epot = -14.6890652250033 | etot = -14.6424332448892 +4000 ekin = 0.017388811129498 | erot = 0.0643039804300251 | epot = -14.7241260365031 | etot = -14.6424332449436 +5000 ekin = 0.0264744514136422 | erot = 0.0987844033142134 | epot = -14.7676920997383 | etot = -14.6424332450104 +6000 ekin = 0.0369277948555727 | erot = 0.13933657105258 | epot = -14.8186976109956 | etot = -14.6424332450875 +7000 ekin = 0.0483950557190949 | erot = 0.18508629569211 | epot = -14.8759145965832 | etot = -14.642433245172 +8000 ekin = 0.0604909336919856 | erot = 0.235071307523581 | epot = -14.9379954864767 | etot = -14.6424332452611 +9000 ekin = 0.0728137406439518 | erot = 0.288273694501614 | epot = -15.003520680497 | etot = -14.6424332453514 +10000 ekin = 0.0849615563084574 | erot = 0.343654369293588 | epot = -15.0710491710418 | etot = -14.6424332454398 +11000 ekin = 0.0965486715044103 | erot = 0.400187932108392 | epot = -15.1391698491357 | etot = -14.6424332455229 +12000 ekin = 0.107221466282716 | erot = 0.456896095459393 | epot = -15.2065508073401 | etot = -14.642433245598 +13000 ekin = 0.116672809719361 | erot = 0.512877765427946 | epot = -15.27198382081 | etot = -14.6424332456627 +14000 ekin = 0.124654073730849 | erot = 0.567333962045503 | epot = -15.3344212814915 | etot = -14.6424332457151 +15000 ekin = 0.130983939684084 | erot = 0.619586028257146 | epot = -15.3930032136957 | etot = -14.6424332457544 +16000 ekin = 0.135553354544703 | erot = 0.66908602849033 | epot = -15.4470726288154 | etot = -14.6424332457804 +17000 ekin = 0.138326263958104 | erot = 0.715418858086103 | epot = -15.4961783678378 | etot = -14.6424332457936 +18000 ekin = 0.139336096663942 | erot = 0.758296324628468 | epot = -15.5400656670878 | etot = -14.6424332457954 +19000 ekin = 0.138678360045107 | erot = 0.797544234276629 | epot = -15.5786558401095 | etot = -14.6424332457878 +20000 ekin = 0.136500074655344 | erot = 0.83308420441182 | epot = -15.6120175248401 | etot = -14.642433245773 +21000 ekin = 0.13298706528568 | erot = 0.864912408453368 | epot = -15.6403327194924 | etot = -14.6424332457533 +22000 ekin = 0.128350288213599 | erot = 0.893077649558725 | epot = -15.6638611835035 | etot = -14.6424332457311 +23000 ekin = 0.122812385135574 | erot = 0.917661024684598 | epot = -15.6829066555285 | etot = -14.6424332457083 +24000 ekin = 0.116595521408358 | erot = 0.938759014332585 | epot = -15.6977877814273 | etot = -14.6424332456863 +25000 ekin = 0.109911323474882 | erot = 0.95647120734756 | epot = -15.7088157764886 | etot = -14.6424332456662 +26000 ekin = 0.102953426207684 | erot = 0.970893163953299 | epot = -15.7162798358093 | etot = -14.6424332456483 +27000 ekin = 0.0958928250746602 | erot = 0.982114250193902 | epot = -15.7204403209011 | etot = -14.6424332456326 +28000 ekin = 0.08887594109497 | erot = 0.990219731539409 | epot = -15.721528918253 | etot = -14.6424332456186 +29000 ekin = 0.0820250748771992 | erot = 0.995296041202176 | epot = -15.7197543616852 | etot = -14.6424332456058 +30000 ekin = 0.0754407616837525 | erot = 0.997437949319921 | epot = -15.7153119565969 | etot = -14.6424332455933 +31000 ekin = 0.0692054432607511 | erot = 0.996756332760935 | epot = -15.708395021602 | etot = -14.6424332455803 +32000 ekin = 0.0633878377974532 | erot = 0.993385345347625 | epot = -15.6992064287111 | etot = -14.6424332455661 +33000 ekin = 0.0580474070866977 | erot = 0.987487973308193 | epot = -15.6879686259451 | etot = -14.6424332455502 +34000 ekin = 0.0532383791882916 | erot = 0.979259192919847 | epot = -15.6749308176403 | etot = -14.6424332455322 +35000 ekin = 0.0490128758302373 | erot = 0.96892619740531 | epot = -15.6603723187477 | etot = -14.6424332455122 +36000 ekin = 0.0454228081405034 | erot = 0.956745409624112 | epot = -15.6446014632554 | etot = -14.6424332454908 +37000 ekin = 0.0425203357170931 | erot = 0.942996237999014 | epot = -15.6279498191848 | etot = -14.6424332454687 +38000 ekin = 0.0403568280944582 | erot = 0.927971766615185 | epot = -15.6107618401563 | etot = -14.6424332454467 +39000 ekin = 0.0389804214208553 | erot = 0.911966804108842 | epot = -15.5933804709559 | etot = -14.6424332454262 +40000 ekin = 0.0384324238853386 | erot = 0.89526395956212 | epot = -15.5761296288558 | etot = -14.6424332454083 +41000 ekin = 0.0387429860406854 | erot = 0.878118672837898 | epot = -15.559294904273 | etot = -14.6424332453944 +42000 ekin = 0.0399266053637397 | erot = 0.860744395135588 | epot = -15.543104245885 | etot = -14.6424332453857 +43000 ekin = 0.041978156101278 | erot = 0.84329936535652 | epot = -15.5277107668409 | etot = -14.6424332453831 +44000 ekin = 0.044870189409001 | erot = 0.825876603313516 | epot = -15.5131800381094 | etot = -14.6424332453868 +45000 ekin = 0.0485521857416513 | erot = 0.808498758186241 | epot = -15.4994841893249 | etot = -14.642433245397 +46000 ekin = 0.0529522094038552 | erot = 0.791119212188506 | epot = -15.486504667005 | etot = -14.6424332454127 +47000 ekin = 0.0579809824244721 | erot = 0.773630265884098 | epot = -15.4740444937409 | etot = -14.6424332454323 +48000 ekin = 0.0635377846502182 | erot = 0.755878310838203 | epot = -15.4618493409424 | etot = -14.6424332454539 +49000 ekin = 0.0695169124467202 | erot = 0.737684732484798 | epot = -15.4496348904071 | etot = -14.6424332454756 +50000 ekin = 0.0758129058465097 | erot = 0.718870126220151 | epot = -15.437116277562 | etot = -14.6424332454953 +51000 ekin = 0.0823226638652294 | erot = 0.699278599520714 | epot = -15.424034508898 | etot = -14.642433245512 +52000 ekin = 0.0889431481344998 | erot = 0.67879880710002 | epot = -15.4101752007595 | etot = -14.642433245525 +53000 ekin = 0.0955646689265025 | erot = 0.657379086771117 | epot = -15.3953770012321 | etot = -14.6424332455345 +54000 ekin = 0.10206147751016 | erot = 0.635035489169276 | epot = -15.3795302122208 | etot = -14.6424332455414 +55000 ekin = 0.108282960174665 | erot = 0.611853171347244 | epot = -15.362569377068 | etot = -14.6424332455461 +56000 ekin = 0.114049426282277 | erot = 0.587982945924297 | epot = -15.3444656177552 | etot = -14.6424332455486 +57000 ekin = 0.119155806187163 | erot = 0.563635255922951 | epot = -15.3252243076589 | etot = -14.6424332455488 +58000 ekin = 0.123384552305545 | erot = 0.539073355222428 | epot = -15.3048911530734 | etot = -14.6424332455454 +59000 ekin = 0.126526300954853 | erot = 0.514606324858911 | epot = -15.2835658713509 | etot = -14.6424332455371 +60000 ekin = 0.128404399836229 | erot = 0.490581338840044 | epot = -15.261418984199 | etot = -14.6424332455227 +61000 ekin = 0.128898142361897 | erot = 0.467373892400972 | epot = -15.2387052802646 | etot = -14.6424332455018 +62000 ekin = 0.127959880289726 | erot = 0.445374820086222 | epot = -15.2157679458511 | etot = -14.6424332454752 +63000 ekin = 0.125622870624277 | erot = 0.424973765387148 | epot = -15.1930298814554 | etot = -14.642433245444 +64000 ekin = 0.121999044842466 | erot = 0.406539918572074 | epot = -15.1709722088251 | etot = -14.6424332454105 +65000 ekin = 0.117268056618551 | erot = 0.390401831020312 | epot = -15.1501031330161 | etot = -14.6424332453772 +66000 ekin = 0.11166038525652 | erot = 0.376828594078856 | epot = -15.1309222246818 | etot = -14.6424332453464 +67000 ekin = 0.105437746904482 | erot = 0.366014539811009 | epot = -15.1138855320359 | etot = -14.6424332453204 +68000 ekin = 0.0988737375602389 | erot = 0.358069014155077 | epot = -15.0993759970158 | etot = -14.6424332453005 +69000 ekin = 0.0922368286498126 | erot = 0.353011948771943 | epot = -15.0876820227093 | etot = -14.6424332452876 +70000 ekin = 0.0857769015271899 | erot = 0.350775174164931 | epot = -15.078985320974 | etot = -14.6424332452819 +71000 ekin = 0.0797156921641249 | erot = 0.351208844245481 | epot = -15.0733577816927 | etot = -14.6424332452831 +72000 ekin = 0.0742409440407228 | erot = 0.354092037747166 | epot = -15.0707662270784 | etot = -14.6424332452906 +73000 ekin = 0.069503749870388 | erot = 0.359146526961232 | epot = -15.0710835221349 | etot = -14.6424332453033 +74000 ekin = 0.065618449742691 | erot = 0.366052769878692 | epot = -15.0741044649412 | etot = -14.6424332453199 +75000 ekin = 0.0626644690394284 | erot = 0.374467290033975 | epot = -15.0795650044124 | etot = -14.642433245339 +76000 ekin = 0.0606895535091863 | erot = 0.384040683403432 | epot = -15.087163482272 | etot = -14.6424332453594 +77000 ekin = 0.0597139401241188 | erot = 0.394435495892894 | epot = -15.0965826813962 | etot = -14.6424332453792 +78000 ekin = 0.0597350629875199 | erot = 0.405343151481916 | epot = -15.107511459867 | etot = -14.6424332453975 +79000 ekin = 0.0607324264361021 | erot = 0.4164990176427 | epot = -15.1196646894919 | etot = -14.6424332454131 +80000 ekin = 0.0626722904954161 | erot = 0.427694630238743 | epot = -15.1328001661592 | etot = -14.6424332454251 +81000 ekin = 0.0655118235331528 | erot = 0.438786127849131 | epot = -15.1467311968152 | etot = -14.6424332454329 +82000 ekin = 0.0692024020836604 | erot = 0.449698113830624 | epot = -15.1613337613509 | etot = -14.6424332454366 +83000 ekin = 0.0736917936904884 | erot = 0.460422490740831 | epot = -15.1765475298676 | etot = -14.6424332454363 +84000 ekin = 0.0789250526542207 | erot = 0.471012272295187 | epot = -15.1923705703823 | etot = -14.6424332454329 +85000 ekin = 0.0848440878742484 | erot = 0.481570908650517 | epot = -15.2088482419521 | etot = -14.6424332454273 +86000 ekin = 0.0913860133243867 | erot = 0.492238169206351 | epot = -15.2260574279515 | etot = -14.6424332454207 +87000 ekin = 0.0984805441186007 | erot = 0.503174014617495 | epot = -15.2440878041506 | etot = -14.6424332454146 +88000 ekin = 0.106046830302566 | erot = 0.514542076496893 | epot = -15.2630221522094 | etot = -14.6424332454099 +89000 ekin = 0.113990204125935 | erot = 0.526494309539958 | epot = -15.2829177590739 | etot = -14.642433245408 +90000 ekin = 0.122199339149549 | erot = 0.539158097286396 | epot = -15.3037906818453 | etot = -14.6424332454094 +91000 ekin = 0.130544275968789 | erot = 0.552626637866402 | epot = -15.3256041592497 | etot = -14.6424332454146 +92000 ekin = 0.138875666145969 | erot = 0.566952900962838 | epot = -15.3482618125326 | etot = -14.6424332454238 +93000 ekin = 0.14702544061161 | erot = 0.582146933738122 | epot = -15.3716056197866 | etot = -14.6424332454369 +94000 ekin = 0.154808946844654 | erot = 0.598175891801918 | epot = -15.3954180841001 | etot = -14.6424332454535 +95000 ekin = 0.162028449598908 | erot = 0.614965942454569 | epot = -15.4194276375267 | etot = -14.6424332454732 +96000 ekin = 0.168477779664562 | erot = 0.632405154082769 | epot = -15.4433161792427 | etot = -14.6424332454953 +97000 ekin = 0.173947863023519 | erot = 0.650346631629065 | epot = -15.466727740172 | etot = -14.6424332455194 +98000 ekin = 0.178232875001165 | erot = 0.668611435746703 | epot = -15.4892775562927 | etot = -14.6424332455449 +99000 ekin = 0.181136831923469 | erot = 0.686991165056991 | epot = -15.5105612425515 | etot = -14.6424332455711 +100000 ekin = 0.182480533640974 | erot = 0.705250413408614 | epot = -15.530164192647 | etot = -14.6424332455974 +101000 ekin = 0.182108871449632 | erot = 0.723129571004103 | epot = -15.5476716880769 | etot = -14.6424332456232 +102000 ekin = 0.179898581168339 | erot = 0.740348571091352 | epot = -15.5626803979071 | etot = -14.6424332456474 +103000 ekin = 0.17576651760657 | erot = 0.756612167827034 | epot = -15.5748119311029 | etot = -14.6424332456693 +104000 ekin = 0.169678431534372 | erot = 0.771617166852996 | epot = -15.5837288440748 | etot = -14.6424332456874 +105000 ekin = 0.161658036036246 | erot = 0.785061742963598 | epot = -15.5891530247003 | etot = -14.6424332457005 +106000 ekin = 0.151795867650305 | erot = 0.796656613426427 | epot = -15.5908857267839 | etot = -14.6424332457071 +107000 ekin = 0.140257112952978 | erot = 0.806137449199291 | epot = -15.5888278078584 | etot = -14.6424332457061 +108000 ekin = 0.127287240201874 | erot = 0.813277564483374 | epot = -15.5829980503819 | etot = -14.6424332456966 +109000 ekin = 0.113214025491877 | erot = 0.817899691736857 | epot = -15.5735469629067 | etot = -14.642433245678 +110000 ekin = 0.0984444823817425 | erot = 0.819885578056442 | epot = -15.5607633060887 | etot = -14.6424332456505 +111000 ekin = 0.0834553769378644 | erot = 0.819182262548316 | epot = -15.5450708851012 | etot = -14.6424332456151 +112000 ekin = 0.0687764915886182 | erot = 0.815804215096852 | epot = -15.5270139522588 | etot = -14.6424332455734 +113000 ekin = 0.0549665904044371 | erot = 0.809830999846678 | epot = -15.507230835779 | etot = -14.6424332455279 +114000 ekin = 0.04258305831357 | erot = 0.801400700352889 | epot = -15.486417004148 | etot = -14.6424332454815 +115000 ekin = 0.0321472802146729 | erot = 0.790699910050576 | epot = -15.4652804357026 | etot = -14.6424332454374 +116000 ekin = 0.0241087780358441 | erot = 0.77795154667576 | epot = -15.4444935701102 | etot = -14.6424332453986 +117000 ekin = 0.0188117102739907 | erot = 0.763402004774545 | epot = -15.4246469604164 | etot = -14.6424332453678 +118000 ekin = 0.0164673894168237 | erot = 0.747309167856841 | epot = -15.4062098026205 | etot = -14.6424332453468 +119000 ekin = 0.0171359296540399 | erot = 0.72993256457469 | epot = -15.3895017395652 | etot = -14.6424332453364 +120000 ekin = 0.0207190822436548 | erot = 0.711526526248979 | epot = -15.3746788538292 | etot = -14.6424332453366 +121000 ekin = 0.0269649552324778 | erot = 0.692336677371657 | epot = -15.3617348779503 | etot = -14.6424332453462 +122000 ekin = 0.0354839220302051 | erot = 0.672599570211917 | epot = -15.3505167376055 | etot = -14.6424332453634 +123000 ekin = 0.0457738626455503 | erot = 0.652544850162978 | epot = -15.3407519581944 | etot = -14.6424332453859 +124000 ekin = 0.0572521324300892 | erot = 0.632399068063538 | epot = -15.3320844459047 | etot = -14.6424332454111 +125000 ekin = 0.0692913736007693 | erot = 0.612390156183436 | epot = -15.3241147752204 | etot = -14.6424332454362 +126000 ekin = 0.0812564128179015 | erot = 0.592751635107163 | epot = -15.3164412933838 | etot = -14.6424332454587 +127000 ekin = 0.0925398817831139 | erot = 0.573725774405781 | epot = -15.3086989016655 | etot = -14.6424332454766 +128000 ekin = 0.102594692019405 | erot = 0.555565138942023 | epot = -15.3005930764495 | etot = -14.6424332454881 +129000 ekin = 0.110961953874467 | erot = 0.538532171476875 | epot = -15.2919273708433 | etot = -14.6424332454919 +130000 ekin = 0.117293279473242 | erot = 0.52289666445288 | epot = -15.2826231894136 | etot = -14.6424332454874 +131000 ekin = 0.121366644775211 | erot = 0.508931150171171 | epot = -15.272731040421 | etot = -14.6424332454746 +132000 ekin = 0.123095155540088 | erot = 0.496904390905875 | epot = -15.2624327918998 | etot = -14.6424332454539 +133000 ekin = 0.122528239671731 | erot = 0.487073282997897 | epot = -15.2520347680959 | etot = -14.6424332454262 +134000 ekin = 0.119845042601891 | erot = 0.47967360117123 | epot = -15.2419518891664 | etot = -14.6424332453933 +135000 ekin = 0.115340171967418 | erot = 0.474910093717058 | epot = -15.2326835110415 | etot = -14.642433245357 +136000 ekin = 0.109402419285639 | erot = 0.472946484075354 | epot = -15.2247821486809 | etot = -14.6424332453199 +137000 ekin = 0.102487634022662 | erot = 0.473895929920083 | epot = -15.218816809227 | etot = -14.6424332452843 +138000 ekin = 0.0950874634054098 | erot = 0.477812435585943 | epot = -15.2153331442442 | etot = -14.6424332452528 +139000 ekin = 0.0876961121518108 | erot = 0.484683617751208 | epot = -15.2148129751311 | etot = -14.6424332452281 +140000 ekin = 0.0807775418435451 | erot = 0.494425108540545 | epot = -15.217635895596 | etot = -14.6424332452119 +141000 ekin = 0.0747355681580393 | erot = 0.506876770810791 | epot = -15.2240455841751 | etot = -14.6424332452063 +142000 ekin = 0.0698891098451726 | erot = 0.521800821241339 | epot = -15.2341231762987 | etot = -14.6424332452121 +143000 ekin = 0.0664544171867034 | erot = 0.538881922426252 | epot = -15.247769584843 | etot = -14.64243324523 +144000 ekin = 0.064535510469277 | erot = 0.557729316021967 | epot = -15.2646980717509 | etot = -14.6424332452596 +145000 ekin = 0.0641233595163659 | erot = 0.577881111413926 | epot = -15.2844377162305 | etot = -14.6424332453002 +146000 ekin = 0.065103607751629 | erot = 0.598810893852487 | epot = -15.3063477469542 | etot = -14.6424332453501 +147000 ekin = 0.0672719578975296 | erot = 0.619936843682188 | epot = -15.3296420469869 | etot = -14.6424332454072 +148000 ekin = 0.0703557492694474 | erot = 0.64063353819095 | epot = -15.3534225329292 | etot = -14.6424332454688 +149000 ekin = 0.0740398128645644 | erot = 0.660246523237392 | epot = -15.3767195816342 | etot = -14.6424332455323 +150000 ekin = 0.0779944201062649 | erot = 0.67810959037558 | epot = -15.3985372560763 | etot = -14.6424332455945 +151000 ekin = 0.0819030604176924 | erot = 0.693564488647308 | epot = -15.4179007947176 | etot = -14.6424332456526 +152000 ekin = 0.0854878938557652 | erot = 0.705982563002958 | epot = -15.4339037025624 | etot = -14.6424332457037 +153000 ekin = 0.0885310147333713 | erot = 0.714787575381071 | epot = -15.4457518358598 | etot = -14.6424332457454 +154000 ekin = 0.0908901012892559 | erot = 0.719478762726488 | epot = -15.4528021097913 | etot = -14.6424332457756 +155000 ekin = 0.0925075703719017 | erot = 0.719653046096719 | epot = -15.4545938622615 | etot = -14.6424332457929 +156000 ekin = 0.0934129479732407 | erot = 0.715025243753081 | epot = -15.4508714375228 | etot = -14.6424332457965 +157000 ekin = 0.0937187435781918 | erot = 0.70544516394557 | epot = -15.4415971533099 | etot = -14.6424332457861 +158000 ekin = 0.093610618539412 | erot = 0.690910554325135 | epot = -15.4269544186267 | etot = -14.6424332457622 +159000 ekin = 0.093333017400989 | erot = 0.671575051659432 | epot = -15.4073413147861 | etot = -14.6424332457257 +160000 ekin = 0.0931716565239226 | erot = 0.647750492120542 | epot = -15.3833553943224 | etot = -14.642433245678 +161000 ekin = 0.0934343296226242 | erot = 0.619903194016743 | epot = -15.3557707692603 | etot = -14.6424332456209 +162000 ekin = 0.0944314104796886 | erot = 0.588644098980031 | epot = -15.3255087550164 | etot = -14.6424332455567 +163000 ekin = 0.0964572425730171 | erot = 0.554712943454593 | epot = -15.2936034315153 | etot = -14.6424332454877 +164000 ekin = 0.0997733472794941 | erot = 0.518956918562839 | epot = -15.2611635112587 | etot = -14.6424332454164 +165000 ekin = 0.10459410201863 | erot = 0.482304549423526 | epot = -15.2293318967876 | etot = -14.6424332453454 +166000 ekin = 0.111075276514836 | erot = 0.445735768513645 | epot = -15.1992442903058 | etot = -14.6424332452774 +167000 ekin = 0.119305597512064 | erot = 0.410249354729672 | epot = -15.1719881974565 | etot = -14.6424332452148 +168000 ekin = 0.129301354723501 | erot = 0.376829046180125 | epot = -15.1485636460635 | etot = -14.6424332451599 +169000 ekin = 0.141003965788129 | erot = 0.346409702528434 | epot = -15.1298469134313 | etot = -14.6424332451147 +170000 ekin = 0.154280377438315 | erot = 0.319844892419163 | epot = -15.1165585149384 | etot = -14.642433245081 +171000 ekin = 0.168926178619937 | erot = 0.297877221607912 | epot = -15.1092366452878 | etot = -14.64243324506 +172000 ekin = 0.184671319362945 | erot = 0.281112611137957 | epot = -15.1082171755535 | etot = -14.6424332450526 +173000 ekin = 0.201188345435608 | erot = 0.269999595570643 | epot = -15.1136211860654 | etot = -14.6424332450591 +174000 ekin = 0.218103052205593 | erot = 0.264814547402958 | epot = -15.1253508446879 | etot = -14.6424332450793 +175000 ekin = 0.235007413034248 | erot = 0.26565354594967 | epot = -15.1430942040961 | etot = -14.6424332451122 +176000 ekin = 0.251474534266605 | erot = 0.272431389431399 | epot = -15.1663391688545 | etot = -14.6424332451565 +177000 ekin = 0.267075225142185 | erot = 0.284887984977542 | epot = -15.1943964553297 | etot = -14.64243324521 +178000 ekin = 0.281395553894086 | erot = 0.302602030913814 | epot = -15.2264308300784 | etot = -14.6424332452705 +179000 ekin = 0.294054514410706 | erot = 0.325011526056047 | epot = -15.2614992858018 | etot = -14.642433245335 +180000 ekin = 0.304720692895809 | erot = 0.351440214933843 | epot = -15.2985941532305 | etot = -14.6424332454008 +181000 ekin = 0.31312665891731 | erot = 0.381128639600658 | epot = -15.3366885439828 | etot = -14.6424332454648 +182000 ekin = 0.319079775822511 | erot = 0.413268071112237 | epot = -15.3747810924591 | etot = -14.6424332455244 +183000 ekin = 0.322468290004652 | erot = 0.447035301735071 | epot = -15.4119368373172 | etot = -14.6424332455774 +184000 ekin = 0.323261947553553 | erot = 0.481626155079182 | epot = -15.447321348255 | etot = -14.6424332456223 +185000 ekin = 0.321506983529694 | erot = 0.516285658867092 | epot = -15.4802258880547 | etot = -14.6424332456579 +186000 ekin = 0.317316057632528 | erot = 0.55033313262905 | epot = -15.5100824359457 | etot = -14.6424332456841 +187000 ekin = 0.310854440588901 | erot = 0.583180936762646 | epot = -15.5364686230527 | etot = -14.6424332457011 +188000 ekin = 0.302324329762727 | erot = 0.614346238386904 | epot = -15.5591038138593 | etot = -14.6424332457097 +189000 ekin = 0.291949445195851 | erot = 0.643455779015123 | epot = -15.5778384699218 | etot = -14.6424332457108 +190000 ekin = 0.279961942766932 | erot = 0.670244185707557 | epot = -15.5926393741802 | etot = -14.6424332457057 +191000 ekin = 0.266593185652274 | erot = 0.694546781237238 | epot = -15.6035732125847 | etot = -14.6424332456952 +192000 ekin = 0.252069141621898 | erot = 0.716288088791539 | epot = -15.6107904760939 | etot = -14.6424332456804 +193000 ekin = 0.236610293252604 | erot = 0.735467302247627 | epot = -15.6145108411624 | etot = -14.6424332456621 +194000 ekin = 0.220435149403497 | erot = 0.752141943032621 | epot = -15.615010338077 | etot = -14.6424332456409 +195000 ekin = 0.203765880091669 | erot = 0.766410799035668 | epot = -15.6126099247448 | etot = -14.6424332456175 +196000 ekin = 0.18683433903566 | erot = 0.778397083256566 | epot = -15.6076646678848 | etot = -14.6424332455926 +197000 ekin = 0.169886782292475 | erot = 0.788232586076231 | epot = -15.6005526139356 | etot = -14.6424332455669 +198000 ekin = 0.153185871076313 | erot = 0.796043434544288 | epot = -15.5916625511618 | etot = -14.6424332455412 +199000 ekin = 0.137008972985806 | erot = 0.801937915803797 | epot = -15.5813801343063 | etot = -14.6424332455167 +200000 ekin = 0.121642272363325 | erot = 0.805996673265862 | epot = -15.5700721911235 | etot = -14.6424332454943 +201000 ekin = 0.107370722655158 | erot = 0.80826545681021 | epot = -15.5580694249408 | etot = -14.6424332454755 +202000 ekin = 0.0944644042380686 | erot = 0.808750524312687 | epot = -15.5456481740119 | etot = -14.6424332454612 +203000 ekin = 0.0831623790884404 | erot = 0.807416772445398 | epot = -15.5330123969864 | etot = -14.6424332454526 +204000 ekin = 0.0736556272327849 | erot = 0.80418872542083 | epot = -15.5202775981042 | etot = -14.6424332454506 +205000 ekin = 0.066071040166992 | erot = 0.798954607356127 | epot = -15.5074588929787 | etot = -14.6424332454556 +206000 ekin = 0.0604586317676969 | erot = 0.791573809423779 | epot = -15.4944656866589 | etot = -14.6424332454674 +207000 ekin = 0.0567840026879154 | erot = 0.781888054797448 | epot = -15.4811053029705 | etot = -14.6424332454851 +208000 ekin = 0.0549275971597956 | erot = 0.769736381378278 | epot = -15.4670972240452 | etot = -14.6424332455071 +209000 ekin = 0.0546914447534107 | erot = 0.754973659532307 | epot = -15.4520983498168 | etot = -14.642433245531 +210000 ekin = 0.0558130126770382 | erot = 0.737491764373139 | epot = -15.4357380226042 | etot = -14.642433245554 +211000 ekin = 0.0579847210232175 | erot = 0.717241838878594 | epot = -15.4176598054751 | etot = -14.6424332455733 +212000 ekin = 0.0608768356197291 | erot = 0.694255492638144 | epot = -15.3975655738438 | etot = -14.642433245586 +213000 ekin = 0.0641610427072956 | erot = 0.668662476162839 | epot = -15.37525676446 | etot = -14.6424332455898 +214000 ekin = 0.06753210435751 | erot = 0.640702495518234 | epot = -15.3506678454592 | etot = -14.6424332455835 +215000 ekin = 0.0707255336353407 | erot = 0.610729417269012 | epot = -15.3238881964708 | etot = -14.6424332455665 +216000 ekin = 0.0735300437817614 | erot = 0.579207054839078 | epot = -15.2951703441601 | etot = -14.6424332455392 +217000 ekin = 0.0757943994877656 | erot = 0.546696813211925 | epot = -15.2649244582025 | etot = -14.6424332455028 +218000 ekin = 0.0774290394165114 | erot = 0.51383845121948 | epot = -15.2337007360952 | etot = -14.6424332454592 +219000 ekin = 0.0784033323141814 | erot = 0.481325894964792 | epot = -15.2021624726897 | etot = -14.6424332454107 +220000 ekin = 0.0787395495608023 | erot = 0.449880299622429 | epot = -15.1710530945426 | etot = -14.6424332453594 +221000 ekin = 0.0785046319672615 | erot = 0.420222425160601 | epot = -15.1411603024356 | etot = -14.6424332453078 +222000 ekin = 0.0778006814269721 | erot = 0.39304597217159 | epot = -15.1132798988567 | etot = -14.6424332452581 +223000 ekin = 0.0767549035385447 | erot = 0.368992968911897 | epot = -15.0881811176628 | etot = -14.6424332452123 +224000 ekin = 0.0755095293703893 | erot = 0.348631757033145 | epot = -15.0665745315757 | etot = -14.6424332451722 +225000 ekin = 0.0742120885667742 | erot = 0.332437700429458 | epot = -15.0490830341357 | etot = -14.6424332451395 +226000 ekin = 0.073006302869323 | erot = 0.320776497502283 | epot = -15.0362160454868 | etot = -14.6424332451152 +227000 ekin = 0.0720238140882433 | erot = 0.313889923629061 | epot = -15.0283469828184 | etot = -14.6424332451011 +228000 ekin = 0.0713769419939847 | erot = 0.311883945247506 | epot = -15.0256941323392 | etot = -14.6424332450977 +229000 ekin = 0.0711526728858743 | erot = 0.314719386439641 | epot = -15.0283053044313 | etot = -14.6424332451058 +230000 ekin = 0.0714080974066408 | erot = 0.322205638589943 | epot = -15.0360469811226 | etot = -14.642433245126 +231000 ekin = 0.0721675361190023 | erot = 0.333998222201819 | epot = -15.0485990034788 | etot = -14.642433245158 +232000 ekin = 0.0734216022905603 | erot = 0.349601270465958 | epot = -15.0654561179576 | etot = -14.6424332452011 +233000 ekin = 0.0751284397505271 | erot = 0.368376135875951 | epot = -15.085937820881 | etot = -14.6424332452545 +234000 ekin = 0.0772173235442621 | erot = 0.389557254433776 | epot = -15.1092078232944 | etot = -14.6424332453164 +235000 ekin = 0.0795947059802265 | erot = 0.412276079790441 | epot = -15.1343040311543 | etot = -14.6424332453836 +236000 ekin = 0.0821526186146775 | erot = 0.43559329564772 | epot = -15.160179159716 | etot = -14.6424332454536 +237000 ekin = 0.0847791014240061 | erot = 0.458538653864716 | epot = -15.1857510008108 | etot = -14.6424332455221 +238000 ekin = 0.0873700423858637 | erot = 0.480156759886701 | epot = -15.2099600478579 | etot = -14.6424332455853 +239000 ekin = 0.0898415153137649 | erot = 0.499556095552604 | epot = -15.2318308565057 | etot = -14.6424332456393 +240000 ekin = 0.0921414623535621 | erot = 0.515957735401017 | epot = -15.2505324434351 | etot = -14.6424332456806 +241000 ekin = 0.0942594490144011 | erot = 0.528739776886579 | epot = -15.2654324716071 | etot = -14.6424332457061 +242000 ekin = 0.0962332805881029 | erot = 0.537473606136305 | epot = -15.2761401324386 | etot = -14.6424332457142 +243000 ekin = 0.0981515319338902 | erot = 0.541948785980292 | epot = -15.2825335636184 | etot = -14.6424332457042 +244000 ekin = 0.100151482351193 | erot = 0.542184479374338 | epot = -15.2847692074024 | etot = -14.6424332456769 +245000 ekin = 0.102412491095761 | erot = 0.538426702317763 | epot = -15.2832724390477 | etot = -14.6424332456342 +246000 ekin = 0.105145395544795 | erot = 0.531132085866374 | epot = -15.2787107269897 | etot = -14.6424332455785 +247000 ekin = 0.108578961411983 | erot = 0.520939994206881 | epot = -15.2719522011324 | etot = -14.6424332455135 +248000 ekin = 0.112944688754523 | erot = 0.508635652295277 | epot = -15.2640135864926 | etot = -14.6424332454428 +249000 ekin = 0.11846134890514 | erot = 0.495107336753422 | epot = -15.2560019310289 | etot = -14.6424332453704 +250000 ekin = 0.125320510713214 | erot = 0.48130071319683 | epot = -15.2490544692099 | etot = -14.6424332452999 +251000 ekin = 0.133674056955099 | erot = 0.468173145423569 | epot = -15.2442804476134 | etot = -14.6424332452347 +252000 ekin = 0.143624355872782 | erot = 0.456650355973676 | epot = -15.2427079570244 | etot = -14.6424332451779 +253000 ekin = 0.155217400154351 | erot = 0.447587277165331 | epot = -15.2452379224514 | etot = -14.6424332451318 +254000 ekin = 0.168438906844348 | erot = 0.441734376017242 | epot = -15.2526065279594 | etot = -14.6424332450978 +255000 ekin = 0.183213121644194 | erot = 0.43971022735347 | epot = -15.2653565940749 | etot = -14.6424332450772 +256000 ekin = 0.199403908832166 | erot = 0.441980689733479 | epot = -15.2838178436365 | etot = -14.6424332450708 +257000 ekin = 0.216817638461889 | erot = 0.448844730305189 | epot = -15.3080956138459 | etot = -14.6424332450788 +258000 ekin = 0.235207399035754 | erot = 0.460426746275392 | epot = -15.338067390412 | etot = -14.6424332451008 +259000 ekin = 0.254278151366129 | erot = 0.476675120648644 | epot = -15.373386517151 | etot = -14.6424332451362 +260000 ekin = 0.273692576676924 | erot = 0.49736669170667 | epot = -15.4134925135676 | etot = -14.642433245184 +261000 ekin = 0.293077534073102 | erot = 0.522116767905281 | epot = -15.4576275472213 | etot = -14.6424332452429 +262000 ekin = 0.312031202020399 | erot = 0.550394247121215 | epot = -15.5048586944527 | etot = -14.642433245311 +263000 ekin = 0.330131107615849 | erot = 0.581541281999657 | epot = -15.554105635002 | etot = -14.6424332453865 +264000 ekin = 0.346943319969814 | erot = 0.614796773447099 | epot = -15.6041733388837 | etot = -14.6424332454667 +265000 ekin = 0.362033078254078 | erot = 0.64932279499714 | epot = -15.6537891188008 | etot = -14.6424332455496 +266000 ekin = 0.374977027495969 | erot = 0.684232889060528 | epot = -15.7016431621888 | etot = -14.6424332456323 +267000 ekin = 0.385377045180505 | erot = 0.718621072064159 | epot = -15.7464313629565 | etot = -14.6424332457118 +268000 ekin = 0.392875374675151 | erot = 0.75159036946739 | epot = -15.7868989899282 | etot = -14.6424332457857 +269000 ekin = 0.397170471133891 | erot = 0.782279784278107 | epot = -15.8218835012631 | etot = -14.6424332458511 +270000 ekin = 0.398032662022584 | erot = 0.809888771679725 | epot = -15.8503546796085 | etot = -14.6424332459062 +271000 ekin = 0.395318487593106 | erot = 0.833698516715849 | epot = -15.8714502502576 | etot = -14.6424332459487 +272000 ekin = 0.3889824743465 | erot = 0.853089551914417 | epot = -15.8845052722381 | etot = -14.6424332459772 +273000 ekin = 0.379085147925856 | erot = 0.867555470410714 | epot = -15.8890738643275 | etot = -14.6424332459909 +274000 ekin = 0.365796322187845 | erot = 0.876712662634537 | epot = -15.8849422308118 | etot = -14.6424332459894 +275000 ekin = 0.349393082916426 | erot = 0.880306121918472 | epot = -15.872132450808 | etot = -14.6424332459731 +276000 ekin = 0.330252358900968 | erot = 0.878211432153003 | epot = -15.8508970369967 | etot = -14.6424332459427 +277000 ekin = 0.308838461216024 | erot = 0.870433084880285 | epot = -15.821704791996 | etot = -14.6424332458996 +278000 ekin = 0.285686394600537 | erot = 0.857099294887754 | epot = -15.785218935334 | etot = -14.6424332458457 +279000 ekin = 0.261382042763559 | erot = 0.838453513182875 | epot = -15.7422688017293 | etot = -14.6424332457829 +280000 ekin = 0.236540473323853 | erot = 0.814842890589049 | epot = -15.6938166096265 | etot = -14.6424332457136 +281000 ekin = 0.211783602606715 | erot = 0.786704032858738 | epot = -15.6409208811057 | etot = -14.6424332456403 +282000 ekin = 0.187718337271409 | erot = 0.754546508157302 | epot = -15.5846980909941 | etot = -14.6424332455654 +283000 ekin = 0.16491611509112 | erot = 0.718934708844168 | epot = -15.5262840694266 | etot = -14.6424332454913 +284000 ekin = 0.143894549222822 | erot = 0.680468811937736 | epot = -15.466796606581 | etot = -14.6424332454204 +285000 ekin = 0.125101678374138 | erot = 0.639765701845489 | epot = -15.4073006255745 | etot = -14.6424332453549 +286000 ekin = 0.108903164109909 | erot = 0.597440790007828 | epot = -15.3487771994138 | etot = -14.6424332452961 +287000 ekin = 0.0955726645582895 | erot = 0.554091668601936 | epot = -15.2920975784057 | etot = -14.6424332452455 +288000 ekin = 0.0852855448043095 | erot = 0.510284456818714 | epot = -15.2380032468271 | etot = -14.6424332452041 +289000 ekin = 0.0781160413143099 | erot = 0.466543535619487 | epot = -15.187092822106 | etot = -14.6424332451722 +290000 ekin = 0.0740379578661698 | erot = 0.423345127585219 | epot = -15.1398163306013 | etot = -14.6424332451499 +291000 ekin = 0.0729289100679055 | erot = 0.38111487943343 | epot = -15.0964770346381 | etot = -14.6424332451368 +292000 ekin = 0.07457803579739 | erot = 0.340229271733799 | epot = -15.0572405526628 | etot = -14.6424332451316 +293000 ekin = 0.0786969407585632 | erot = 0.301020346544403 | epot = -15.0221505324361 | etot = -14.6424332451332 +294000 ekin = 0.0849334564747931 | erot = 0.263782947584683 | epot = -14.9911496491992 | etot = -14.6424332451397 +295000 ekin = 0.0928875723651433 | erot = 0.228783448803118 | epot = -14.964104266318 | etot = -14.6424332451498 +296000 ekin = 0.102128697511344 | erot = 0.196268840383812 | epot = -14.9408307830567 | etot = -14.6424332451616 +297000 ekin = 0.112213252500573 | erot = 0.166475068215632 | epot = -14.9211215658898 | etot = -14.6424332451736 +298000 ekin = 0.122701527070322 | erot = 0.139633685444096 | epot = -14.9047684576989 | etot = -14.6424332451845 +299000 ekin = 0.133172792913731 | erot = 0.115976150687847 | epot = -14.891582188795 | etot = -14.6424332451934 +300000 ekin = 0.143237839709879 | erot = 0.0957354521197614 | epot = -14.8814065370294 | etot = -14.6424332451998 +301000 ekin = 0.152548387990868 | erot = 0.079145090872109 | epot = -14.8741267240665 | etot = -14.6424332452036 +302000 ekin = 0.160803184301541 | erot = 0.0664357608556664 | epot = -14.869672190362 | etot = -14.6424332452048 +303000 ekin = 0.167750948488392 | erot = 0.0578302677258683 | epot = -14.8680144614181 | etot = -14.6424332452038 +304000 ekin = 0.173190665588574 | erot = 0.053537313638039 | epot = -14.869161224428 | etot = -14.6424332452014 +305000 ekin = 0.17696995295018 | erot = 0.0537447402922378 | epot = -14.8731479384404 | etot = -14.642433245198 +306000 ekin = 0.178982363291699 | erot = 0.0586126977894969 | epot = -14.8800283062755 | etot = -14.6424332451943 +307000 ekin = 0.179164502945091 | erot = 0.0682670321079287 | epot = -14.8898647802439 | etot = -14.6424332451908 +308000 ekin = 0.177493763289092 | erot = 0.0827930029211812 | epot = -14.9027200113984 | etot = -14.6424332451881 +309000 ekin = 0.173987301152073 | erot = 0.102229291873313 | epot = -14.9186498382119 | etot = -14.6424332451865 +310000 ekin = 0.168702678648375 | erot = 0.126562162218708 | epot = -14.9376980860533 | etot = -14.6424332451862 +311000 ekin = 0.161740297010248 | erot = 0.155719593409014 | epot = -14.9598931356065 | etot = -14.6424332451872 +312000 ekin = 0.153247440126422 | erot = 0.189565237979898 | epot = -14.985245923296 | etot = -14.6424332451897 +313000 ekin = 0.143423389998644 | erot = 0.227892126762103 | epot = -15.0137487619544 | etot = -14.6424332451937 +314000 ekin = 0.132524706020331 | erot = 0.270416174781571 | epot = -15.0453741260009 | etot = -14.642433245199 +315000 ekin = 0.120869409554577 | erot = 0.316769708289568 | epot = -15.0800723630506 | etot = -14.6424332452064 +316000 ekin = 0.1088385461069 | erot = 0.366495437994219 | epot = -15.1177672293174 | etot = -14.6424332452162 +317000 ekin = 0.0968734934299854 | erot = 0.419041536808397 | epot = -15.1583482754675 | etot = -14.6424332452291 +318000 ekin = 0.0854675378572642 | erot = 0.473758725762781 | epot = -15.2016595088659 | etot = -14.6424332452459 +319000 ekin = 0.0751507271474209 | erot = 0.529900497446471 | epot = -15.2474844698617 | etot = -14.6424332452678 +320000 ekin = 0.0664678443385232 | erot = 0.586627760737817 | epot = -15.2955288503722 | etot = -14.6424332452959 +321000 ekin = 0.0599504590581789 | erot = 0.643019202689382 | epot = -15.3454029070786 | etot = -14.6424332453311 +322000 ekin = 0.0560852142815269 | erot = 0.698088453264983 | epot = -15.3966069129204 | etot = -14.6424332453739 +323000 ekin = 0.0552815181260071 | erot = 0.750808639914411 | epot = -15.4485234034645 | etot = -14.6424332454241 +324000 ekin = 0.057842325521187 | erot = 0.800144112656294 | epot = -15.5004196836582 | etot = -14.6424332454807 +325000 ekin = 0.063941486463515 | erot = 0.845088070114582 | epot = -15.5514628021197 | etot = -14.6424332455416 +326000 ekin = 0.0736101694204757 | erot = 0.8847036899678 | epot = -15.6007471049927 | etot = -14.6424332456044 +327000 ekin = 0.0867333560885493 | erot = 0.918165419814647 | epot = -15.6473320215694 | etot = -14.6424332456662 +328000 ekin = 0.103055779602218 | erot = 0.944796600226722 | epot = -15.690285625553 | etot = -14.642433245724 +329000 ekin = 0.122195446168401 | erot = 0.964099781598492 | epot = -15.7287284735425 | etot = -14.6424332457756 +330000 ekin = 0.143662406707274 | erot = 0.97577699624252 | epot = -15.7618726487685 | etot = -14.6424332458188 +331000 ekin = 0.166880785130066 | erot = 0.979738667524184 | epot = -15.7890526985066 | etot = -14.6424332458523 +332000 ekin = 0.191212923965916 | erot = 0.976101405909932 | epot = -15.8097475757513 | etot = -14.6424332458755 +333000 ekin = 0.215985355315126 | erot = 0.96517623354676 | epot = -15.8235948347498 | etot = -14.6424332458879 +334000 ekin = 0.240516656826312 | erot = 0.947449485120633 | epot = -15.8303993878361 | etot = -14.6424332458891 +335000 ekin = 0.264146896081082 | erot = 0.923558676876312 | epot = -15.8301388188364 | etot = -14.642433245879 +336000 ekin = 0.286267467748831 | erot = 0.894265184768772 | epot = -15.8229658983753 | etot = -14.6424332458577 +337000 ekin = 0.306349134744516 | erot = 0.86042493934443 | epot = -15.8092073199143 | etot = -14.6424332458253 +338000 ekin = 0.323965497669028 | erot = 0.822957838329898 | epot = -15.7893565817819 | etot = -14.642433245783 +339000 ekin = 0.338809250783309 | erot = 0.782816380156821 | epot = -15.7640588766722 | etot = -14.6424332457321 +340000 ekin = 0.350699444228147 | erot = 0.740954141308479 | epot = -15.7340868312114 | etot = -14.6424332456748 +341000 ekin = 0.359579293531077 | erot = 0.698295027836124 | epot = -15.700307566981 | etot = -14.6424332456138 +342000 ekin = 0.365505462149771 | erot = 0.65570454203815 | epot = -15.6636432497397 | etot = -14.6424332455518 +343000 ekin = 0.368630832656574 | erot = 0.613964463467596 | epot = -15.6250285416159 | etot = -14.6424332454917 +344000 ekin = 0.369183369584824 | erot = 0.573752273081762 | epot = -15.5853688881025 | etot = -14.6424332454359 +345000 ekin = 0.367443732820381 | erot = 0.535626361233121 | epot = -15.5455033394399 | etot = -14.6424332453864 +346000 ekin = 0.363723933128391 | erot = 0.500017626275295 | epot = -15.5061748047483 | etot = -14.6424332453446 +347000 ekin = 0.358348705274855 | erot = 0.467227585425635 | epot = -15.4680095360116 | etot = -14.6424332453111 +348000 ekin = 0.351640582952574 | erot = 0.437432666905905 | epot = -15.4315064951445 | etot = -14.642433245286 +349000 ekin = 0.343909024693095 | erot = 0.41069398616735 | epot = -15.3970362561291 | etot = -14.6424332452687 +350000 ekin = 0.335443435967589 | erot = 0.386971649877954 | epot = -15.3648483311043 | etot = -14.6424332452587 +351000 ekin = 0.326509584093047 | erot = 0.366142474248719 | epot = -15.335085303596 | etot = -14.6424332452542 +352000 ekin = 0.31734869902189 | erot = 0.348019930398469 | epot = -15.3078018746744 | etot = -14.642433245254 +353000 ekin = 0.308178466648795 | erot = 0.332375117499601 | epot = -15.2829868294052 | etot = -14.6424332452568 +354000 ekin = 0.299195119854714 | erot = 0.318957598137068 | epot = -15.2605859632527 | etot = -14.6424332452609 +355000 ekin = 0.290575888249386 | erot = 0.307515001368932 | epot = -15.2405241348834 | etot = -14.6424332452651 +356000 ekin = 0.282481160313163 | erot = 0.297810406216367 | epot = -15.222724811798 | etot = -14.6424332452684 +357000 ekin = 0.275055828994536 | erot = 0.289636664277623 | epot = -15.2071257385424 | etot = -14.6424332452702 +358000 ekin = 0.268429427255716 | erot = 0.2828270069126 | epot = -15.1936896794383 | etot = -14.64243324527 +359000 ekin = 0.262714810202527 | erot = 0.277261507858961 | epot = -15.1824095633294 | etot = -14.6424332452679 +360000 ekin = 0.258005302570158 | erot = 0.272869227750137 | epot = -15.1733077755847 | etot = -14.6424332452644 +361000 ekin = 0.254370400622446 | erot = 0.269626137803926 | epot = -15.1664297836866 | etot = -14.6424332452602 +362000 ekin = 0.251850290179257 | erot = 0.267549186090192 | epot = -15.1618327215256 | etot = -14.6424332452562 +363000 ekin = 0.250449609863309 | erot = 0.266687109599918 | epot = -15.1595699647169 | etot = -14.6424332452537 +364000 ekin = 0.250131041863869 | erot = 0.267108788860229 | epot = -15.1596730759781 | etot = -14.642433245254 +365000 ekin = 0.250809442162608 | erot = 0.268890073930453 | epot = -15.1621327613513 | etot = -14.6424332452583 +366000 ekin = 0.252347318763942 | erot = 0.272100073008303 | epot = -15.1668806370396 | etot = -14.6424332452674 +367000 ekin = 0.254552520179202 | erot = 0.276787886821285 | epot = -15.1737736522826 | etot = -14.6424332452822 +368000 ekin = 0.257178996154138 | erot = 0.282970699525187 | epot = -15.1825829409824 | etot = -14.6424332453031 +369000 ekin = 0.259931424909754 | erot = 0.290624011144305 | epot = -15.192988681384 | etot = -14.64243324533 +370000 ekin = 0.262474349327938 | erot = 0.299674631815232 | epot = -15.2045822265054 | etot = -14.6424332453622 +371000 ekin = 0.264446209429919 | erot = 0.30999686929688 | epot = -15.2168763241253 | etot = -14.6424332453985 +372000 ekin = 0.265478281863403 | erot = 0.321412142685467 | epot = -15.2293236699861 | etot = -14.6424332454372 +373000 ekin = 0.265218028292392 | erot = 0.333692059446794 | epot = -15.2413433332155 | etot = -14.6424332454763 +374000 ekin = 0.263355721250465 | erot = 0.346564809668633 | epot = -15.2523537764321 | etot = -14.642433245513 +375000 ekin = 0.259652497503914 | erot = 0.35972456799486 | epot = -15.2618103110439 | etot = -14.6424332455451 +376000 ekin = 0.253967268937827 | erot = 0.372843454380799 | epot = -15.2692439688887 | etot = -14.6424332455701 +377000 ekin = 0.246279333501497 | erot = 0.385585491294786 | epot = -15.274298070382 | etot = -14.6424332455857 +378000 ekin = 0.236703249878266 | erot = 0.397621906698155 | epot = -15.2767584021673 | etot = -14.6424332455909 +379000 ekin = 0.225492756944983 | erot = 0.408647066931749 | epot = -15.2765730694618 | etot = -14.6424332455851 +380000 ekin = 0.213031377539262 | erot = 0.418394278996725 | epot = -15.2738589021049 | etot = -14.6424332455689 +381000 ekin = 0.199808877315933 | erot = 0.42665067621188 | epot = -15.2688927990715 | etot = -14.6424332455437 +382000 ekin = 0.186384809019062 | erot = 0.433270396055884 | epot = -15.2620884505868 | etot = -14.6424332455119 +383000 ekin = 0.173342616144133 | erot = 0.438185279050674 | epot = -15.2539611406711 | etot = -14.6424332454762 +384000 ekin = 0.161239700831467 | erot = 0.441412371402834 | epot = -15.2450853176736 | etot = -14.6424332454393 +385000 ekin = 0.15055995464762 | erot = 0.44305761255288 | epot = -15.2360508126044 | etot = -14.6424332454039 +386000 ekin = 0.1416751296992 | erot = 0.443315241523152 | epot = -15.2274236165942 | etot = -14.6424332453718 +387000 ekin = 0.134820015698004 | erot = 0.442462667348858 | epot = -15.2197159283911 | etot = -14.6424332453442 +388000 ekin = 0.130083976413563 | erot = 0.440850813513923 | epot = -15.2133680352489 | etot = -14.6424332453214 +389000 ekin = 0.127418570237896 | erot = 0.438890246279034 | epot = -15.20874206182 | etot = -14.6424332453031 +390000 ekin = 0.126658423093211 | erot = 0.437033702086108 | epot = -15.2061253704679 | etot = -14.6424332452886 +391000 ekin = 0.127550804261002 | erot = 0.435755902066214 | epot = -15.2057399516043 | etot = -14.6424332452771 +392000 ekin = 0.129788752935804 | erot = 0.435531744058807 | epot = -15.2077537422628 | etot = -14.6424332452682 +393000 ekin = 0.13304305531626 | erot = 0.436814065078312 | epot = -15.2122903656558 | etot = -14.6424332452612 +394000 ekin = 0.136989561466103 | erot = 0.440012156511487 | epot = -15.2194349632339 | etot = -14.6424332452563 +395000 ekin = 0.14132983304257 | erot = 0.44547209688668 | epot = -15.2292351751828 | etot = -14.6424332452536 +396000 ekin = 0.145804542777681 | erot = 0.453459767650225 | epot = -15.2416975556816 | etot = -14.6424332452537 +397000 ekin = 0.150200153189366 | erot = 0.464147173463303 | epot = -15.25678057191 | etot = -14.6424332452573 +398000 ekin = 0.154350089767278 | erot = 0.477602441560288 | epot = -15.2743857765924 | etot = -14.6424332452648 +399000 ekin = 0.158131920623957 | erot = 0.49378366115725 | epot = -15.2943488270583 | etot = -14.6424332452771 +400000 ekin = 0.161462056175852 | erot = 0.512536568007638 | epot = -15.3164318694777 | etot = -14.6424332452942 +401000 ekin = 0.164289301183564 | erot = 0.533595989003432 | epot = -15.3403185355036 | etot = -14.6424332453166 +402000 ekin = 0.16658832305357 | erot = 0.556590928840415 | epot = -15.3656124972378 | etot = -14.6424332453438 +403000 ekin = 0.168353810382888 | erot = 0.581053183644666 | epot = -15.3918402394033 | etot = -14.6424332453758 +404000 ekin = 0.169595821304612 | erot = 0.606429376023098 | epot = -15.4184584427392 | etot = -14.6424332454115 +405000 ekin = 0.170336578565562 | erot = 0.63209629254019 | epot = -15.4448661165559 | etot = -14.6424332454501 +406000 ekin = 0.170608761982373 | erot = 0.657379344514174 | epot = -15.4704213519868 | etot = -14.6424332454903 +407000 ekin = 0.170455178570794 | erot = 0.681573854093766 | epot = -15.494462278195 | etot = -14.6424332455304 +408000 ekin = 0.169929554813017 | erot = 0.703968692150334 | epot = -15.5163314925322 | etot = -14.6424332455689 +409000 ekin = 0.169098093454334 | erot = 0.723871579520639 | epot = -15.5354029185788 | etot = -14.6424332456039 +410000 ekin = 0.168041369043284 | erot = 0.740635137247676 | epot = -15.5511097519246 | etot = -14.6424332456336 +411000 ekin = 0.16685610281106 | erot = 0.753682569970645 | epot = -15.5629719184382 | etot = -14.6424332456565 +412000 ekin = 0.165656359034691 | erot = 0.762531725092763 | epot = -15.5706213297985 | etot = -14.6424332456711 +413000 ekin = 0.16457374171258 | erot = 0.766816218739503 | epot = -15.5738232061285 | etot = -14.6424332456764 +414000 ekin = 0.163756240958051 | erot = 0.766302377571847 | epot = -15.5724918642017 | etot = -14.6424332456718 +415000 ekin = 0.163365479945346 | erot = 0.760900920225164 | epot = -15.5666996458277 | etot = -14.6424332456572 +416000 ekin = 0.16357224009341 | erot = 0.75067258670007 | epot = -15.5566780724265 | etot = -14.642433245633 +417000 ekin = 0.164550286198177 | erot = 0.735827297892157 | epot = -15.5428108296905 | etot = -14.6424332456002 +418000 ekin = 0.166468663391054 | erot = 0.71671685730188 | epot = -15.5256187662531 | etot = -14.6424332455602 +419000 ekin = 0.169482781124205 | erot = 0.69382164910088 | epot = -15.5057376757398 | etot = -14.6424332455147 +420000 ekin = 0.17372472266442 | erot = 0.667732191685371 | epot = -15.4838901598156 | etot = -14.6424332454658 +421000 ekin = 0.179293310757533 | erot = 0.639126725583772 | epot = -15.460853281757 | etot = -14.6424332454157 +422000 ekin = 0.18624451451762 | erot = 0.608746211201687 | epot = -15.437423971086 | etot = -14.6424332453667 +423000 ekin = 0.194582798143094 | erot = 0.577368165579487 | epot = -15.4143842090434 | etot = -14.6424332453208 +424000 ekin = 0.204253993028008 | erot = 0.545780680988006 | epot = -15.392467919296 | etot = -14.64243324528 +425000 ekin = 0.215140228915644 | erot = 0.514757766833632 | epot = -15.3723312409951 | etot = -14.6424332452459 +426000 ekin = 0.22705739519611 | erot = 0.485036881516617 | epot = -15.3545275219322 | etot = -14.6424332452194 +427000 ekin = 0.239755526224917 | erot = 0.457299221562847 | epot = -15.3394879929896 | etot = -14.6424332452018 +428000 ekin = 0.252922416268543 | erot = 0.432153058135964 | epot = -15.3275087195978 | etot = -14.6424332451933 +429000 ekin = 0.266190667178511 | erot = 0.410120192008996 | epot = -15.3187441043811 | etot = -14.6424332451936 +430000 ekin = 0.279148248284993 | erot = 0.391625457763317 | epot = -15.3132069512512 | etot = -14.6424332452029 +431000 ekin = 0.291352495292879 | erot = 0.376989149811629 | epot = -15.3107748903245 | etot = -14.64243324522 +432000 ekin = 0.302347287569384 | erot = 0.366422254467196 | epot = -15.3112027872808 | etot = -14.6424332452442 +433000 ekin = 0.311682921770386 | erot = 0.360024429013363 | epot = -15.314140596057 | etot = -14.6424332452733 +434000 ekin = 0.318937954386255 | erot = 0.357784738271778 | epot = -15.3191559379639 | etot = -14.6424332453059 +435000 ekin = 0.323742037713914 | erot = 0.359585207274041 | epot = -15.3257604903287 | etot = -14.6424332453407 +436000 ekin = 0.325798554030506 | erot = 0.365207245307274 | epot = -15.3334390447139 | etot = -14.6424332453761 +437000 ekin = 0.324905697096481 | erot = 0.374340922351912 | epot = -15.3416798648573 | etot = -14.642433245409 +438000 ekin = 0.320974589857387 | erot = 0.38659693016297 | epot = -15.350004765458 | etot = -14.6424332454377 +439000 ekin = 0.314043077745106 | erot = 0.401520852188694 | epot = -15.3579971753951 | etot = -14.6424332454613 +440000 ekin = 0.304283988018871 | erot = 0.418609132217954 | epot = -15.3653263657147 | etot = -14.6424332454779 +441000 ekin = 0.292006859109421 | erot = 0.437325916197858 | epot = -15.3717660207937 | etot = -14.6424332454864 +442000 ekin = 0.277652365812285 | erot = 0.457119792524558 | epot = -15.3772054038237 | etot = -14.6424332454869 +443000 ekin = 0.261778853587334 | erot = 0.477439412182338 | epot = -15.3816515112496 | etot = -14.6424332454799 +444000 ekin = 0.245040553430229 | erot = 0.497747053383812 | epot = -15.3852208522809 | etot = -14.6424332454669 +445000 ekin = 0.228157260415745 | erot = 0.517529408210577 | epot = -15.3881199140755 | etot = -14.6424332454491 +446000 ekin = 0.211875681724426 | erot = 0.536305196865301 | epot = -15.3906141240194 | etot = -14.6424332454296 +447000 ekin = 0.196923472676264 | erot = 0.553629632762624 | epot = -15.3929863508503 | etot = -14.6424332454114 +448000 ekin = 0.183958277875564 | erot = 0.569096233380439 | epot = -15.3954877566541 | etot = -14.6424332453981 +449000 ekin = 0.173515771308145 | erot = 0.582336947161166 | epot = -15.3982859638623 | etot = -14.6424332453929 +450000 ekin = 0.165962361194716 | erot = 0.593021970155278 | epot = -15.4014175767483 | etot = -14.6424332453983 +451000 ekin = 0.161459280831071 | erot = 0.600860851258448 | epot = -15.4047533775048 | etot = -14.6424332454152 +452000 ekin = 0.159944578250394 | erot = 0.605606408084745 | epot = -15.4079842317782 | etot = -14.6424332454431 +453000 ekin = 0.161137653112604 | erot = 0.607062496375647 | epot = -15.4106333949675 | etot = -14.6424332454792 +454000 ekin = 0.164567591511419 | erot = 0.605095779312697 | epot = -15.4120966163436 | etot = -14.6424332455194 +455000 ekin = 0.169622334208404 | erot = 0.599650455426745 | epot = -15.4117060351936 | etot = -14.6424332455584 +456000 ekin = 0.175611802350263 | erot = 0.590763702898767 | epot = -15.4088087508399 | etot = -14.6424332455909 +457000 ekin = 0.181835621982496 | erot = 0.578578749366124 | epot = -15.4028476169608 | etot = -14.6424332456122 +458000 ekin = 0.18764572703167 | erot = 0.563352302650977 | epot = -15.3934312753017 | etot = -14.6424332456191 +459000 ekin = 0.192495880386128 | erot = 0.545453717150014 | epot = -15.3803828431463 | etot = -14.6424332456101 +460000 ekin = 0.19597338163879 | erot = 0.525354597711273 | epot = -15.3637612249358 | etot = -14.6424332455858 +461000 ekin = 0.197811920993009 | erot = 0.503609203462558 | epot = -15.3438543700042 | etot = -14.6424332455486 +462000 ekin = 0.19788772492106 | erot = 0.480827560282267 | epot = -15.3211485307047 | etot = -14.6424332455014 +463000 ekin = 0.196203198487162 | erot = 0.457644248436047 | epot = -15.2962806923717 | etot = -14.6424332454485 +464000 ekin = 0.192863034127886 | erot = 0.434686220428428 | epot = -15.2699824999498 | etot = -14.6424332453935 +465000 ekin = 0.188047435824139 | erot = 0.412542760090385 | epot = -15.2430234412545 | etot = -14.64243324534 +466000 ekin = 0.181986107554585 | erot = 0.391740010671268 | epot = -15.2161593635165 | etot = -14.6424332452907 +467000 ekin = 0.174935400199653 | erot = 0.372721626734306 | epot = -15.1900902721816 | etot = -14.6424332452476 +468000 ekin = 0.167159826103645 | erot = 0.355836258350829 | epot = -15.1654293296665 | etot = -14.642433245212 +469000 ekin = 0.158918218023908 | erot = 0.341331890764793 | epot = -15.1426833539731 | etot = -14.6424332451844 +470000 ekin = 0.15045418565433 | erot = 0.32935658463347 | epot = -15.1222440154524 | etot = -14.6424332451646 +471000 ekin = 0.141990180750341 | erot = 0.319964871776709 | epot = -15.1043882976792 | etot = -14.6424332451522 +472000 ekin = 0.133724353868939 | erot = 0.313128906245089 | epot = -15.08928650526 | etot = -14.642433245146 +473000 ekin = 0.125829398102414 | erot = 0.308753392324214 | epot = -15.0770160355716 | etot = -14.642433245145 +474000 ekin = 0.118452666363562 | erot = 0.306693264413826 | epot = -15.0675791759251 | etot = -14.6424332451477 +475000 ekin = 0.111716976219122 | erot = 0.306773053290683 | epot = -15.0609232746627 | etot = -14.6424332451529 +476000 ekin = 0.10572165563334 | erot = 0.308806833537627 | epot = -15.0569617343301 | etot = -14.6424332451591 +477000 ekin = 0.100543523675759 | erot = 0.312617617130285 | epot = -15.0555943859712 | etot = -14.6424332451652 +478000 ekin = 0.0962376398644792 | erot = 0.31805505563531 | epot = -15.0567259406699 | etot = -14.6424332451701 +479000 ekin = 0.0928377950024481 | erot = 0.325010357030128 | epot = -15.0602813972058 | etot = -14.6424332451732 +480000 ekin = 0.0903568546345918 | erot = 0.33342742776329 | epot = -15.066217527572 | etot = -14.6424332451741 +481000 ekin = 0.0887871989358495 | erot = 0.343309423709778 | epot = -15.0745298678181 | etot = -14.6424332451725 +482000 ekin = 0.0881016191320247 | erot = 0.354720133057113 | epot = -15.0852549973578 | etot = -14.6424332451687 +483000 ekin = 0.0882551127439553 | erot = 0.367779908272464 | epot = -15.0984682661794 | etot = -14.642433245163 +484000 ekin = 0.0891880440138003 | erot = 0.382656193507601 | epot = -15.1142774826776 | etot = -14.6424332451562 +485000 ekin = 0.0908310739109808 | erot = 0.399549033146284 | epot = -15.1328133522061 | etot = -14.6424332451488 +486000 ekin = 0.0931120890990374 | erot = 0.418672269923129 | epot = -15.1542176041639 | etot = -14.6424332451417 +487000 ekin = 0.0959650526392593 | erot = 0.440231422321011 | epot = -15.1786297200963 | etot = -14.642433245136 +488000 ekin = 0.0993402613867364 | erot = 0.464399451384487 | epot = -15.2061729579036 | etot = -14.6424332451324 +489000 ekin = 0.103214957397678 | erot = 0.491291775403258 | epot = -15.2369399779328 | etot = -14.6424332451318 +490000 ekin = 0.107602676597184 | erot = 0.520941965498208 | epot = -15.2709778872308 | etot = -14.6424332451354 +491000 ekin = 0.112559247664622 | erot = 0.553279563916956 | epot = -15.3082720567259 | etot = -14.6424332451443 +492000 ekin = 0.118183136723597 | erot = 0.588111425308452 | epot = -15.3487278071918 | etot = -14.6424332451598 +493000 ekin = 0.12460804012638 | erot = 0.62510790827898 | epot = -15.3921491935888 | etot = -14.6424332451834 +494000 ekin = 0.131986393312561 | erot = 0.663795156035111 | epot = -15.4382147945646 | etot = -14.6424332452169 +495000 ekin = 0.140463823900159 | erot = 0.703554605721736 | epot = -15.4864516748841 | etot = -14.6424332452622 +496000 ekin = 0.15014640803584 | erot = 0.743630741563187 | epot = -15.5362103949193 | etot = -14.6424332453203 +497000 ekin = 0.161064579071316 | erot = 0.783147917317585 | epot = -15.5866457417809 | etot = -14.642433245392 +498000 ekin = 0.173139219157384 | erot = 0.821136754972775 | epot = -15.6367092196065 | etot = -14.6424332454764 +499000 ekin = 0.186156317833383 | erot = 0.856570103856722 | epot = -15.6851596672614 | etot = -14.6424332455713 +500000 ekin = 0.199756195068936 | erot = 0.888407758274067 | epot = -15.7305971990159 | etot = -14.6424332456729 +501000 ekin = 0.21344151783734 | erot = 0.915648078732879 | epot = -15.7715228423456 | etot = -14.6424332457754 +502000 ekin = 0.226605416598004 | erot = 0.937383433649205 | epot = -15.8064220961192 | etot = -14.642433245872 +503000 ekin = 0.238577508977599 | erot = 0.952855183124955 | epot = -15.833865938058 | etot = -14.6424332459554 +504000 ekin = 0.248682347016341 | erot = 0.961503066788411 | epot = -15.8526186598236 | etot = -14.6424332460188 +505000 ekin = 0.256302488969601 | erot = 0.963003656366721 | epot = -15.8617393913931 | etot = -14.6424332460567 +506000 ekin = 0.260937583144201 | erot = 0.957293217920631 | epot = -15.8606640471306 | etot = -14.6424332460658 +507000 ekin = 0.262251679299254 | erot = 0.944571918258648 | epot = -15.8492568436029 | etot = -14.642433246045 +508000 ekin = 0.260103184111419 | erot = 0.925288564934488 | epot = -15.827824995042 | etot = -14.6424332459961 +509000 ekin = 0.254554875280464 | erot = 0.90010753693787 | epot = -15.7970956581413 | etot = -14.642433245923 +510000 ekin = 0.245864483348196 | erot = 0.869861717985383 | epot = -15.7581594471648 | etot = -14.6424332458312 +511000 ekin = 0.234458914526896 | erot = 0.835496660126456 | epot = -15.7123888203806 | etot = -14.6424332457273 +512000 ekin = 0.22089682023999 | erot = 0.798011684065881 | epot = -15.6613417499238 | etot = -14.642433245618 +513000 ekin = 0.205824805087888 | erot = 0.758403224578321 | epot = -15.6066612751757 | etot = -14.6424332455095 +514000 ekin = 0.189932244116178 | erot = 0.717614706860286 | epot = -15.5499801963839 | etot = -14.6424332454074 +515000 ekin = 0.17390874819978 | erot = 0.676495918872563 | epot = -15.4928379123882 | etot = -14.6424332453159 +516000 ekin = 0.158407108509004 | erot = 0.635773516025323 | epot = -15.4366138697724 | etot = -14.6424332452381 +517000 ekin = 0.1440133501839 | erot = 0.596033149118113 | epot = -15.3824797444781 | etot = -14.6424332451761 +518000 ekin = 0.131224514118008 | erot = 0.557712825688944 | epot = -15.3313705849373 | etot = -14.6424332451304 +519000 ekin = 0.120434042405821 | erot = 0.521106495597703 | epot = -15.283973783104 | etot = -14.6424332451005 +520000 ekin = 0.111924165176696 | erot = 0.48637644319974 | epot = -15.2407338534618 | etot = -14.6424332450854 +521000 ekin = 0.105864424815862 | erot = 0.453572806060421 | epot = -15.2018704759592 | etot = -14.6424332450829 +522000 ekin = 0.102315362067372 | erot = 0.422658367131508 | epot = -15.1674069742899 | etot = -14.642433245091 +523000 ekin = 0.101236366465152 | erot = 0.393536647097 | epot = -15.137206258669 | etot = -14.6424332451069 +524000 ekin = 0.102496717236721 | erot = 0.366081244308229 | epot = -15.1110112066728 | etot = -14.6424332451279 +525000 ekin = 0.105888887336008 | erot = 0.340164343214705 | epot = -15.088486475702 | etot = -14.6424332451513 +526000 ekin = 0.111143247850893 | erot = 0.315682368378702 | epot = -15.0692588614046 | etot = -14.642433245175 +527000 ekin = 0.117943398962381 | erot = 0.292576937807028 | epot = -15.0529535819665 | etot = -14.6424332451971 +528000 ekin = 0.125941474255768 | erot = 0.270849598243881 | epot = -15.0392243177156 | etot = -14.6424332452159 +529000 ekin = 0.134772916010344 | erot = 0.250569317239541 | epot = -15.0277754784805 | etot = -14.6424332452306 +530000 ekin = 0.144070383403707 | erot = 0.231872340652279 | epot = -15.0183759692969 | etot = -14.6424332452409 +531000 ekin = 0.153476601970632 | erot = 0.214954741435395 | epot = -15.010864588653 | etot = -14.642433245247 +532000 ekin = 0.1626560540789 | erot = 0.200058697649321 | epot = -15.0051479969777 | etot = -14.6424332452495 +533000 ekin = 0.171305419081489 | erot = 0.187454143184939 | epot = -15.0011928075153 | etot = -14.6424332452489 +534000 ekin = 0.179162595540411 | erot = 0.177417842695355 | epot = -14.9990136834822 | etot = -14.6424332452464 +535000 ekin = 0.186014006486684 | erot = 0.170212094444257 | epot = -14.9986593461736 | etot = -14.6424332452427 +536000 ekin = 0.191699759240443 | erot = 0.166065149228308 | epot = -15.0001981537074 | etot = -14.6424332452386 +537000 ekin = 0.196116169931545 | erot = 0.165155084981508 | epot = -15.0037045001479 | etot = -14.6424332452349 +538000 ekin = 0.199215220533704 | erot = 0.167598364573368 | epot = -15.0092468303392 | etot = -14.6424332452321 +539000 ekin = 0.201000709669604 | erot = 0.173443713619075 | epot = -15.0168776685195 | etot = -14.6424332452308 +540000 ekin = 0.201521164038046 | erot = 0.182671367033628 | epot = -15.026625776303 | etot = -14.6424332452313 +541000 ekin = 0.200859940141535 | erot = 0.195197211442984 | epot = -15.0384903968185 | etot = -14.642433245234 +542000 ekin = 0.199123298889063 | erot = 0.210880936223687 | epot = -15.0524374803519 | etot = -14.6424332452391 +543000 ekin = 0.196427519384046 | erot = 0.2295370177894 | epot = -15.0683977824198 | etot = -14.6424332452464 +544000 ekin = 0.192886294945241 | erot = 0.25094720200222 | epot = -15.0862667422039 | etot = -14.6424332452565 +545000 ekin = 0.188599710887441 | erot = 0.274873110235132 | epot = -15.1059060663912 | etot = -14.6424332452687 +546000 ekin = 0.183646045242704 | erot = 0.301067663118917 | epot = -15.1271469536446 | etot = -14.642433245283 +547000 ekin = 0.178077473818685 | erot = 0.329284179373518 | epot = -15.1497948984912 | etot = -14.642433245299 +548000 ekin = 0.171920510267331 | erot = 0.359282253783689 | epot = -15.1736360093672 | etot = -14.6424332453162 +549000 ekin = 0.165181670578021 | erot = 0.390829837831202 | epot = -15.1984447537431 | etot = -14.6424332453339 +550000 ekin = 0.157858408655527 | erot = 0.423701326917663 | epot = -15.2239929809248 | etot = -14.6424332453516 +551000 ekin = 0.149954809005965 | erot = 0.457671882716405 | epot = -15.2500599370908 | etot = -14.6424332453685 +552000 ekin = 0.141500835823196 | erot = 0.492508662660419 | epot = -15.2764427438674 | etot = -14.6424332453838 +553000 ekin = 0.132573145481942 | erot = 0.527960055124252 | epot = -15.3029664460031 | etot = -14.6424332453969 +554000 ekin = 0.123314645148993 | erot = 0.563744383269579 | epot = -15.329492273826 | etot = -14.6424332454074 +555000 ekin = 0.11394927090318 | erot = 0.599539792623581 | epot = -15.3559223089418 | etot = -14.642433245415 +556000 ekin = 0.104788088807789 | erot = 0.634977129563578 | epot = -15.3821984637916 | etot = -14.6424332454203 +557000 ekin = 0.0962230654780937 | erot = 0.669637513724418 | epot = -15.4082938246266 | etot = -14.6424332454241 +558000 ekin = 0.0887059614428439 | erot = 0.703055990480566 | epot = -15.4341951973516 | etot = -14.6424332454282 +559000 ekin = 0.0827118847741871 | erot = 0.734732129424035 | epot = -15.4598772596329 | etot = -14.6424332454346 +560000 ekin = 0.0786899547259807 | erot = 0.764147748398847 | epot = -15.4852709485702 | etot = -14.6424332454454 +561000 ekin = 0.0770067720633659 | erot = 0.790791153075989 | epot = -15.5102311706017 | etot = -14.6424332454624 +562000 ekin = 0.0778911706764631 | erot = 0.814186471629129 | epot = -15.534510887792 | etot = -14.6424332454864 +563000 ekin = 0.0813901113672907 | erot = 0.833925925483065 | epot = -15.5577492823675 | etot = -14.6424332455171 +564000 ekin = 0.0873448530219359 | erot = 0.849702302565726 | epot = -15.57948040114 | etot = -14.6424332455523 +565000 ekin = 0.0953935152543113 | erot = 0.861338569497175 | epot = -15.5991653303401 | etot = -14.6424332455886 +566000 ekin = 0.105001366119702 | erot = 0.868811531657282 | epot = -15.6162461433985 | etot = -14.6424332456215 +567000 ekin = 0.115514789210848 | erot = 0.872266750928135 | epot = -15.6302147857853 | etot = -14.6424332456464 +568000 ekin = 0.126230320990576 | erot = 0.872022546760986 | epot = -15.6406861134105 | etot = -14.6424332456589 +569000 ekin = 0.136467575205475 | erot = 0.868561781937934 | epot = -15.6474626027995 | etot = -14.6424332456561 +570000 ekin = 0.145634823229257 | erot = 0.862511177262809 | epot = -15.650579246129 | etot = -14.642433245637 +571000 ekin = 0.153278250260102 | erot = 0.854608991356203 | epot = -15.6503204872187 | etot = -14.6424332456024 +572000 ekin = 0.159109636953932 | erot = 0.845662918616737 | epot = -15.6472058011258 | etot = -14.6424332455552 +573000 ekin = 0.163011362017374 | erot = 0.836500892319944 | epot = -15.6419454998372 | etot = -14.6424332454999 +574000 ekin = 0.165021239080146 | erot = 0.82791805820528 | epot = -15.6353725427274 | etot = -14.642433245442 +575000 ekin = 0.165302195908609 | erot = 0.820623479704234 | epot = -15.628358921 | etot = -14.6424332453872 +576000 ekin = 0.164102988101204 | erot = 0.815190165399022 | epot = -15.6217263988411 | etot = -14.6424332453409 +577000 ekin = 0.16171615238716 | erot = 0.812011817944629 | epot = -15.6161612156398 | etot = -14.642433245308 +578000 ekin = 0.158438569371814 | erot = 0.811269345694708 | epot = -15.6121411603584 | etot = -14.6424332452919 +579000 ekin = 0.154538688869361 | erot = 0.812909695780807 | epot = -15.6098816299448 | etot = -14.6424332452946 +580000 ekin = 0.150232988454484 | erot = 0.816638977241892 | epot = -15.6093052110128 | etot = -14.6424332453164 +581000 ekin = 0.145672809814972 | erot = 0.821931135411058 | epot = -15.610037190582 | etot = -14.642433245356 +582000 ekin = 0.140941476791515 | erot = 0.828052590350937 | epot = -15.6114273125529 | etot = -14.6424332454104 +583000 ekin = 0.136060602599172 | erot = 0.834102246896438 | epot = -15.6125960949711 | etot = -14.6424332454755 +584000 ekin = 0.131003759896596 | erot = 0.839065139158377 | epot = -15.6125021446008 | etot = -14.6424332455458 +585000 ekin = 0.125715216483019 | erot = 0.841876757449112 | epot = -15.6100252195477 | etot = -14.6424332456156 +586000 ekin = 0.120131224768949 | erot = 0.841493945666844 | epot = -15.6040584161145 | etot = -14.6424332456787 +587000 ekin = 0.114201380572134 | erot = 0.836967317753832 | epot = -15.5936019440557 | etot = -14.6424332457297 +588000 ekin = 0.107907808226742 | erot = 0.827509595983301 | epot = -15.5778506499739 | etot = -14.6424332457638 +589000 ekin = 0.101280337909734 | erot = 0.81255426067366 | epot = -15.5562678443609 | etot = -14.6424332457776 +590000 ekin = 0.0944063548788447 | erot = 0.791799488420614 | epot = -15.5286390890685 | etot = -14.642433245769 +591000 ekin = 0.0874345511052151 | erot = 0.76523351922336 | epot = -15.4951013160666 | etot = -14.642433245738 +592000 ekin = 0.0805723392085189 | erot = 0.733139214285282 | epot = -15.45614479918 | etot = -14.6424332456862 +593000 ekin = 0.0740771594080953 | erot = 0.696077455348749 | epot = -15.4125878603736 | etot = -14.6424332456168 +594000 ekin = 0.0682423089599914 | erot = 0.654850963358167 | epot = -15.3655265178524 | etot = -14.6424332455342 +595000 ekin = 0.0633782539014622 | erot = 0.610451848323624 | epot = -15.316263347669 | etot = -14.6424332454439 +596000 ekin = 0.0597906540649622 | erot = 0.563997548401124 | epot = -15.266221447818 | etot = -14.6424332453519 +597000 ekin = 0.0577565493624107 | erot = 0.516660644084268 | epot = -15.2168504387109 | etot = -14.6424332452643 +598000 ekin = 0.0575003158536292 | erot = 0.46959829435364 | epot = -15.1695318553937 | etot = -14.6424332451864 +599000 ekin = 0.0591710965286411 | erot = 0.423886769451092 | epot = -15.125491111103 | etot = -14.6424332451233 +600000 ekin = 0.0628234356891151 | erot = 0.380465849281473 | epot = -15.085722530049 | etot = -14.6424332450784 +601000 ekin = 0.0684027903378462 | erot = 0.340096852289088 | epot = -15.0509328876808 | etot = -14.6424332450539 +602000 ekin = 0.0757374499128992 | erot = 0.303336891508859 | epot = -15.0215075864721 | etot = -14.6424332450503 +603000 ekin = 0.0845381560106908 | erot = 0.270530726252483 | epot = -14.9975021273299 | etot = -14.6424332450667 +604000 ekin = 0.0944063594078219 | erot = 0.241820347963514 | epot = -14.9786599524718 | etot = -14.6424332451004 +605000 ekin = 0.104851562460546 | erot = 0.217171224791095 | epot = -14.9644560323987 | etot = -14.6424332451471 +606000 ekin = 0.115317556389809 | erot = 0.196412930356164 | epot = -14.9541637319473 | etot = -14.6424332452013 +607000 ekin = 0.125216580353243 | erot = 0.179290709847465 | epot = -14.9469405354577 | etot = -14.6424332452569 +608000 ekin = 0.133969542490526 | erot = 0.165523445157702 | epot = -14.9419262329557 | etot = -14.6424332453075 +609000 ekin = 0.141049537028475 | erot = 0.154862582265136 | epot = -14.9383453646401 | etot = -14.6424332453465 +610000 ekin = 0.146025095175903 | erot = 0.147146040888474 | epot = -14.9356043814332 | etot = -14.6424332453689 +611000 ekin = 0.148599079335708 | erot = 0.142341118193759 | epot = -14.9333734429004 | etot = -14.6424332453709 +612000 ekin = 0.148639027542189 | erot = 0.140571068727531 | epot = -14.9316433416207 | etot = -14.6424332453509 +613000 ekin = 0.146195193893286 | erot = 0.142121441395761 | epot = -14.9307498805988 | etot = -14.6424332453097 +614000 ekin = 0.141503544705005 | erot = 0.147424293659447 | epot = -14.931361083615 | etot = -14.6424332452505 +615000 ekin = 0.134972482669537 | erot = 0.157020849768784 | epot = -14.9344265776169 | etot = -14.6424332451786 +616000 ekin = 0.127153892887427 | erot = 0.171505679772597 | epot = -14.941092817761 | etot = -14.642433245101 +617000 ekin = 0.11870096049717 | erot = 0.191457667915229 | epot = -14.9525918734383 | etot = -14.6424332450259 +618000 ekin = 0.110316794781908 | erot = 0.217364584491545 | epot = -14.9701146242349 | etot = -14.6424332449614 +619000 ekin = 0.102698942666063 | erot = 0.24954877623369 | epot = -14.9946809638151 | etot = -14.6424332449153 +620000 ekin = 0.0964852203315362 | erot = 0.288101317493775 | epot = -15.0270197827191 | etot = -14.6424332448938 +621000 ekin = 0.0922059091525968 | erot = 0.332831044367712 | epot = -15.0674701984216 | etot = -14.6424332449013 +622000 ekin = 0.0902463647100715 | erot = 0.38323345186412 | epot = -15.1159130615138 | etot = -14.6424332449397 +623000 ekin = 0.0908226920702821 | erot = 0.438482716267927 | epot = -15.1717386533468 | etot = -14.6424332450086 +624000 ekin = 0.0939716062521676 | erot = 0.497448307340542 | epot = -15.2338531586981 | etot = -14.6424332451054 +625000 ekin = 0.0995541611224928 | erot = 0.558735886785353 | epot = -15.3007232931327 | etot = -14.6424332452249 +626000 ekin = 0.10727185932578 | erot = 0.620750477457182 | epot = -15.3704555821433 | etot = -14.6424332453603 +627000 ekin = 0.11669282673767 | erot = 0.681778220901769 | epot = -15.440904293143 | etot = -14.6424332455036 +628000 ekin = 0.127285245273611 | erot = 0.740081431769978 | epot = -15.5097999226894 | etot = -14.6424332456458 +629000 ekin = 0.138455039153878 | erot = 0.794000196770909 | epot = -15.574888481703 | etot = -14.6424332457782 +630000 ekin = 0.149584842937125 | erot = 0.842052640240603 | epot = -15.6340707290701 | etot = -14.6424332458924 +631000 ekin = 0.16007149985305 | erot = 0.883025442878479 | epot = -15.6855301887134 | etot = -14.6424332459819 +632000 ekin = 0.169359720292797 | erot = 0.916046503426873 | epot = -15.7278394697614 | etot = -14.6424332460418 +633000 ekin = 0.17697005369257 | erot = 0.940632922941154 | epot = -15.7600362227032 | etot = -14.6424332460695 +634000 ekin = 0.182519961289978 | erot = 0.956709735134137 | epot = -15.781662942489 | etot = -14.6424332460649 +635000 ekin = 0.185737466035669 | erot = 0.964597760206484 | epot = -15.7927684722726 | etot = -14.6424332460304 +636000 ekin = 0.186467519303327 | erot = 0.964972204256472 | epot = -15.7938729695301 | etot = -14.6424332459703 +637000 ekin = 0.184671774604503 | erot = 0.958796660376594 | epot = -15.7859016808714 | etot = -14.6424332458903 +638000 ekin = 0.180422825778069 | erot = 0.947239527072976 | epot = -15.770095598648 | etot = -14.6424332457969 +639000 ekin = 0.173894119064868 | erot = 0.931581224196161 | epot = -15.7479085889582 | etot = -14.6424332456971 +640000 ekin = 0.165346701827808 | erot = 0.913120838753317 | epot = -15.7209007861785 | etot = -14.6424332455974 +641000 ekin = 0.155113786103713 | erot = 0.893090060089577 | epot = -15.6906370916966 | etot = -14.6424332455033 +642000 ekin = 0.143583869244232 | erot = 0.872580710306069 | epot = -15.6585978249697 | etot = -14.6424332454194 +643000 ekin = 0.131182953689577 | erot = 0.852490168054228 | epot = -15.6261063670927 | etot = -14.6424332453489 +644000 ekin = 0.11835630576118 | erot = 0.833486853990155 | epot = -15.5942764050452 | etot = -14.6424332452939 +645000 ekin = 0.105550209085084 | erot = 0.815995971212681 | epot = -15.5639794255528 | etot = -14.642433245255 +646000 ekin = 0.093194274419463 | erot = 0.800204061931152 | epot = -15.5358315815826 | etot = -14.642433245232 +647000 ekin = 0.0816850001800759 | erot = 0.786079744440879 | epot = -15.5101979898445 | etot = -14.6424332452235 +648000 ekin = 0.0713713598437969 | erot = 0.773407243193161 | epot = -15.4872118482646 | etot = -14.6424332452277 +649000 ekin = 0.0625431628717073 | erot = 0.761828976530834 | epot = -15.4668053846445 | etot = -14.642433245242 +650000 ekin = 0.0554227735503065 | erot = 0.750893453414394 | epot = -15.4487494722282 | etot = -14.6424332452635 +651000 ekin = 0.0501605027658154 | erot = 0.740104978449003 | epot = -15.4326987265042 | etot = -14.6424332452894 +652000 ekin = 0.0468336713663407 | erot = 0.728972100421355 | epot = -15.4182390171044 | etot = -14.6424332453167 +653000 ekin = 0.0454490492573823 | erot = 0.717052285945779 | epot = -15.4049345805458 | etot = -14.6424332453426 +654000 ekin = 0.0459481524943509 | erot = 0.70399086978471 | epot = -15.392372267644 | etot = -14.6424332453649 +655000 ekin = 0.0482147495286276 | erot = 0.689552835107397 | epot = -15.3802008300174 | etot = -14.6424332453814 +656000 ekin = 0.0520838761262644 | erot = 0.673646332749874 | epot = -15.3681634542669 | etot = -14.6424332453908 +657000 ekin = 0.0573516620848622 | erot = 0.656337023115527 | epot = -15.3561219305923 | etot = -14.6424332453919 +658000 ekin = 0.0637853134928166 | erot = 0.637852348219607 | epot = -15.344070907097 | etot = -14.6424332453846 +659000 ekin = 0.0711326702869886 | erot = 0.618574815847844 | epot = -15.3321407315043 | etot = -14.6424332453694 +660000 ekin = 0.0791308828101371 | erot = 0.599023454708784 | epot = -15.3205875828668 | etot = -14.6424332453479 +661000 ekin = 0.0875139366233974 | erot = 0.57982293974748 | epot = -15.309770121693 | etot = -14.6424332453222 +662000 ekin = 0.0960190004199823 | erot = 0.561660610347651 | epot = -15.3001128560629 | etot = -14.6424332452952 +663000 ekin = 0.104391848885353 | erot = 0.545232746054702 | epot = -15.2920578402108 | etot = -14.6424332452707 +664000 ekin = 0.112391863390337 | erot = 0.531182949318112 | epot = -15.2860080579609 | etot = -14.6424332452524 +665000 ekin = 0.119797262721372 | erot = 0.520037124796779 | epot = -15.2822676327621 | etot = -14.6424332452439 +666000 ekin = 0.126411190063575 | erot = 0.512141060960667 | epot = -15.2809854962725 | etot = -14.6424332452483 +667000 ekin = 0.132069035725156 | erot = 0.50760768172899 | epot = -15.2821099627212 | etot = -14.6424332452671 +668000 ekin = 0.136646914542223 | erot = 0.506281315754211 | epot = -15.2853614755972 | etot = -14.6424332453008 +669000 ekin = 0.140070616013037 | erot = 0.507725566171581 | epot = -15.2902294275325 | etot = -14.6424332453479 +670000 ekin = 0.142323740906691 | erot = 0.511239425098608 | epot = -15.2959964114102 | etot = -14.6424332454049 +671000 ekin = 0.143453306303075 | erot = 0.515903234044913 | epot = -15.3017897858151 | etot = -14.6424332454671 +672000 ekin = 0.143571012732429 | erot = 0.520652256718095 | epot = -15.3066565149792 | etot = -14.6424332455287 +673000 ekin = 0.142848733836965 | erot = 0.524371563356991 | epot = -15.3096535427773 | etot = -14.6424332455833 +674000 ekin = 0.141507613277731 | erot = 0.526002362930676 | epot = -15.3099432218337 | etot = -14.6424332456253 +675000 ekin = 0.139801302825604 | erot = 0.524647629024546 | epot = -15.3068821775003 | etot = -14.6424332456501 +676000 ekin = 0.137995095210655 | erot = 0.519664439041476 | epot = -15.3000927799068 | etot = -14.6424332456546 +677000 ekin = 0.136343677285201 | erot = 0.510732098517963 | epot = -15.2895090214411 | etot = -14.6424332456379 +678000 ekin = 0.135070664122621 | erot = 0.497888575256477 | epot = -15.2753924849801 | etot = -14.642433245601 +679000 ekin = 0.134352810444884 | erot = 0.481532294132544 | epot = -15.2583183501238 | etot = -14.6424332455464 +680000 ekin = 0.134310862655773 | erot = 0.462390968605323 | epot = -15.2391350767392 | etot = -14.6424332454781 +681000 ekin = 0.135007638923145 | erot = 0.441462941784857 | epot = -15.218903826109 | etot = -14.642433245401 +682000 ekin = 0.13645246152461 | erot = 0.419938865037855 | epot = -15.1988245718826 | etot = -14.6424332453201 +683000 ekin = 0.138609887397967 | erot = 0.399112293315506 | epot = -15.180155425954 | etot = -14.6424332452405 +684000 ekin = 0.141410065648281 | erot = 0.38028718176242 | epot = -15.164130492578 | etot = -14.6424332451673 +685000 ekin = 0.144758102722259 | erot = 0.364688846299456 | epot = -15.1518801941268 | etot = -14.6424332451051 +686000 ekin = 0.148540467119441 | erot = 0.353383275614529 | epot = -15.1443569877921 | etot = -14.6424332450581 +687000 ekin = 0.152627512098729 | erot = 0.347208212230897 | epot = -15.1422689693592 | etot = -14.6424332450296 +688000 ekin = 0.156872371008247 | erot = 0.346718408271177 | epot = -15.1460240243021 | etot = -14.6424332450226 +689000 ekin = 0.161107527974783 | erot = 0.35214694111545 | epot = -15.1556877141289 | etot = -14.6424332450387 +690000 ekin = 0.165141087380649 | erot = 0.36338430494212 | epot = -15.1709586374008 | etot = -14.6424332450781 +691000 ekin = 0.168755042649078 | erot = 0.379976931156632 | epot = -15.1911652189454 | etot = -14.6424332451396 +692000 ekin = 0.171707649703689 | erot = 0.401146558397852 | epot = -15.215287453322 | etot = -14.6424332452204 +693000 ekin = 0.173741393443089 | erot = 0.42583123278867 | epot = -15.2420058715475 | etot = -14.6424332453157 +694000 ekin = 0.174597110624771 | erot = 0.452747528140126 | epot = -15.2697778841841 | etot = -14.6424332454192 +695000 ekin = 0.174033757472238 | erot = 0.480471830922422 | epot = -15.2969388339178 | etot = -14.6424332455232 +696000 ekin = 0.171852263364757 | erot = 0.507536398158356 | epot = -15.3218219071425 | etot = -14.6424332456194 +697000 ekin = 0.167921065290933 | erot = 0.532533688693164 | epot = -15.3428879996837 | etot = -14.6424332456996 +698000 ekin = 0.162200409477029 | erot = 0.554220619925199 | epot = -15.3588542751586 | etot = -14.6424332457564 +699000 ekin = 0.154762415715643 | erot = 0.571613361028106 | epot = -15.3688090225278 | etot = -14.642433245784 +700000 ekin = 0.145804230008803 | erot = 0.584063387088072 | epot = -15.3723008628759 | etot = -14.6424332457791 +701000 ekin = 0.135652269558616 | erot = 0.591306922721422 | epot = -15.3693924380207 | etot = -14.6424332457407 +702000 ekin = 0.124756460207487 | erot = 0.593482464349051 | epot = -15.3606721702277 | etot = -14.6424332456711 +703000 ekin = 0.113674325951271 | erot = 0.591114401856995 | epot = -15.3472219733833 | etot = -14.642433245575 +704000 ekin = 0.1030456759456 | erot = 0.585064323196589 | epot = -15.3305432446015 | etot = -14.6424332454593 +705000 ekin = 0.0935593581963262 | erot = 0.576454826534689 | epot = -15.3124474300639 | etot = -14.6424332453329 +706000 ekin = 0.0859140824284925 | erot = 0.566573150256724 | epot = -15.2949204778902 | etot = -14.642433245205 +707000 ekin = 0.0807756759557919 | erot = 0.556763427609511 | epot = -15.279972348651 | etot = -14.6424332450857 +708000 ekin = 0.0787333622600079 | erot = 0.548316855291324 | epot = -15.2694834625352 | etot = -14.6424332449839 +709000 ekin = 0.0802577669151073 | erot = 0.542368667954005 | epot = -15.2650596797768 | etot = -14.6424332449077 +710000 ekin = 0.0856633545528672 | erot = 0.539809747049325 | epot = -15.2679063464655 | etot = -14.6424332448633 +711000 ekin = 0.095077851902745 | erot = 0.541219180891425 | epot = -15.278730277649 | etot = -14.6424332448548 +712000 ekin = 0.108420876622167 | erot = 0.546822307911541 | epot = -15.2976764294173 | etot = -14.6424332448836 +713000 ekin = 0.125393451694849 | erot = 0.556476834657793 | epot = -15.3243035313014 | etot = -14.6424332449487 +714000 ekin = 0.145479367621451 | erot = 0.56968760011942 | epot = -15.3576002127876 | etot = -14.6424332450467 +715000 ekin = 0.167958541116837 | erot = 0.585648522303156 | epot = -15.396040308592 | etot = -14.642433245172 +716000 ekin = 0.191931735851211 | erot = 0.603308292531433 | epot = -15.4376732736996 | etot = -14.6424332453169 +717000 ekin = 0.216355400176877 | erot = 0.621454592037058 | epot = -15.4802432376869 | etot = -14.6424332454729 +718000 ekin = 0.24008505651043 | erot = 0.638810139731555 | epot = -15.5213284418724 | etot = -14.6424332456304 +719000 ekin = 0.261925698575348 | erot = 0.654132895986132 | epot = -15.5584918403414 | etot = -14.6424332457799 +720000 ekin = 0.280687969311602 | erot = 0.6663123798671 | epot = -15.5894335950909 | etot = -14.6424332459122 +721000 ekin = 0.295249345589177 | erot = 0.674454385927726 | epot = -15.612136977536 | etot = -14.6424332460191 +722000 ekin = 0.304619886333769 | erot = 0.677947410255128 | epot = -15.6250005426823 | etot = -14.6424332460934 +723000 ekin = 0.308011983728025 | erot = 0.676505724570436 | epot = -15.6269509544278 | etot = -14.6424332461294 +724000 ekin = 0.304912667284422 | erot = 0.670186105899586 | epot = -15.617532019307 | etot = -14.642433246123 +725000 ekin = 0.295155116711621 | erot = 0.659377522489412 | epot = -15.596965885273 | etot = -14.642433246072 +726000 ekin = 0.278983134900163 | erot = 0.644765363158375 | epot = -15.5661817440352 | etot = -14.6424332459767 +727000 ekin = 0.257098790794435 | erot = 0.627273860362892 | epot = -15.5268058969976 | etot = -14.6424332458402 +728000 ekin = 0.230680158274999 | erot = 0.607992016180427 | epot = -15.4811054201245 | etot = -14.6424332456691 +729000 ekin = 0.201354496276734 | erot = 0.588089464034349 | epot = -15.4318772057847 | etot = -14.6424332454737 +730000 ekin = 0.171114103979347 | erot = 0.56872921471559 | epot = -15.3822765639634 | etot = -14.6424332452685 +731000 ekin = 0.142168923912302 | erot = 0.55098413507048 | epot = -15.335586304054 | etot = -14.6424332450712 +732000 ekin = 0.116742007100633 | erot = 0.535763349043665 | epot = -15.2949386010453 | etot = -14.642433244901 +733000 ekin = 0.09682930275761 | erot = 0.523753647321524 | epot = -15.2630161948552 | etot = -14.6424332447761 +734000 ekin = 0.0839596135620733 | erot = 0.515379592338451 | epot = -15.2417724506113 | etot = -14.6424332447107 +735000 ekin = 0.0789983701793142 | erot = 0.510784464195818 | epot = -15.2322160790872 | etot = -14.6424332447121 +736000 ekin = 0.0820355551944443 | erot = 0.509832642266179 | epot = -15.2343014422398 | etot = -14.6424332447791 +737000 ekin = 0.0923827123871823 | erot = 0.512132550855379 | epot = -15.2469485081446 | etot = -14.642433244902 +738000 ekin = 0.10868044851431 | erot = 0.517077971027559 | epot = -15.2681916646065 | etot = -14.6424332450646 +739000 ekin = 0.129093715683514 | erot = 0.523904364926965 | epot = -15.2954313258571 | etot = -14.6424332452466 +740000 ekin = 0.151555277793959 | erot = 0.531755895780137 | epot = -15.3257444190018 | etot = -14.6424332454277 +741000 ekin = 0.174012721806636 | erot = 0.539758083454087 | epot = -15.3562040508504 | etot = -14.6424332455896 +742000 ekin = 0.194640916831482 | erot = 0.54709054970013 | epot = -15.3841647122503 | etot = -14.6424332457187 +743000 ekin = 0.211995737398838 | erot = 0.553054125338314 | epot = -15.4074831085433 | etot = -14.6424332458062 +744000 ekin = 0.225100508723079 | erot = 0.557126762310524 | epot = -15.424660516882 | etot = -14.6424332458484 +745000 ekin = 0.233469424487108 | erot = 0.559003260239957 | epot = -15.4349059305735 | etot = -14.6424332458464 +746000 ekin = 0.237079913465558 | erot = 0.558614810500983 | epot = -15.4381279697713 | etot = -14.6424332458048 +747000 ekin = 0.236308652985589 | erot = 0.556125790084016 | epot = -15.4348676888005 | etot = -14.6424332457309 +748000 ekin = 0.231845097888752 | erot = 0.55190707933143 | epot = -15.4261854228542 | etot = -14.642433245634 +749000 ekin = 0.224593843485221 | erot = 0.546487360031015 | epot = -15.4135144490412 | etot = -14.6424332455249 +750000 ekin = 0.215574369393402 | erot = 0.540486233486425 | epot = -15.3984938482944 | etot = -14.6424332454146 +751000 ekin = 0.205824583428198 | erot = 0.534535356766148 | epot = -15.3827931855081 | etot = -14.6424332453138 +752000 ekin = 0.196313335743884 | erot = 0.52919581522017 | epot = -15.3679423961961 | etot = -14.642433245232 +753000 ekin = 0.187866475789629 | erot = 0.524881252733656 | epot = -15.3551809737001 | etot = -14.6424332451768 +754000 ekin = 0.181110613628486 | erot = 0.521796491099562 | epot = -15.3453403498807 | etot = -14.6424332451526 +755000 ekin = 0.176438042206913 | erot = 0.519900210808863 | epot = -15.3387714981765 | etot = -14.6424332451607 +756000 ekin = 0.173994962649932 | erot = 0.518897676286876 | epot = -15.3353258841353 | etot = -14.6424332451985 +757000 ekin = 0.173693190273803 | erot = 0.518265706184404 | epot = -15.3343921417187 | etot = -14.6424332452605 +758000 ekin = 0.175243155018275 | erot = 0.517307659823502 | epot = -15.3349840601801 | etot = -14.6424332453383 +759000 ekin = 0.178203703096672 | erot = 0.515231902166426 | epot = -15.3358688506853 | etot = -14.6424332454222 +760000 ekin = 0.182042463552542 | erot = 0.511243837950911 | epot = -15.3357195470056 | etot = -14.6424332455021 +761000 ekin = 0.186199747764937 | erot = 0.504639825549636 | epot = -15.3332728188833 | etot = -14.6424332455687 +762000 ekin = 0.190149235948647 | erot = 0.494891409035961 | epot = -15.3274738905993 | etot = -14.6424332456147 +763000 ekin = 0.193449921097656 | erot = 0.48171023828929 | epot = -15.3175934050219 | etot = -14.642433245635 +764000 ekin = 0.195785552428858 | erot = 0.465087294353624 | epot = -15.3033060924099 | etot = -14.6424332456274 +765000 ekin = 0.196989678186435 | erot = 0.445303873494018 | epot = -15.2847267972728 | etot = -14.6424332455924 +766000 ekin = 0.197055919183657 | erot = 0.422915440293833 | epot = -15.2624046050103 | etot = -14.6424332455328 +767000 ekin = 0.196134076493791 | erot = 0.398712320924463 | epot = -15.2372796428714 | etot = -14.6424332454532 +768000 ekin = 0.19451309665161 | erot = 0.373662938959324 | epot = -15.2106092809708 | etot = -14.6424332453598 +769000 ekin = 0.192592017625545 | erot = 0.348845887485747 | epot = -15.183871150371 | etot = -14.6424332452597 +770000 ekin = 0.190840163684042 | erot = 0.325376840212043 | epot = -15.1586502490567 | etot = -14.6424332451606 +771000 ekin = 0.189748397224706 | erot = 0.304335529899335 | epot = -15.1365171721945 | etot = -14.6424332450705 +772000 ekin = 0.189774341847512 | erot = 0.286697153920059 | epot = -15.1189047407643 | etot = -14.6424332449968 +773000 ekin = 0.191286034497103 | erot = 0.273271857835136 | epot = -15.1069911372781 | etot = -14.6424332449458 +774000 ekin = 0.194510000604928 | erot = 0.264655458968671 | epot = -15.1015987044965 | etot = -14.6424332449229 +775000 ekin = 0.1994906396753 | erot = 0.261194193154413 | epot = -15.1031180777602 | etot = -14.6424332449305 +776000 ekin = 0.20606747706162 | erot = 0.262965803934266 | epot = -15.1114665259645 | etot = -14.6424332449687 +777000 ekin = 0.213875019082075 | erot = 0.269778568411878 | epot = -15.1260868325288 | etot = -14.6424332450348 +778000 ekin = 0.222366868961501 | erot = 0.281188790675803 | epot = -15.1459889047609 | etot = -14.6424332451236 +779000 ekin = 0.23086210226578 | erot = 0.296535944176041 | epot = -15.1698312916694 | etot = -14.6424332452276 +780000 ekin = 0.238608567016832 | erot = 0.314993169091967 | epot = -15.1960349814467 | etot = -14.6424332453379 +781000 ekin = 0.244855557739749 | erot = 0.335629445236581 | epot = -15.2229182484218 | etot = -14.6424332454454 +782000 ekin = 0.24892761247725 | erot = 0.357478674286814 | epot = -15.2488395323052 | etot = -14.6424332455412 +783000 ekin = 0.250291897528933 | erot = 0.379610269028307 | epot = -15.2723354121746 | etot = -14.6424332456174 +784000 ekin = 0.248613283253142 | erot = 0.401195731122951 | epot = -15.2922422600441 | etot = -14.642433245668 +785000 ekin = 0.243793133451306 | erot = 0.421566090466591 | epot = -15.307792469607 | etot = -14.6424332456891 +786000 ekin = 0.235989501853544 | erot = 0.440255905206922 | epot = -15.3186786527391 | etot = -14.6424332456787 +787000 ekin = 0.225617610785755 | erot = 0.457030673432498 | epot = -15.3250815298558 | etot = -14.6424332456375 +788000 ekin = 0.213330260903068 | erot = 0.471895861696116 | epot = -15.3276593681681 | etot = -14.6424332455689 +789000 ekin = 0.199978499678474 | erot = 0.485087183883212 | epot = -15.3274989290401 | etot = -14.6424332454784 +790000 ekin = 0.186553834704413 | erot = 0.497043141243068 | epot = -15.3260302213206 | etot = -14.6424332453731 +791000 ekin = 0.174114766793401 | erot = 0.508362048570016 | epot = -15.3249100606255 | etot = -14.6424332452621 +792000 ekin = 0.163702420432354 | erot = 0.519746739181041 | epot = -15.3258824047684 | etot = -14.642433245155 +793000 ekin = 0.156252224966272 | erot = 0.531940822989567 | epot = -15.3306262930174 | etot = -14.6424332450615 +794000 ekin = 0.152510350034305 | erot = 0.545660777315136 | epot = -15.3406043723396 | etot = -14.6424332449902 +795000 ekin = 0.15296425115691 | erot = 0.561528326981077 | epot = -15.3569258230862 | etot = -14.6424332449482 +796000 ekin = 0.157795747355293 | erot = 0.58000757877803 | epot = -15.3802365710733 | etot = -14.64243324494 +797000 ekin = 0.166862457855209 | erot = 0.601351255569628 | epot = -15.4106469583921 | etot = -14.6424332449673 +798000 ekin = 0.179709603428639 | erot = 0.625560121845548 | epot = -15.4477029703033 | etot = -14.6424332450291 +799000 ekin = 0.195609966057174 | erot = 0.652359247176621 | epot = -15.4904024583554 | etot = -14.6424332451216 +800000 ekin = 0.213626158786275 | erot = 0.681194021873727 | epot = -15.5372534258987 | etot = -14.6424332452387 +801000 ekin = 0.23268704018842 | erot = 0.711247726386662 | epot = -15.5863680119477 | etot = -14.6424332453727 +802000 ekin = 0.251669429101161 | erot = 0.74148091983623 | epot = -15.6355835944521 | etot = -14.6424332455147 +803000 ekin = 0.269477067853805 | erot = 0.77069100842129 | epot = -15.6826013219308 | etot = -14.6424332456557 +804000 ekin = 0.285110541453744 | erot = 0.797588259158567 | epot = -15.7251320463987 | etot = -14.6424332457864 +805000 ekin = 0.297723982502972 | erot = 0.820882528799733 | epot = -15.7610397572013 | etot = -14.6424332458986 +806000 ekin = 0.306666387684833 | erot = 0.839373432913609 | epot = -15.7884730665839 | etot = -14.6424332459854 +807000 ekin = 0.31150697555439 | erot = 0.852035914445983 | epot = -15.805976136042 | etot = -14.6424332460416 +808000 ekin = 0.312045176252642 | erot = 0.858093398528306 | epot = -15.8125718208452 | etot = -14.6424332460642 +809000 ekin = 0.308306642387692 | erot = 0.857071970758726 | epot = -15.8078118591988 | etot = -14.6424332460524 +810000 ekin = 0.300527220561155 | erot = 0.848831113928873 | epot = -15.7917915804976 | etot = -14.6424332460076 +811000 ekin = 0.289127204421254 | erot = 0.833569138622274 | epot = -15.7651295889768 | etot = -14.6424332459333 +812000 ekin = 0.274678427602453 | erot = 0.81180411649313 | epot = -15.7289157899302 | etot = -14.6424332458346 +813000 ekin = 0.25786683558395 | erot = 0.784333459542784 | epot = -15.6846335408444 | etot = -14.6424332457177 +814000 ekin = 0.239453080594243 | erot = 0.752176980196514 | epot = -15.6340633063802 | etot = -14.6424332455895 +815000 ekin = 0.220233415151703 | erot = 0.716509170266734 | epot = -15.5791758308754 | etot = -14.642433245457 +816000 ekin = 0.201002751046678 | erot = 0.678586569748113 | epot = -15.5220225661216 | etot = -14.6424332453268 +817000 ekin = 0.182521261080269 | erot = 0.639675603864976 | epot = -15.4646301101501 | etot = -14.6424332452049 +818000 ekin = 0.16548540152786 | erot = 0.600985363831456 | epot = -15.4089040104558 | etot = -14.6424332450964 +819000 ekin = 0.15050378978042 | erot = 0.563608719249299 | epot = -15.3565457540354 | etot = -14.6424332450057 +820000 ekin = 0.138078032178478 | erot = 0.528474068972393 | epot = -15.3089853460865 | etot = -14.6424332449356 +821000 ekin = 0.128588386730135 | erot = 0.496309093117806 | epot = -15.2673307247362 | etot = -14.6424332448883 +822000 ekin = 0.122284066136812 | erot = 0.467617125515789 | epot = -15.2323344365172 | etot = -14.6424332448646 +823000 ekin = 0.119278020924339 | erot = 0.44266622847877 | epot = -15.2043774942677 | etot = -14.6424332448646 +824000 ekin = 0.119546158603677 | erot = 0.421490682738665 | epot = -15.1834700862295 | etot = -14.6424332448872 +825000 ekin = 0.122931110514549 | erot = 0.403904342223771 | epot = -15.1692686976685 | etot = -14.6424332449302 +826000 ekin = 0.129150803764327 | erot = 0.389525075000029 | epot = -15.161109123755 | etot = -14.6424332449907 +827000 ekin = 0.137812176399179 | erot = 0.377809252270532 | epot = -15.1580546737345 | etot = -14.6424332450648 +828000 ekin = 0.148430331608382 | erot = 0.368094906962796 | epot = -15.1589584837191 | etot = -14.6424332451479 +829000 ekin = 0.160453205761696 | erot = 0.359651737511967 | epot = -15.1625381885082 | etot = -14.6424332452346 +830000 ekin = 0.17329138289678 | erot = 0.351735589545236 | epot = -15.1674602177611 | etot = -14.6424332453191 +831000 ekin = 0.186352012962992 | erot = 0.343644456329796 | epot = -15.1724297146884 | etot = -14.6424332453957 +832000 ekin = 0.19907492460549 | erot = 0.334772487920949 | epot = -15.1762806579855 | etot = -14.642433245459 +833000 ekin = 0.21096808488054 | erot = 0.324658115188717 | epot = -15.1780594455737 | etot = -14.6424332455044 +834000 ekin = 0.22163875725698 | erot = 0.313022323442326 | epot = -15.1770943262282 | etot = -14.6424332455289 +835000 ekin = 0.230816330001966 | erot = 0.299793483326653 | epot = -15.1730430588596 | etot = -14.642433245531 +836000 ekin = 0.238363132174234 | erot = 0.28511603996084 | epot = -15.1659124176466 | etot = -14.6424332455115 +837000 ekin = 0.244270841530998 | erot = 0.269341751259632 | epot = -15.1560458382641 | etot = -14.6424332454734 +838000 ekin = 0.248642320235733 | erot = 0.25300390410384 | epot = -15.1440794697607 | etot = -14.6424332454212 +839000 ekin = 0.251661569327697 | erot = 0.23677675898714 | epot = -15.1308715736755 | etot = -14.6424332453607 +840000 ekin = 0.253557306828274 | erot = 0.221424057161473 | epot = -15.1174146092878 | etot = -14.642433245298 +841000 ekin = 0.254567562696821 | erot = 0.207741475743574 | epot = -15.104742283679 | etot = -14.6424332452386 +842000 ekin = 0.254912814683751 | erot = 0.196498262354278 | epot = -15.0938443222248 | etot = -14.6424332451868 +843000 ekin = 0.254783130765828 | erot = 0.188382921787058 | epot = -15.085599297698 | etot = -14.6424332451451 +844000 ekin = 0.254340789697888 | erot = 0.183956927272106 | epot = -15.0807309620847 | etot = -14.6424332451147 +845000 ekin = 0.253734932891713 | erot = 0.183619247980611 | epot = -15.0797874259676 | etot = -14.6424332450953 +846000 ekin = 0.253120504196155 | erot = 0.187583282239862 | epot = -15.0831370315226 | etot = -14.6424332450866 +847000 ekin = 0.252671650088266 | erot = 0.195866742639111 | epot = -15.0909716378154 | etot = -14.642433245088 +848000 ekin = 0.25258091531028 | erot = 0.20829422246314 | epot = -15.1033083828732 | etot = -14.6424332450998 +849000 ekin = 0.253039966848252 | erot = 0.224511555531826 | epot = -15.1199847675027 | etot = -14.6424332451227 +850000 ekin = 0.254204001798515 | erot = 0.244010590097797 | epot = -15.1406478370536 | etot = -14.6424332451573 +851000 ekin = 0.256148339026787 | erot = 0.26616256360263 | epot = -15.1647441478333 | etot = -14.6424332452039 +852000 ekin = 0.258829686440588 | erot = 0.290257858698213 | epot = -15.1915207904 | etot = -14.6424332452612 +853000 ekin = 0.262064657828587 | erot = 0.315549558167727 | epot = -15.2200474613225 | etot = -14.6424332453262 +854000 ekin = 0.265534116122648 | erot = 0.341297947736379 | epot = -15.2492653092531 | etot = -14.6424332453941 +855000 ekin = 0.26881517465358 | erot = 0.366813004430893 | epot = -15.2780614245436 | etot = -14.6424332454591 +856000 ekin = 0.271435486954603 | erot = 0.391492007901445 | epot = -15.305360740371 | etot = -14.642433245515 +857000 ekin = 0.272939108063008 | erot = 0.414849750473414 | epot = -15.3302221040928 | etot = -14.6424332455564 +858000 ekin = 0.272951155039785 | erot = 0.436539390688027 | epot = -15.3519237913071 | etot = -14.6424332455793 +859000 ekin = 0.271229880676472 | erot = 0.456362750059341 | epot = -15.3700258763176 | etot = -14.6424332455817 +860000 ekin = 0.267698633833911 | erot = 0.474269718460682 | epot = -15.3844015978589 | etot = -14.6424332455643 +861000 ekin = 0.262455001752904 | erot = 0.490347316007815 | epot = -15.3952355632896 | etot = -14.6424332455289 +862000 ekin = 0.255758797176706 | erot = 0.504799761298941 | epot = -15.402991803955 | etot = -14.6424332454794 +863000 ekin = 0.248003564341433 | erot = 0.517921532812514 | epot = -15.4083583425743 | etot = -14.6424332454204 +864000 ekin = 0.23967765558487 | erot = 0.5300658235034 | epot = -15.4121767244453 | etot = -14.642433245357 +865000 ekin = 0.23132088944539 | erot = 0.541610953534341 | epot = -15.4153650882739 | etot = -14.6424332452941 +866000 ekin = 0.223481813676297 | erot = 0.552927233331988 | epot = -15.4188422922445 | etot = -14.6424332452362 +867000 ekin = 0.216679174491969 | erot = 0.564346499432351 | epot = -15.4234589191111 | etot = -14.6424332451867 +868000 ekin = 0.211369750018244 | erot = 0.57613613893885 | epot = -15.4299391341058 | etot = -14.6424332451487 +869000 ekin = 0.207923502308331 | erot = 0.588478941151472 | epot = -15.4388356885839 | etot = -14.6424332451241 +870000 ekin = 0.206606153000455 | erot = 0.601459626890416 | epot = -15.4504990250046 | etot = -14.6424332451137 +871000 ekin = 0.207568796758621 | erot = 0.615058451105655 | epot = -15.4650604929822 | etot = -14.6424332451179 +872000 ekin = 0.210843969902065 | erot = 0.62915187575959 | epot = -15.4824290907976 | etot = -14.642433245136 +873000 ekin = 0.216347593119461 | erot = 0.643519970833663 | epot = -15.5023008091198 | etot = -14.6424332451666 +874000 ekin = 0.223886305143511 | erot = 0.65785990973072 | epot = -15.5241794600822 | etot = -14.6424332452079 +875000 ekin = 0.233169807553207 | erot = 0.67180466221101 | epot = -15.5474077150216 | etot = -14.6424332452574 +876000 ekin = 0.243827877963662 | erot = 0.684945735800061 | epot = -15.5712068590757 | etot = -14.642433245312 +877000 ekin = 0.255431632545988 | erot = 0.696858567354671 | epot = -15.5947234452691 | etot = -14.6424332453684 +878000 ekin = 0.267518408513276 | erot = 0.707128927388885 | epot = -15.6170805813255 | etot = -14.6424332454234 +879000 ekin = 0.279619300259048 | erot = 0.71537849572129 | epot = -15.6374310414537 | etot = -14.6424332454734 +880000 ekin = 0.291287955020511 | erot = 0.721287639199272 | epot = -15.6550088397353 | etot = -14.6424332455155 +881000 ekin = 0.30212877846463 | erot = 0.724613422810775 | epot = -15.6691754468226 | etot = -14.6424332455472 +882000 ekin = 0.311822304068824 | erot = 0.725201068176889 | epot = -15.6794566178125 | etot = -14.6424332455668 +883000 ekin = 0.320145243787706 | erot = 0.722987481104172 | epot = -15.6855659704655 | etot = -14.6424332455736 +884000 ekin = 0.326982762198909 | erot = 0.717996120159159 | epot = -15.6874121279265 | etot = -14.6424332455684 +885000 ekin = 0.332330882212481 | erot = 0.710323349672059 | epot = -15.6850874774374 | etot = -14.6424332455528 +886000 ekin = 0.33628767333099 | erot = 0.700117442976239 | epot = -15.678838361837 | etot = -14.6424332455298 +887000 ekin = 0.339032964151614 | erot = 0.687552454437006 | epot = -15.6690186640916 | etot = -14.642433245503 +888000 ekin = 0.340797654544347 | erot = 0.67280010094551 | epot = -15.6560310009666 | etot = -14.6424332454768 +889000 ekin = 0.341825106158976 | erot = 0.656003407102339 | epot = -15.6402617587166 | etot = -14.6424332454552 +890000 ekin = 0.342328347575176 | erot = 0.63725601316603 | epot = -15.6220176061831 | etot = -14.6424332454419 +891000 ekin = 0.342447730492056 | erot = 0.616590618570594 | epot = -15.601471594502 | etot = -14.6424332454393 +892000 ekin = 0.342214057411724 | erot = 0.593979026506924 | epot = -15.5786263293674 | etot = -14.6424332454488 +893000 ekin = 0.341522004910123 | erot = 0.569344767734232 | epot = -15.5533000181139 | etot = -14.6424332454695 +894000 ekin = 0.340117934117577 | erot = 0.542587519917294 | epot = -15.5251386995343 | etot = -14.6424332454994 +895000 ekin = 0.337605044782497 | erot = 0.51361677898196 | epot = -15.4936550692992 | etot = -14.6424332455348 +896000 ekin = 0.333467462872322 | erot = 0.482390775175684 | epot = -15.4582914836184 | etot = -14.6424332455704 +897000 ekin = 0.327113397522066 | erot = 0.448955709004578 | epot = -15.418502352127 | etot = -14.6424332456003 +898000 ekin = 0.317936017621476 | erot = 0.413480165460528 | epot = -15.3738494287003 | etot = -14.6424332456182 +899000 ekin = 0.305389123797598 | erot = 0.376280077470489 | epot = -15.3241024468861 | etot = -14.642433245618 +900000 ekin = 0.289072881398049 | erot = 0.337830752319602 | epot = -15.2693368793114 | etot = -14.6424332455938 +901000 ekin = 0.268822686263612 | erot = 0.298764046956934 | epot = -15.2100199787618 | etot = -14.6424332455413 +902000 ekin = 0.244791653973738 | erot = 0.259850521116738 | epot = -15.1470754205486 | etot = -14.6424332454581 +903000 ekin = 0.217514571467803 | erot = 0.221968047208507 | epot = -15.0819158640206 | etot = -14.6424332453443 +904000 ekin = 0.187939204416829 | erot = 0.186059692010109 | epot = -15.0164321416307 | etot = -14.6424332452037 +905000 ekin = 0.157410847736455 | erot = 0.153084564881008 | epot = -14.9529286576612 | etot = -14.6424332450437 +906000 ekin = 0.127599356275899 | erot = 0.123965703542346 | epot = -14.8939983046941 | etot = -14.6424332448759 +907000 ekin = 0.100365589134322 | erot = 0.0995389863868474 | epot = -14.8423378202363 | etot = -14.6424332447151 +908000 ekin = 0.077575985596966 | erot = 0.0805066337376087 | epot = -14.800515863912 | etot = -14.6424332445775 +909000 ekin = 0.0608876950043041 | erot = 0.0673982354547353 | epot = -14.7707191749375 | etot = -14.6424332444784 +910000 ekin = 0.0515382922982525 | erot = 0.0605415547693243 | epot = -14.7545130914978 | etot = -14.6424332444302 +911000 ekin = 0.0501789452889699 | erot = 0.0600446989615507 | epot = -14.7526568886895 | etot = -14.642433244439 +912000 ekin = 0.0567846925720978 | erot = 0.065790645022677 | epot = -14.7650085820984 | etot = -14.6424332445036 +913000 ekin = 0.0706603747930292 | erot = 0.0774445361871137 | epot = -14.7905381555968 | etot = -14.6424332446166 +914000 ekin = 0.0905398584091615 | erot = 0.0944735694308371 | epot = -14.8274466726047 | etot = -14.6424332447647 +915000 ekin = 0.114756144628398 | erot = 0.116178630208142 | epot = -14.8733680197681 | etot = -14.6424332449316 +916000 ekin = 0.141447043402251 | erot = 0.141736093139704 | epot = -14.9256163816432 | etot = -14.6424332451012 +917000 ekin = 0.168758535419812 | erot = 0.170247440489189 | epot = -14.9814392211683 | etot = -14.6424332452593 +918000 ekin = 0.195014913439607 | erot = 0.200793639368855 | epot = -15.0382417982036 | etot = -14.6424332453951 +919000 ekin = 0.218837422083647 | erot = 0.232490666336242 | epot = -15.0937613339215 | etot = -14.6424332455016 +920000 ekin = 0.239206641023718 | erot = 0.264542267092076 | epot = -15.1461821536915 | etot = -14.6424332455757 +921000 ekin = 0.255474577148654 | erot = 0.296286050802385 | epot = -15.1941938735684 | etot = -14.6424332456174 +922000 ekin = 0.267338631215765 | erot = 0.327229363205489 | epot = -15.2370012400499 | etot = -14.6424332456286 +923000 ekin = 0.274791412214202 | erot = 0.357072039937939 | epot = -15.2742966977655 | etot = -14.6424332456134 +924000 ekin = 0.278059017516371 | erot = 0.385714059433155 | epot = -15.3062063225259 | etot = -14.6424332455763 +925000 ekin = 0.277537405168372 | erot = 0.41324722009601 | epot = -15.3332178707874 | etot = -14.642433245523 +926000 ekin = 0.273733135238329 | erot = 0.439931173662005 | epot = -15.3560975543592 | etot = -14.6424332454589 +927000 ekin = 0.267211859641524 | erot = 0.466155363882809 | epot = -15.3758004689143 | etot = -14.6424332453899 +928000 ekin = 0.258555847536078 | erot = 0.492389553503158 | epot = -15.3933786463609 | etot = -14.6424332453217 +929000 ekin = 0.248330567891891 | erot = 0.519126582982283 | epot = -15.4098903961336 | etot = -14.6424332452594 +930000 ekin = 0.237059747166165 | erot = 0.546821711632301 | epot = -15.4263147040064 | etot = -14.6424332452079 +931000 ekin = 0.22520814480582 | erot = 0.575833282923993 | epot = -15.4434746729008 | etot = -14.6424332451709 +932000 ekin = 0.213171319365827 | erot = 0.606369490852174 | epot = -15.4619740553694 | etot = -14.6424332451514 +933000 ekin = 0.201271722995889 | erot = 0.63844569037927 | epot = -15.482150658526 | etot = -14.6424332451508 +934000 ekin = 0.189760460110152 | erot = 0.671856006699522 | epot = -15.5040497119791 | etot = -14.6424332451694 +935000 ekin = 0.178823941838377 | erot = 0.706161996587761 | epot = -15.527419183632 | etot = -14.6424332452058 +936000 ekin = 0.168594479114955 | erot = 0.740699865837585 | epot = -15.55172759021 | etot = -14.6424332452575 +937000 ekin = 0.159163635634861 | erot = 0.774606336206385 | epot = -15.5762032171619 | etot = -14.6424332453207 +938000 ekin = 0.150596971914849 | erot = 0.806861786796458 | epot = -15.5998920041019 | etot = -14.6424332453906 +939000 ekin = 0.142948711632359 | erot = 0.836347883526831 | epot = -15.6217298406214 | etot = -14.6424332454622 +940000 ekin = 0.136274889171099 | erot = 0.861915676028948 | epot = -15.64062381073 | etot = -14.6424332455299 +941000 ekin = 0.130643703198872 | erot = 0.882459199120565 | epot = -15.6555361479082 | etot = -14.6424332455888 +942000 ekin = 0.126142088160694 | erot = 0.896989065172162 | epot = -15.6655643989671 | etot = -14.6424332456342 +943000 ekin = 0.122877886110172 | erot = 0.904700444358873 | epot = -15.6700115761318 | etot = -14.6424332456628 +944000 ekin = 0.120977407412063 | erot = 0.905030230236876 | epot = -15.6684408833212 | etot = -14.6424332456723 +945000 ekin = 0.120578563690669 | erot = 0.897699054745604 | epot = -15.6607108640983 | etot = -14.642433245662 +946000 ekin = 0.12182010359348 | erot = 0.882735070928404 | epot = -15.6469884201544 | etot = -14.6424332456325 +947000 ekin = 0.124827761129084 | erot = 0.86047793559626 | epot = -15.6277389423113 | etot = -14.642433245586 +948000 ekin = 0.129698334168674 | erot = 0.831563037037796 | epot = -15.6036946167321 | etot = -14.6424332455257 +949000 ekin = 0.13648285755817 | erot = 0.796887554722047 | epot = -15.5758036577362 | etot = -14.6424332454559 +950000 ekin = 0.14517013893121 | erot = 0.757561255988166 | epot = -15.545164640301 | etot = -14.6424332453816 +951000 ekin = 0.155672002995183 | erot = 0.71484591609363 | epot = -15.5129511643966 | etot = -14.6424332453078 +952000 ekin = 0.167811650836291 | erot = 0.670087833250127 | epot = -15.480332729326 | etot = -14.6424332452396 +953000 ekin = 0.181316579471303 | erot = 0.624648095211848 | epot = -15.4483979198644 | etot = -14.6424332451812 +954000 ekin = 0.195817500701208 | erot = 0.579835080695611 | epot = -15.4180858265331 | etot = -14.6424332451363 +955000 ekin = 0.21085460687672 | erot = 0.536843219768569 | epot = -15.3901310717525 | etot = -14.6424332451072 +956000 ekin = 0.225892299837344 | erot = 0.496701376791255 | epot = -15.3650269217236 | etot = -14.642433245095 +957000 ekin = 0.240343066498587 | erot = 0.460233438093626 | epot = -15.3430097496914 | etot = -14.6424332450992 +958000 ekin = 0.253600493839353 | erot = 0.428032849893872 | epot = -15.324066588851 | etot = -14.6424332451178 +959000 ekin = 0.265080433748287 | erot = 0.400452005458765 | epot = -15.3079656843544 | etot = -14.6424332451473 +960000 ekin = 0.274268068130606 | erot = 0.377606549449485 | epot = -15.2943078627635 | etot = -14.6424332451834 +961000 ekin = 0.280767178003658 | erot = 0.359393861249483 | epot = -15.2825942844742 | etot = -14.642433245221 +962000 ekin = 0.284346484063545 | erot = 0.345524198816493 | epot = -15.2723039281349 | etot = -14.6424332452549 +963000 ekin = 0.28497681608998 | erot = 0.33556223232907 | epot = -15.2629722936994 | etot = -14.6424332452804 +964000 ekin = 0.282852494248157 | erot = 0.328975986496775 | epot = -15.2542617260389 | etot = -14.642433245294 +965000 ekin = 0.278391086615737 | erot = 0.325189577598745 | epot = -15.2460139095084 | etot = -14.6424332452939 +966000 ekin = 0.272207924679743 | erot = 0.323635640150781 | epot = -15.2382768101107 | etot = -14.6424332452802 +967000 ekin = 0.265065367870864 | erot = 0.323803079987444 | epot = -15.2313016931133 | etot = -14.642433245255 +968000 ekin = 0.25780129371415 | erot = 0.325275872290811 | epot = -15.2255104112269 | etot = -14.6424332452219 +969000 ekin = 0.251245661474385 | erot = 0.327759142576306 | epot = -15.2214380492365 | etot = -14.6424332451859 +970000 ekin = 0.246137008993216 | erot = 0.331089781181249 | epot = -15.2196600353262 | etot = -14.6424332451517 +971000 ekin = 0.243051319616145 | erot = 0.33523032566537 | epot = -15.2207148904055 | etot = -14.642433245124 +972000 ekin = 0.242353409638764 | erot = 0.340246678804933 | epot = -15.2250333335501 | etot = -14.6424332451064 +973000 ekin = 0.244176338162503 | erot = 0.346272190710957 | epot = -15.2328817739746 | etot = -14.6424332451011 +974000 ekin = 0.248428661658007 | erot = 0.353462430362089 | epot = -15.2443243371296 | etot = -14.6424332451095 +975000 ekin = 0.254824314802991 | erot = 0.361946299430811 | epot = -15.2592038593653 | etot = -14.6424332451315 +976000 ekin = 0.262926848820441 | erot = 0.371779749930123 | epot = -15.277139843917 | etot = -14.6424332451665 +977000 ekin = 0.272199235330791 | erot = 0.382908123264411 | epot = -15.2975406038079 | etot = -14.6424332452127 +978000 ekin = 0.282052066851645 | erot = 0.395142048097818 | epot = -15.3196273602177 | etot = -14.6424332452682 +979000 ekin = 0.291885751913936 | erot = 0.408150081471835 | epot = -15.3424690787158 | etot = -14.6424332453301 +980000 ekin = 0.301125083789936 | erot = 0.421469125223117 | epot = -15.365027454408 | etot = -14.642433245395 +981000 ekin = 0.309246535917406 | erot = 0.434531423656849 | epot = -15.3862112050333 | etot = -14.642433245459 +982000 ekin = 0.315799497490907 | erot = 0.446704965617073 | epot = -15.4049377086261 | etot = -14.6424332455181 +983000 ekin = 0.320422573221183 | erot = 0.457342632744156 | epot = -15.4201984515336 | etot = -14.6424332455683 +984000 ekin = 0.322855465258642 | erot = 0.465834622599602 | epot = -15.431123333464 | etot = -14.6424332456058 +985000 ekin = 0.322946302475343 | erot = 0.471658590974231 | epot = -15.4370381390774 | etot = -14.6424332456279 +986000 ekin = 0.320653917805922 | erot = 0.474422556590712 | epot = -15.4375097200295 | etot = -14.6424332456328 +987000 ekin = 0.316044627362369 | erot = 0.473896755515841 | epot = -15.4323746284984 | etot = -14.6424332456202 +988000 ekin = 0.309283477268975 | erot = 0.470032116945433 | epot = -15.421748839805 | etot = -14.6424332455906 +989000 ekin = 0.300620522169441 | erot = 0.462964620622199 | epot = -15.4060183883375 | etot = -14.6424332455459 +990000 ekin = 0.290373280691476 | erot = 0.45300626299518 | epot = -15.3858127891754 | etot = -14.6424332454887 +991000 ekin = 0.278906915705959 | erot = 0.440624526219509 | epot = -15.3619646873478 | etot = -14.6424332454224 +992000 ekin = 0.266613826415441 | erot = 0.426413006891514 | epot = -15.3354600786573 | etot = -14.6424332453503 +993000 ekin = 0.253894212446822 | erot = 0.411056197524864 | epot = -15.3073836552479 | etot = -14.6424332452762 +994000 ekin = 0.241138837000364 | erot = 0.395291372388786 | epot = -15.2788634545923 | etot = -14.6424332452032 +995000 ekin = 0.228714768907212 | erot = 0.379870207855612 | epot = -15.2510182218971 | etot = -14.6424332451343 +996000 ekin = 0.2169544174706 | erot = 0.365522282707863 | epot = -15.2249099452504 | etot = -14.642433245072 +997000 ekin = 0.206147766456188 | erot = 0.352922066139109 | epot = -15.2015030776136 | etot = -14.6424332450183 +998000 ekin = 0.196537413157987 | erot = 0.342660495991805 | epot = -15.1816311541246 | etot = -14.6424332449748 +999000 ekin = 0.188315843913178 | erot = 0.335221830006205 | epot = -15.1659709188618 | etot = -14.6424332449424 +1000000 ekin = 0.181624323067817 | erot = 0.330966139649826 | epot = -15.1550237076397 | etot = -14.642433244922 + 1000000 0.013453654 -1.5270261 0.011523695 -1.4973399 -8.4815516e-05 +Loop time of 29.1595 on 4 procs for 1000000 steps with 10 atoms + +Performance: 29630.171 tau/day, 34294.179 timesteps/s +96.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.8549 | 9.7585 | 17.369 | 226.0 | 33.47 +Bond | 0.12382 | 0.38401 | 0.60938 | 32.9 | 1.32 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 2.9104 | 3.7862 | 4.6404 | 31.7 | 12.98 +Output | 2e-05 | 2.775e-05 | 3.1e-05 | 0.0 | 0.00 +Modify | 0.27411 | 1.1629 | 1.994 | 64.7 | 3.99 +Other | | 14.07 | | | 48.24 + +Nlocal: 2.5 ave 5 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 7.5 ave 10 max 5 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 17.5 ave 33 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 + +Total # of neighbors = 70 +Ave neighs/atom = 7 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:29 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 deleted file mode 100644 index abbd917f05..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.1 +++ /dev/null @@ -1,172 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 2.859 | 2.859 | 2.859 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4711818 0.0069384985 -1.4642433 -6.2745089e-05 -1000 ekin = 0.00113448721737003 | erot = 0.00413455947734281 | epot = -14.6477022915193 | etot = -14.6424332448246 -2000 ekin = 0.00449927223902336 | erot = 0.0164446434455805 | epot = -14.6633771605337 | etot = -14.6424332448491 -3000 ekin = 0.00997964450841065 | erot = 0.0366523356056461 | epot = -14.6890652250033 | etot = -14.6424332448892 -4000 ekin = 0.0173888111295073 | erot = 0.0643039804300221 | epot = -14.7241260365031 | etot = -14.6424332449436 -5000 ekin = 0.0264744514136619 | erot = 0.0987844033142066 | epot = -14.7676920997383 | etot = -14.6424332450104 -6000 ekin = 0.0369277948556079 | erot = 0.139336571052565 | epot = -14.8186976109956 | etot = -14.6424332450875 -7000 ekin = 0.04839505571915 | erot = 0.18508629569208 | epot = -14.8759145965832 | etot = -14.642433245172 -8000 ekin = 0.0604909336920643 | erot = 0.23507130752353 | epot = -14.9379954864767 | etot = -14.6424332452611 -9000 ekin = 0.0728137406440561 | erot = 0.288273694501537 | epot = -15.003520680497 | etot = -14.6424332453514 -10000 ekin = 0.0849615563085879 | erot = 0.343654369293472 | epot = -15.0710491710418 | etot = -14.6424332454398 - 10000 0.0062934486 -1.5138305 0.0067255788 -1.4986088 -9.9021593e-05 -Loop time of 0.141929 on 1 procs for 10000 steps with 10 atoms - -Performance: 60875.649 tau/day, 70457.927 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.11467 | 0.11467 | 0.11467 | 0.0 | 80.79 -Bond | 0.0050094 | 0.0050094 | 0.0050094 | 0.0 | 3.53 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0013616 | 0.0013616 | 0.0013616 | 0.0 | 0.96 -Output | 4.0531e-06 | 4.0531e-06 | 4.0531e-06 | 0.0 | 0.00 -Modify | 0.017901 | 0.017901 | 0.017901 | 0.0 | 12.61 -Other | | 0.002982 | | | 2.10 - -Nlocal: 10 ave 10 max 10 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 43 ave 43 max 43 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 43 -Ave neighs/atom = 4.3 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 deleted file mode 100644 index 78712bf913..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex1/log.27Nov18.duplex1.g++.4 +++ /dev/null @@ -1,172 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.341 | 7.523 | 7.705 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4711818 0.0069384985 -1.4642433 -6.2745089e-05 -1000 ekin = 0.00113448721737009 | erot = 0.0041345594773427 | epot = -14.6477022915193 | etot = -14.6424332448246 -2000 ekin = 0.00449927223902292 | erot = 0.0164446434455803 | epot = -14.6633771605337 | etot = -14.6424332448491 -3000 ekin = 0.00997964450840756 | erot = 0.0366523356056465 | epot = -14.6890652250033 | etot = -14.6424332448892 -4000 ekin = 0.017388811129498 | erot = 0.0643039804300254 | epot = -14.7241260365031 | etot = -14.6424332449436 -5000 ekin = 0.0264744514136422 | erot = 0.098784403314214 | epot = -14.7676920997383 | etot = -14.6424332450104 -6000 ekin = 0.0369277948555727 | erot = 0.139336571052581 | epot = -14.8186976109956 | etot = -14.6424332450875 -7000 ekin = 0.0483950557190949 | erot = 0.185086295692111 | epot = -14.8759145965832 | etot = -14.642433245172 -8000 ekin = 0.0604909336919856 | erot = 0.235071307523583 | epot = -14.9379954864767 | etot = -14.6424332452611 -9000 ekin = 0.0728137406439517 | erot = 0.288273694501617 | epot = -15.003520680497 | etot = -14.6424332453514 -10000 ekin = 0.0849615563084573 | erot = 0.34365436929359 | epot = -15.0710491710418 | etot = -14.6424332454398 - 10000 0.0062934486 -1.5138305 0.0067255788 -1.4986088 -0.00010196899 -Loop time of 0.134536 on 4 procs for 10000 steps with 10 atoms - -Performance: 64220.659 tau/day, 74329.466 timesteps/s -97.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0030077 | 0.052212 | 0.093066 | 17.4 | 38.81 -Bond | 0.00061846 | 0.00234 | 0.0039451 | 2.8 | 1.74 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013431 | 0.014091 | 0.014596 | 0.4 | 10.47 -Output | 5.0783e-05 | 5.1141e-05 | 5.1498e-05 | 0.0 | 0.04 -Modify | 0.0011578 | 0.0059478 | 0.010331 | 4.8 | 4.42 -Other | | 0.05989 | | | 44.52 - -Nlocal: 2.5 ave 5 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Nghost: 7.5 ave 10 max 5 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Neighs: 17.5 ave 33 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 - -Total # of neighbors = 70 -Ave neighs/atom = 7 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/data.duplex2 b/examples/USER/cgdna/examples/oxDNA/duplex2/data.duplex2 index 6547def910..72872d431a 100644 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/data.duplex2 +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/data.duplex2 @@ -38,7 +38,7 @@ Atoms 15 3 4.860249842674773e-01 3.518234140414733e-01 3.897628551303119e-01 2 1 1 16 4 5.999999999999995e-01 -3.330669073875470e-17 -3.330669073875470e-16 2 1 1 -# Atom-ID, translational, rotational velocity +# Atom-ID, translational velocity, angular momentum Velocities 1 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 b/examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 index a5a09af9f4..d80e7bbc0e 100644 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/in.duplex2 @@ -1,6 +1,7 @@ variable number equal 2 variable ofreq equal 1000 variable efreq equal 1000 +variable T equal 0.1 units lj @@ -30,7 +31,7 @@ bond_coeff * 2.0 0.25 0.7525 # oxDNA pair interactions pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqav ${T} 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 @@ -39,9 +40,9 @@ pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1 # NVE ensemble #fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 #fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 timestep 1e-5 @@ -72,6 +73,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 10000 +run 1000000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.18Jun19.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.18Jun19.duplex2.g++.1 new file mode 100644 index 0000000000..29eaec2dab --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/log.18Jun19.duplex2.g++.1 @@ -0,0 +1,1167 @@ +LAMMPS (18 Jun 2019) +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000135 secs + read_data CPU = 0.002118 secs + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav ${T} 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqav 0.1 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 2.861 | 2.861 | 2.861 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5402493 0.0070469125 -1.5332024 6.0760034e-06 +1000 ekin = 1.54234964773389 | erot = 1.71563526070267 | epot = -24.5477045187653 | etot = -21.2897196103287 +2000 ekin = 1.85988866919215 | erot = 1.9424302796508 | epot = -24.4843044999595 | etot = -20.6819855511165 +3000 ekin = 2.68354339452998 | erot = 2.14216528317607 | epot = -24.4019350693561 | etot = -19.57622639165 +4000 ekin = 2.04461800191989 | erot = 1.49015219763161 | epot = -24.2959428773347 | etot = -20.7611726777832 +5000 ekin = 1.76794859210155 | erot = 2.54289684465819 | epot = -24.2337587736863 | etot = -19.9229133369266 +6000 ekin = 3.1106424806079 | erot = 2.04409805200893 | epot = -24.1585729744133 | etot = -19.0038324417964 +7000 ekin = 3.21360097519306 | erot = 2.71941303605722 | epot = -24.0566262531609 | etot = -18.1236122419107 +8000 ekin = 2.82489935901743 | erot = 2.66790555575695 | epot = -24.0194805097633 | etot = -18.526675594989 +9000 ekin = 2.69381302856378 | erot = 2.59107820129446 | epot = -23.9216126050554 | etot = -18.6367213751972 +10000 ekin = 2.65765007662471 | erot = 1.95562671446597 | epot = -23.7978334881241 | etot = -19.1845566970334 +11000 ekin = 2.33860420545645 | erot = 2.067780391377 | epot = -23.6589739475584 | etot = -19.2525893507249 +12000 ekin = 2.71377849618258 | erot = 2.08757199120023 | epot = -23.5483571834756 | etot = -18.7470066960928 +13000 ekin = 2.62930153930326 | erot = 2.36926332727578 | epot = -23.4509629615768 | etot = -18.4523980949977 +14000 ekin = 3.08200416316113 | erot = 2.52340746291244 | epot = -23.3378147651053 | etot = -17.7324031390317 +15000 ekin = 2.98008664779269 | erot = 1.871644860882 | epot = -23.1940665570191 | etot = -18.3423350483444 +16000 ekin = 2.18422481774796 | erot = 2.13029325858584 | epot = -23.0709946755646 | etot = -18.7564765992308 +17000 ekin = 1.86029951221073 | erot = 2.30856215831156 | epot = -22.9148241979648 | etot = -18.7459625274425 +18000 ekin = 2.26757205264074 | erot = 1.23282183419698 | epot = -22.7667657090377 | etot = -19.2663718222 +19000 ekin = 2.39717301992408 | erot = 2.43814713185077 | epot = -22.6249045514987 | etot = -17.7895843997239 +20000 ekin = 2.4972090427325 | erot = 2.14695469209109 | epot = -22.4687873897505 | etot = -17.824623654927 +21000 ekin = 2.97591775854817 | erot = 2.40996811711195 | epot = -22.580475447988 | etot = -17.1945895723278 +22000 ekin = 3.04727168578733 | erot = 1.83825256427932 | epot = -22.6695853833015 | etot = -17.7840611332348 +23000 ekin = 2.64835731773193 | erot = 2.22162785501705 | epot = -22.6565689169972 | etot = -17.7865837442483 +24000 ekin = 2.64866576787001 | erot = 2.80157082833922 | epot = -22.6222797420052 | etot = -17.172043145796 +25000 ekin = 2.29527970143855 | erot = 2.22049811939069 | epot = -22.6228421013006 | etot = -18.1070642804714 +26000 ekin = 1.6242512251805 | erot = 2.52390475262917 | epot = -22.6746055892862 | etot = -18.5264496114765 +27000 ekin = 1.74746467550781 | erot = 3.7138606202505 | epot = -22.7150312690973 | etot = -17.253705973339 +28000 ekin = 2.26500128280479 | erot = 2.34791343563183 | epot = -22.7926648585827 | etot = -18.179750140146 +29000 ekin = 2.04774074424512 | erot = 1.86347261547111 | epot = -22.8081204933408 | etot = -18.8969071336246 +30000 ekin = 2.41140146125466 | erot = 1.86296915421469 | epot = -22.7764612164305 | etot = -18.5020906009612 +31000 ekin = 2.76447800297261 | erot = 2.7393253404681 | epot = -22.7808698156252 | etot = -17.2770664721845 +32000 ekin = 2.08103539953574 | erot = 2.81216171106146 | epot = -22.8081908465747 | etot = -17.9149937359775 +33000 ekin = 2.08672340074227 | erot = 3.65510023442519 | epot = -22.7575363468642 | etot = -17.0157127116967 +34000 ekin = 2.34180742039869 | erot = 3.10027175201874 | epot = -22.6657421559553 | etot = -17.2236629835378 +35000 ekin = 2.32430602395272 | erot = 2.01607522370048 | epot = -22.5813705492547 | etot = -18.2409893016015 +36000 ekin = 1.91917507775106 | erot = 1.97289747304336 | epot = -22.481118994336 | etot = -18.5890464435416 +37000 ekin = 1.57560528527468 | erot = 2.63029511887642 | epot = -22.4456699464305 | etot = -18.2397695422794 +38000 ekin = 2.20652731867584 | erot = 2.89671984141264 | epot = -22.3965902387972 | etot = -17.2933430787087 +39000 ekin = 2.54765822667968 | erot = 2.47352619735437 | epot = -22.3525131983352 | etot = -17.3313287743012 +40000 ekin = 2.24172560748699 | erot = 1.87314319107769 | epot = -22.3791956830638 | etot = -18.2643268844991 +41000 ekin = 2.45176361826215 | erot = 2.49992612251747 | epot = -22.4441192111887 | etot = -17.492429470409 +42000 ekin = 2.68254780786499 | erot = 2.04382131696989 | epot = -22.4352265851614 | etot = -17.7088574603266 +43000 ekin = 2.39383336858508 | erot = 1.66587291396325 | epot = -22.4337243898148 | etot = -18.3740181072664 +44000 ekin = 2.30758870966958 | erot = 2.39381816537748 | epot = -22.4636201484766 | etot = -17.7622132734295 +45000 ekin = 1.84308929771583 | erot = 2.25880380151546 | epot = -22.5697712917435 | etot = -18.4678781925122 +46000 ekin = 1.98608215049724 | erot = 3.02136983211363 | epot = -22.5606085774834 | etot = -17.5531565948725 +47000 ekin = 1.31457586857024 | erot = 1.99780932836913 | epot = -22.5522289127255 | etot = -19.2398437157862 +48000 ekin = 2.59855199680394 | erot = 1.90772345027383 | epot = -22.5972680906756 | etot = -18.0909926435978 +49000 ekin = 2.32140483916261 | erot = 2.72932938830521 | epot = -22.6070371995253 | etot = -17.5563029720575 +50000 ekin = 2.48248035385828 | erot = 3.42713570109107 | epot = -22.5294064222472 | etot = -16.6197903672979 +51000 ekin = 2.73677705777971 | erot = 1.43285265191038 | epot = -22.4272695862992 | etot = -18.2576398766091 +52000 ekin = 3.03746109762767 | erot = 1.97878223690383 | epot = -22.4105817052324 | etot = -17.3943383707009 +53000 ekin = 2.4689045601064 | erot = 4.26434186327668 | epot = -22.4059567857723 | etot = -15.6727103623892 +54000 ekin = 2.48025904071626 | erot = 2.36957879662632 | epot = -22.4049729842648 | etot = -17.5551351469222 +55000 ekin = 2.28269445417385 | erot = 1.92149293107792 | epot = -22.4643082993723 | etot = -18.2601209141205 +56000 ekin = 2.36225428889468 | erot = 2.21818002425493 | epot = -22.5516502452859 | etot = -17.9712159321363 +57000 ekin = 2.5222034650231 | erot = 2.87044520913643 | epot = -22.6517599833465 | etot = -17.259111309187 +58000 ekin = 2.50677816066749 | erot = 2.80087142998998 | epot = -22.7046490897181 | etot = -17.3969994990606 +59000 ekin = 2.7442153349817 | erot = 2.17375311266844 | epot = -22.7630968852437 | etot = -17.8451284375935 +60000 ekin = 3.28881699963202 | erot = 1.98491245229834 | epot = -22.7493813857704 | etot = -17.47565193384 +61000 ekin = 2.42749732003947 | erot = 1.80500042748845 | epot = -22.6954080097403 | etot = -18.4629102622124 +62000 ekin = 2.82051548232979 | erot = 1.69220614985812 | epot = -22.5840860651657 | etot = -18.0713644329778 +63000 ekin = 3.66818847100113 | erot = 1.91510536540651 | epot = -22.4235299160084 | etot = -16.8402360796008 +64000 ekin = 3.60192162647095 | erot = 3.02302140162941 | epot = -22.4028966408394 | etot = -15.777953612739 +65000 ekin = 3.37797300912952 | erot = 3.90646944425564 | epot = -22.3508227873685 | etot = -15.0663803339833 +66000 ekin = 2.90796062513305 | erot = 2.46538835419998 | epot = -22.2656130116827 | etot = -16.8922640323497 +67000 ekin = 2.57641483706472 | erot = 2.1063925708314 | epot = -22.1586423836372 | etot = -17.4758349757411 +68000 ekin = 2.5516902727465 | erot = 2.46870040285813 | epot = -22.1454741588102 | etot = -17.1250834832056 +69000 ekin = 2.42897294997603 | erot = 2.86774435615082 | epot = -22.1788582092806 | etot = -16.8821409031537 +70000 ekin = 3.08406596014674 | erot = 2.51171720098584 | epot = -22.2680651617951 | etot = -16.6722820006626 +71000 ekin = 2.55052721315253 | erot = 2.49486492124423 | epot = -22.3940848075589 | etot = -17.3486926731621 +72000 ekin = 1.77666138705941 | erot = 2.52301579845699 | epot = -22.4956655989824 | etot = -18.195988413466 +73000 ekin = 1.86857924146303 | erot = 2.33110810852355 | epot = -22.5401005215029 | etot = -18.3404131715163 +74000 ekin = 3.14875320805144 | erot = 2.12002807961601 | epot = -22.5354282257998 | etot = -17.2666469381323 +75000 ekin = 2.60566180511119 | erot = 2.16421143606062 | epot = -22.5109742574449 | etot = -17.7411010162731 +76000 ekin = 1.94500512300058 | erot = 1.94681992806367 | epot = -22.5134561384461 | etot = -18.6216310873819 +77000 ekin = 2.09005510206219 | erot = 2.13354294429721 | epot = -22.5157248384152 | etot = -18.2921267920558 +78000 ekin = 2.48381695181472 | erot = 2.49598603867482 | epot = -22.449809286019 | etot = -17.4700062955295 +79000 ekin = 3.09582217320064 | erot = 2.46630074007712 | epot = -22.3464652405845 | etot = -16.7843423273068 +80000 ekin = 2.51380629427529 | erot = 1.89207626467031 | epot = -22.2775752521275 | etot = -17.8716926931819 +81000 ekin = 2.32322780911516 | erot = 2.24954513249787 | epot = -22.2655235360186 | etot = -17.6927505944055 +82000 ekin = 1.54779729878415 | erot = 2.01487148845307 | epot = -22.2126473128098 | etot = -18.6499785255726 +83000 ekin = 2.24267653112482 | erot = 3.34721522119025 | epot = -22.2063282117648 | etot = -16.6164364594498 +84000 ekin = 2.86948852339533 | erot = 2.11915315181827 | epot = -22.2055386975617 | etot = -17.2168970223481 +85000 ekin = 3.13802387827786 | erot = 2.93900498543376 | epot = -22.2240733080824 | etot = -16.1470444443708 +86000 ekin = 3.46160079449538 | erot = 2.80798287444336 | epot = -22.2732645073155 | etot = -16.0036808383767 +87000 ekin = 3.63139446909085 | erot = 2.3166794204513 | epot = -22.2567856660101 | etot = -16.308711776468 +88000 ekin = 3.15348314879937 | erot = 2.2785763709033 | epot = -22.2154422326699 | etot = -16.7833827129672 +89000 ekin = 3.30271147105659 | erot = 1.80791256125564 | epot = -22.1564153597823 | etot = -17.04579132747 +90000 ekin = 2.42655906518194 | erot = 2.24507038389518 | epot = -21.9481188512569 | etot = -17.2764894021798 +91000 ekin = 1.89051217909395 | erot = 2.51049066719493 | epot = -21.7877769537306 | etot = -17.3867741074417 +92000 ekin = 2.07833668466679 | erot = 2.218324246302 | epot = -21.6997103074282 | etot = -17.4030493764594 +93000 ekin = 1.94321435585196 | erot = 2.99473985773914 | epot = -21.6748650469777 | etot = -16.7369108333866 +94000 ekin = 2.07878576812463 | erot = 3.37631892101902 | epot = -21.7659932416399 | etot = -16.3108885524963 +95000 ekin = 2.10517721407769 | erot = 2.08345895044788 | epot = -21.8951718799354 | etot = -17.7065357154098 +96000 ekin = 2.68821593238919 | erot = 1.86988637992409 | epot = -21.9622848400866 | etot = -17.4041825277733 +97000 ekin = 1.95061152706206 | erot = 2.81054215683073 | epot = -22.0229813258884 | etot = -17.2618276419957 +98000 ekin = 1.98463063611221 | erot = 2.05732763357977 | epot = -22.0930102039112 | etot = -18.0510519342192 +99000 ekin = 2.51292852217217 | erot = 3.54194472638845 | epot = -22.199088757298 | etot = -16.1442155087374 +100000 ekin = 1.8757570387949 | erot = 2.3690785580876 | epot = -22.348409587438 | etot = -18.1035739905555 +101000 ekin = 1.66160772204006 | erot = 3.59766032223856 | epot = -22.3604908173889 | etot = -17.1012227731103 +102000 ekin = 1.62075182718474 | erot = 3.3442006848817 | epot = -22.3063629504087 | etot = -17.3414104383422 +103000 ekin = 2.00871148652538 | erot = 2.33677124900284 | epot = -22.275557852692 | etot = -17.9300751171637 +104000 ekin = 2.04513709976292 | erot = 2.74664593650967 | epot = -22.2818713634637 | etot = -17.4900883271911 +105000 ekin = 1.87027868596139 | erot = 1.98922389218239 | epot = -22.223503909299 | etot = -18.3640013311552 +106000 ekin = 1.71540784443942 | erot = 1.9177953110688 | epot = -22.2562839843324 | etot = -18.6230808288242 +107000 ekin = 2.61024905591622 | erot = 1.57446439985464 | epot = -22.3171357124015 | etot = -18.1324222566306 +108000 ekin = 2.13751756724178 | erot = 2.18822458113098 | epot = -22.2268794585969 | etot = -17.9011373102241 +109000 ekin = 2.24408198608307 | erot = 2.11438299352724 | epot = -22.076564108576 | etot = -17.7180991289657 +110000 ekin = 1.66706562020821 | erot = 2.50986066169373 | epot = -22.0833343008135 | etot = -17.9064080189116 +111000 ekin = 2.30463895640872 | erot = 2.24982560856989 | epot = -22.0940837732696 | etot = -17.539619208291 +112000 ekin = 2.63019524472749 | erot = 2.43696110420532 | epot = -22.0953344558745 | etot = -17.0281781069417 +113000 ekin = 2.42282638113981 | erot = 3.06190927482913 | epot = -22.1061661458173 | etot = -16.6214304898484 +114000 ekin = 2.34214572325658 | erot = 2.31899235523686 | epot = -22.0941430549288 | etot = -17.4330049764353 +115000 ekin = 1.70336449422736 | erot = 3.10166879044198 | epot = -22.1252095896431 | etot = -17.3201763049738 +116000 ekin = 1.51705870113214 | erot = 2.21425252709695 | epot = -22.1823772627204 | etot = -18.4510660344913 +117000 ekin = 1.70129809180508 | erot = 2.34142425076372 | epot = -22.2067668262467 | etot = -18.1640444836779 +118000 ekin = 2.20482827236051 | erot = 2.3179714809504 | epot = -22.1855414590757 | etot = -17.6627417057647 +119000 ekin = 2.54272629601484 | erot = 2.46528921750297 | epot = -22.2113175246519 | etot = -17.2033020111341 +120000 ekin = 1.76640390552554 | erot = 2.16116304616032 | epot = -22.1536331723646 | etot = -18.2260662206787 +121000 ekin = 2.81281157959688 | erot = 2.31761005518346 | epot = -22.1492969323239 | etot = -17.0188752975435 +122000 ekin = 3.25156823587966 | erot = 3.31679050874322 | epot = -22.2050361016166 | etot = -15.6366773569938 +123000 ekin = 2.87462309654081 | erot = 3.25604816714397 | epot = -22.1785374359393 | etot = -16.0478661722546 +124000 ekin = 2.18213410260632 | erot = 2.77182209342785 | epot = -22.0161464482698 | etot = -17.0621902522356 +125000 ekin = 1.85317252616068 | erot = 1.36623599567638 | epot = -21.8721650279344 | etot = -18.6527565060973 +126000 ekin = 2.47747071965844 | erot = 3.09909384826334 | epot = -21.8840309142636 | etot = -16.3074663463419 +127000 ekin = 2.42177426273027 | erot = 2.35209644429656 | epot = -21.8861939604609 | etot = -17.1123232534341 +128000 ekin = 2.76000040231245 | erot = 1.8231678837239 | epot = -21.8538456680958 | etot = -17.2706773820595 +129000 ekin = 2.78355536315491 | erot = 2.88851981621501 | epot = -21.9251039267855 | etot = -16.2530287474156 +130000 ekin = 3.26834278926799 | erot = 2.56228354573336 | epot = -22.0546105678549 | etot = -16.2239842328536 +131000 ekin = 2.64714688907849 | erot = 2.51107513446137 | epot = -22.0961160192681 | etot = -16.9378939957282 +132000 ekin = 2.61847248883524 | erot = 3.38899164334156 | epot = -22.1218916777659 | etot = -16.1144275455891 +133000 ekin = 2.03408861514006 | erot = 2.87401070790187 | epot = -22.0785989417621 | etot = -17.1704996187202 +134000 ekin = 1.64140897264888 | erot = 1.66986416585675 | epot = -22.0323643102285 | etot = -18.7210911717228 +135000 ekin = 2.46650096367446 | erot = 2.111120611107 | epot = -21.9976572593399 | etot = -17.4200356845585 +136000 ekin = 2.32880805911731 | erot = 3.05940125193231 | epot = -21.8983392007847 | etot = -16.5101298897351 +137000 ekin = 2.7601019905106 | erot = 2.47443779429795 | epot = -21.752125264204 | etot = -16.5175854793954 +138000 ekin = 3.30162084678948 | erot = 1.73084735415554 | epot = -21.7423849642075 | etot = -16.7099167632625 +139000 ekin = 2.76669064053124 | erot = 1.72642745910431 | epot = -21.8898577306654 | etot = -17.3967396310298 +140000 ekin = 2.73595287215366 | erot = 2.46891829250481 | epot = -21.9884857831833 | etot = -16.7836146185249 +141000 ekin = 2.79316289615844 | erot = 2.46753088695597 | epot = -22.0064855648443 | etot = -16.7457917817299 +142000 ekin = 3.51694745558129 | erot = 3.49862438784827 | epot = -21.9623193335451 | etot = -14.9467474901156 +143000 ekin = 2.58689934548697 | erot = 2.04008576044027 | epot = -21.9563338194557 | etot = -17.3293487135285 +144000 ekin = 3.72611917000993 | erot = 3.04855733322793 | epot = -21.9536376487796 | etot = -15.1789611455417 +145000 ekin = 3.61191106831147 | erot = 2.71915407989904 | epot = -21.870542665333 | etot = -15.5394775171225 +146000 ekin = 3.85060594912677 | erot = 2.47210219931339 | epot = -21.8285858153921 | etot = -15.505877666952 +147000 ekin = 3.26481933196161 | erot = 2.06864347299802 | epot = -21.6752809049183 | etot = -16.3418180999587 +148000 ekin = 2.47977997895053 | erot = 1.65169267241014 | epot = -21.4172781734276 | etot = -17.2858055220669 +149000 ekin = 2.70771685463074 | erot = 2.28028425953227 | epot = -21.2324293178539 | etot = -16.2444282036909 +150000 ekin = 2.60726181496431 | erot = 2.88955230103659 | epot = -21.126549406853 | etot = -15.6297352908521 +151000 ekin = 2.06865005733849 | erot = 2.13537039813292 | epot = -21.0304193709383 | etot = -16.8263989154669 +152000 ekin = 2.41210154812787 | erot = 2.60104053370075 | epot = -20.8967777045302 | etot = -15.8836356227016 +153000 ekin = 2.12406231442824 | erot = 2.25444655142795 | epot = -20.9199278716094 | etot = -16.5414190057532 +154000 ekin = 2.34622678455546 | erot = 2.58439374093403 | epot = -21.0040588663533 | etot = -16.0734383408638 +155000 ekin = 2.08240965570452 | erot = 3.02621505767145 | epot = -21.0204738431416 | etot = -15.9118491297656 +156000 ekin = 2.04576145796301 | erot = 3.17151405834467 | epot = -20.8558463949479 | etot = -15.6385708786402 +157000 ekin = 2.36459548410747 | erot = 1.89207417055424 | epot = -20.8025485082277 | etot = -16.545878853566 +158000 ekin = 2.16996178916575 | erot = 2.46547727482113 | epot = -20.8673070433024 | etot = -16.2318679793155 +159000 ekin = 2.86272730849306 | erot = 2.27590841865057 | epot = -20.9710387207245 | etot = -15.8324029935809 +160000 ekin = 2.19288173853782 | erot = 2.36312829884111 | epot = -21.0403123366075 | etot = -16.4843022992286 +161000 ekin = 2.14059248149909 | erot = 2.4287283799048 | epot = -21.1333683100403 | etot = -16.5640474486365 +162000 ekin = 1.76077466564934 | erot = 2.66561836368342 | epot = -21.1782130850259 | etot = -16.7518200556931 +163000 ekin = 2.23068698955417 | erot = 2.02664945757243 | epot = -21.3281780197228 | etot = -17.0708415725963 +164000 ekin = 2.75358320318999 | erot = 1.43717365990088 | epot = -21.4675480212853 | etot = -17.2767911581945 +165000 ekin = 2.65171600986478 | erot = 2.29632253260765 | epot = -21.493178025826 | etot = -16.5451394833536 +166000 ekin = 3.27298673277591 | erot = 2.41252396730596 | epot = -21.4477711984927 | etot = -15.7622604984108 +167000 ekin = 3.02574105268454 | erot = 2.02770436019795 | epot = -21.5236773217566 | etot = -16.4702319088741 +168000 ekin = 3.14659813654158 | erot = 1.8374607941321 | epot = -21.5547269116736 | etot = -16.5706679809999 +169000 ekin = 2.22493755697302 | erot = 2.67175500860652 | epot = -21.4662206077311 | etot = -16.5695280421515 +170000 ekin = 2.41921977325643 | erot = 2.49142716001801 | epot = -21.3123035293873 | etot = -16.4016565961128 +171000 ekin = 1.89798915040775 | erot = 2.39492100285877 | epot = -21.2153991969519 | etot = -16.9224890436853 +172000 ekin = 2.86894215563086 | erot = 3.22914449693158 | epot = -21.1827352206441 | etot = -15.0846485680816 +173000 ekin = 2.74888252418688 | erot = 2.13556434483052 | epot = -21.2166792789418 | etot = -16.3322324099244 +174000 ekin = 2.45887587066864 | erot = 2.23682521338056 | epot = -21.2633056658561 | etot = -16.5676045818069 +175000 ekin = 2.84703517745999 | erot = 2.39381254916381 | epot = -21.2430876358358 | etot = -16.002239909212 +176000 ekin = 2.14025231000119 | erot = 1.89894722702466 | epot = -21.3238321496633 | etot = -17.2846326126375 +177000 ekin = 2.5795061901144 | erot = 2.75365074391219 | epot = -21.3022195274207 | etot = -15.9690625933941 +178000 ekin = 1.83122028490793 | erot = 2.59468068841507 | epot = -21.2483113201278 | etot = -16.8224103468048 +179000 ekin = 2.50706581632049 | erot = 2.3918046623687 | epot = -21.3152464598324 | etot = -16.4163759811432 +180000 ekin = 1.88211034410738 | erot = 2.47063835849692 | epot = -21.4741119346399 | etot = -17.1213632320356 +181000 ekin = 1.74209654097779 | erot = 3.05723824722444 | epot = -21.4808621715442 | etot = -16.681527383342 +182000 ekin = 1.55789914013104 | erot = 2.05767448814763 | epot = -21.423526482018 | etot = -17.8079528537394 +183000 ekin = 2.00937540548925 | erot = 2.80898978674436 | epot = -21.491360735728 | etot = -16.6729955434944 +184000 ekin = 2.69285960778353 | erot = 2.42969439668747 | epot = -21.6024209898208 | etot = -16.4798669853498 +185000 ekin = 3.01326925127938 | erot = 3.19083239326424 | epot = -21.6730258967931 | etot = -15.4689242522495 +186000 ekin = 3.2083067153638 | erot = 2.42899016869201 | epot = -21.7143665695974 | etot = -16.0770696855416 +187000 ekin = 2.672906100919 | erot = 3.41560404715603 | epot = -21.6726605039613 | etot = -15.5841503558862 +188000 ekin = 2.89349337388582 | erot = 3.06258669113775 | epot = -21.6216664732832 | etot = -15.6655864082597 +189000 ekin = 2.65435973176118 | erot = 1.82043381700644 | epot = -21.5604872976485 | etot = -17.0856937488809 +190000 ekin = 2.21855159698309 | erot = 1.84826944038784 | epot = -21.5263477340278 | etot = -17.4595266966569 +191000 ekin = 2.26980616064111 | erot = 2.05944589507645 | epot = -21.4543005141097 | etot = -17.1250484583921 +192000 ekin = 2.27219103053707 | erot = 3.11210788791052 | epot = -21.4899273087562 | etot = -16.1056283903086 +193000 ekin = 1.95008147026928 | erot = 1.89648921534019 | epot = -21.4843079374128 | etot = -17.6377372518033 +194000 ekin = 2.45477671526091 | erot = 2.0272304242676 | epot = -21.3709228769337 | etot = -16.8889157374052 +195000 ekin = 3.09567411006595 | erot = 2.10081767143638 | epot = -21.3012041149762 | etot = -16.1047123334739 +196000 ekin = 2.67423122149492 | erot = 2.50738189755519 | epot = -21.2164124023053 | etot = -16.0347992832552 +197000 ekin = 2.50338730962556 | erot = 2.07349764616723 | epot = -21.041867486922 | etot = -16.4649825311292 +198000 ekin = 2.66945928982616 | erot = 1.79012921820209 | epot = -21.0169215356766 | etot = -16.5573330276483 +199000 ekin = 2.53947964790256 | erot = 2.33176467953655 | epot = -21.0171165577067 | etot = -16.1458722302676 +200000 ekin = 2.90451062704866 | erot = 1.42170066957004 | epot = -21.0113804229743 | etot = -16.6851691263556 +201000 ekin = 2.68927776239674 | erot = 1.56650335894554 | epot = -21.0245916399581 | etot = -16.7688105186158 +202000 ekin = 2.2601329351618 | erot = 2.25401443373177 | epot = -20.9769308007641 | etot = -16.4627834318706 +203000 ekin = 2.12073487355488 | erot = 2.03553028991747 | epot = -20.919035946492 | etot = -16.7627707830197 +204000 ekin = 2.11829086582788 | erot = 1.89731962488617 | epot = -20.9376264283538 | etot = -16.9220159376397 +205000 ekin = 1.30964171332167 | erot = 2.12770406224885 | epot = -20.9991335630718 | etot = -17.5617877875013 +206000 ekin = 1.39940057572522 | erot = 2.24496791209126 | epot = -20.963919219062 | etot = -17.3195507312455 +207000 ekin = 1.8871608804017 | erot = 1.79849326266382 | epot = -21.0552898160204 | etot = -17.3696356729549 +208000 ekin = 1.81558541079753 | erot = 3.24210836817276 | epot = -21.3060144768834 | etot = -16.2483206979131 +209000 ekin = 2.79588064252181 | erot = 2.3467149173832 | epot = -21.4301997554495 | etot = -16.2876041955445 +210000 ekin = 3.17544887511567 | erot = 3.12704516116654 | epot = -21.5100449360932 | etot = -15.2075508998109 +211000 ekin = 2.47442327377226 | erot = 2.0990867711376 | epot = -21.6455723047062 | etot = -17.0720622597963 +212000 ekin = 2.36672302145397 | erot = 1.93445871446419 | epot = -21.7283038297487 | etot = -17.4271220938306 +213000 ekin = 1.91045426241161 | erot = 2.52535628540462 | epot = -21.8158508544504 | etot = -17.3800403066341 +214000 ekin = 1.99794025866061 | erot = 2.49896939492127 | epot = -21.8606548137084 | etot = -17.3637451601266 +215000 ekin = 1.97741561009525 | erot = 3.17667494473254 | epot = -21.8701701582032 | etot = -16.7160796033754 +216000 ekin = 1.88829990821377 | erot = 1.87402623825167 | epot = -21.8343889393413 | etot = -18.0720627928759 +217000 ekin = 2.10000293878932 | erot = 1.95052404495887 | epot = -21.8965404786646 | etot = -17.8460134949164 +218000 ekin = 2.34753598782339 | erot = 1.69695019504401 | epot = -21.8560027679962 | etot = -17.8115165851288 +219000 ekin = 2.497223564463 | erot = 2.20999914485705 | epot = -21.8797649478059 | etot = -17.1725422384859 +220000 ekin = 1.75274593087921 | erot = 3.03992746556406 | epot = -21.8491595252171 | etot = -17.0564861287739 +221000 ekin = 1.78874686645809 | erot = 2.79359542964647 | epot = -21.869798634642 | etot = -17.2874563385375 +222000 ekin = 2.63608430516661 | erot = 2.86817933637385 | epot = -21.8351218383832 | etot = -16.3308581968427 +223000 ekin = 3.02706758581511 | erot = 1.93888641555348 | epot = -21.8582453001765 | etot = -16.8922912988079 +224000 ekin = 2.71704451339112 | erot = 2.42079327531441 | epot = -21.8188420875657 | etot = -16.6810042988601 +225000 ekin = 2.04245190508395 | erot = 3.38216222891907 | epot = -21.8232190868647 | etot = -16.3986049528616 +226000 ekin = 2.37968015829255 | erot = 2.38384696857065 | epot = -21.8913549487127 | etot = -17.1278278218495 +227000 ekin = 2.73883397024414 | erot = 2.62491632372019 | epot = -21.9496900700867 | etot = -16.5859397761223 +228000 ekin = 2.06833362780412 | erot = 2.25049628751225 | epot = -21.9946760345141 | etot = -17.6758461191977 +229000 ekin = 1.78618617304217 | erot = 1.80509591500329 | epot = -22.0671964085329 | etot = -18.4759143204874 +230000 ekin = 2.76967283780387 | erot = 2.22492545317995 | epot = -22.0913590121729 | etot = -17.0967607211891 +231000 ekin = 3.15653922952316 | erot = 2.77099247609325 | epot = -22.0635255129442 | etot = -16.1359938073278 +232000 ekin = 1.86633326635991 | erot = 1.70672288688982 | epot = -22.0959715052869 | etot = -18.5229153520371 +233000 ekin = 1.75856846080021 | erot = 1.55694263125625 | epot = -22.0729289884755 | etot = -18.7574178964191 +234000 ekin = 2.32322575892498 | erot = 2.05793864740336 | epot = -21.9849429433607 | etot = -17.6037785370324 +235000 ekin = 1.95327191686568 | erot = 2.52519338885861 | epot = -21.9357201856672 | etot = -17.4572548799429 +236000 ekin = 2.25952484966859 | erot = 1.90005304846995 | epot = -21.9422471368741 | etot = -17.7826692387355 +237000 ekin = 2.49082301609303 | erot = 2.65327564887437 | epot = -22.0049130762794 | etot = -16.860814411312 +238000 ekin = 2.21076048871751 | erot = 2.74154862479023 | epot = -22.0553236426831 | etot = -17.1030145291754 +239000 ekin = 2.71464884454142 | erot = 2.48739530580561 | epot = -22.0661894571024 | etot = -16.8641453067554 +240000 ekin = 3.08961933821573 | erot = 2.17857064931927 | epot = -21.9596599475175 | etot = -16.6914699599825 +241000 ekin = 3.04172562407922 | erot = 2.64442433974962 | epot = -21.872950064824 | etot = -16.1868001009951 +242000 ekin = 2.21355627539455 | erot = 2.33429157450905 | epot = -21.7850463200938 | etot = -17.2371984701902 +243000 ekin = 1.52065138183895 | erot = 2.81375224845254 | epot = -21.724672004357 | etot = -17.3902683740655 +244000 ekin = 1.90352576583831 | erot = 2.43821138840079 | epot = -21.6320468184555 | etot = -17.2903096642164 +245000 ekin = 1.96342069667742 | erot = 2.61760141174562 | epot = -21.509789944958 | etot = -16.928767836535 +246000 ekin = 2.05478829283868 | erot = 2.42643933263093 | epot = -21.4781109635143 | etot = -16.9968833380447 +247000 ekin = 1.54618395739204 | erot = 2.28537401295509 | epot = -21.4411828355572 | etot = -17.6096248652101 +248000 ekin = 1.83924983769609 | erot = 2.55904554412921 | epot = -21.4587985205918 | etot = -17.0605031387665 +249000 ekin = 1.78703007063825 | erot = 2.03411349475431 | epot = -21.516607560139 | etot = -17.6954639947464 +250000 ekin = 1.69317901626952 | erot = 3.382620023581 | epot = -21.5380480709889 | etot = -16.4622490311384 +251000 ekin = 2.13799462687096 | erot = 3.25868442484789 | epot = -21.5254595658408 | etot = -16.1287805141219 +252000 ekin = 2.04357045453396 | erot = 2.53079336098227 | epot = -21.5456931883614 | etot = -16.9713293728452 +253000 ekin = 1.63287738205387 | erot = 3.20992823373492 | epot = -21.5622010587548 | etot = -16.719395442966 +254000 ekin = 2.31269246359595 | erot = 3.10766702207071 | epot = -21.5505863172024 | etot = -16.1302268315358 +255000 ekin = 2.50767926641465 | erot = 2.76631276495167 | epot = -21.5288449153183 | etot = -16.254852883952 +256000 ekin = 1.97163698305487 | erot = 2.61682132599931 | epot = -21.5273539828767 | etot = -16.9388956738225 +257000 ekin = 2.21091422886157 | erot = 3.2624387389365 | epot = -21.5385504601779 | etot = -16.0651974923798 +258000 ekin = 2.0351730783025 | erot = 1.84693461512361 | epot = -21.6544556001779 | etot = -17.7723479067518 +259000 ekin = 2.85718947138204 | erot = 2.78701165242275 | epot = -21.7587237542941 | etot = -16.1145226304893 +260000 ekin = 2.90387286634678 | erot = 2.18817434737477 | epot = -21.8080383126913 | etot = -16.7159910989698 +261000 ekin = 2.76190440948559 | erot = 2.33968169215532 | epot = -21.8592909726424 | etot = -16.7577048710015 +262000 ekin = 3.50919242681178 | erot = 1.76925994550144 | epot = -21.8779228441577 | etot = -16.5994704718445 +263000 ekin = 3.07696270254058 | erot = 2.41477320555763 | epot = -21.8078566004281 | etot = -16.3161206923299 +264000 ekin = 2.26633389925754 | erot = 2.04161743361595 | epot = -21.8372928128571 | etot = -17.5293414799836 +265000 ekin = 1.95747124461577 | erot = 2.5081300879884 | epot = -21.8490876266416 | etot = -17.3834862940375 +266000 ekin = 2.34517905801099 | erot = 3.31486209922478 | epot = -21.8287737874741 | etot = -16.1687326302383 +267000 ekin = 1.74030193361906 | erot = 2.23366459528059 | epot = -21.699850097441 | etot = -17.7258835685413 +268000 ekin = 2.04858677018814 | erot = 3.28744422098426 | epot = -21.6459408923623 | etot = -16.3099099011899 +269000 ekin = 1.93146929709294 | erot = 2.79280735598121 | epot = -21.549773802712 | etot = -16.8254971496378 +270000 ekin = 2.19788894271016 | erot = 2.64563279687103 | epot = -21.4165389672397 | etot = -16.5730172276585 +271000 ekin = 2.21923220579694 | erot = 3.10768708967444 | epot = -21.2197121954353 | etot = -15.8927928999639 +272000 ekin = 2.54992061853163 | erot = 2.29721880581853 | epot = -21.0816515756819 | etot = -16.2345121513317 +273000 ekin = 1.914618407838 | erot = 2.01420401968473 | epot = -21.0503637141725 | etot = -17.1215412866498 +274000 ekin = 1.89671513770876 | erot = 2.24334386161735 | epot = -21.0967103438301 | etot = -16.9566513445039 +275000 ekin = 1.78930707116537 | erot = 3.09754687865994 | epot = -21.1385700371941 | etot = -16.2517160873688 +276000 ekin = 3.37110328153971 | erot = 2.41957324257529 | epot = -21.0908388312033 | etot = -15.3001623070883 +277000 ekin = 2.38921825148496 | erot = 1.50604988822737 | epot = -21.034620883997 | etot = -17.1393527442847 +278000 ekin = 2.51997301930638 | erot = 2.14026171776896 | epot = -21.0117379332914 | etot = -16.351503196216 +279000 ekin = 1.88315206280857 | erot = 2.37342905263994 | epot = -20.9993757709145 | etot = -16.742794655466 +280000 ekin = 2.33534713190787 | erot = 3.58626468287222 | epot = -20.8573252930133 | etot = -14.9357134782332 +281000 ekin = 1.75252641954511 | erot = 1.7907930540809 | epot = -20.9036528826792 | etot = -17.3603334090531 +282000 ekin = 2.26373977259215 | erot = 3.04032073608633 | epot = -20.8497513702237 | etot = -15.5456908615452 +283000 ekin = 2.1783387139443 | erot = 2.20833158301333 | epot = -20.8002776734785 | etot = -16.4136073765209 +284000 ekin = 1.9148667268656 | erot = 2.21521993135969 | epot = -20.8277491648056 | etot = -16.6976625065804 +285000 ekin = 3.15634443167765 | erot = 1.80033231604849 | epot = -21.0046435881196 | etot = -16.0479668403934 +286000 ekin = 3.84877574957331 | erot = 1.82969969667577 | epot = -21.1628555811447 | etot = -15.4843801348956 +287000 ekin = 3.60615742824732 | erot = 2.91608688151215 | epot = -21.2126952882302 | etot = -14.6904509784708 +288000 ekin = 3.19613259393802 | erot = 1.67736393077137 | epot = -21.1713552834963 | etot = -16.297858758787 +289000 ekin = 2.45584885114799 | erot = 2.77781979747336 | epot = -21.1669115721543 | etot = -15.9332429235329 +290000 ekin = 2.74570408981357 | erot = 2.40443247852242 | epot = -21.1874427766533 | etot = -16.0373062083173 +291000 ekin = 2.10295274468233 | erot = 2.37092484671539 | epot = -21.2419107014544 | etot = -16.7680331100567 +292000 ekin = 2.36118713930732 | erot = 2.05558127949017 | epot = -21.3137361602548 | etot = -16.8969677414573 +293000 ekin = 2.2786196308825 | erot = 2.35874555054765 | epot = -21.4302415460533 | etot = -16.7928763646231 +294000 ekin = 2.93315982813019 | erot = 2.90313008187785 | epot = -21.5210917917479 | etot = -15.6848018817399 +295000 ekin = 2.66360761710434 | erot = 2.28100565751945 | epot = -21.6885021477336 | etot = -16.7438888731098 +296000 ekin = 2.18767827164471 | erot = 2.90589885547353 | epot = -21.7355037190159 | etot = -16.6419265918977 +297000 ekin = 2.15987738107365 | erot = 3.29819575592636 | epot = -21.7177655658756 | etot = -16.2596924288756 +298000 ekin = 2.92956976611296 | erot = 2.36377210613469 | epot = -21.6748271071566 | etot = -16.3814852349089 +299000 ekin = 3.19167138064488 | erot = 2.23480811780853 | epot = -21.8042612344918 | etot = -16.3777817360384 +300000 ekin = 3.3133572846982 | erot = 1.38932157247169 | epot = -21.8799906137235 | etot = -17.1773117565536 +301000 ekin = 2.39061971962408 | erot = 3.30110260608963 | epot = -21.8919200817915 | etot = -16.2001977560778 +302000 ekin = 2.954460706029 | erot = 3.2304815881765 | epot = -21.8557645140423 | etot = -15.6708222198368 +303000 ekin = 2.44700205353933 | erot = 2.60676303242282 | epot = -21.8414046718167 | etot = -16.7876395858546 +304000 ekin = 2.23578509140697 | erot = 2.68770420047938 | epot = -21.7680601199659 | etot = -16.8445708280796 +305000 ekin = 2.35505207220215 | erot = 2.3823003115585 | epot = -21.7344089784493 | etot = -16.9970565946887 +306000 ekin = 1.91790567526689 | erot = 2.90107494003232 | epot = -21.7170004822351 | etot = -16.8980198669359 +307000 ekin = 2.48241777758708 | erot = 2.0836708009946 | epot = -21.6510481218459 | etot = -17.0849595432642 +308000 ekin = 2.77531620706104 | erot = 2.63103510715158 | epot = -21.6349123878086 | etot = -16.2285610735959 +309000 ekin = 2.30440955942791 | erot = 2.1249829765834 | epot = -21.5927938975113 | etot = -17.1634013615 +310000 ekin = 2.50879527040005 | erot = 3.21338829421535 | epot = -21.6043932917725 | etot = -15.8822097271571 +311000 ekin = 2.31939145866558 | erot = 3.03649241514151 | epot = -21.6247503351754 | etot = -16.2688664613683 +312000 ekin = 1.78383134659847 | erot = 3.26262247889992 | epot = -21.4948144284683 | etot = -16.4483606029699 +313000 ekin = 1.6465994694839 | erot = 2.08133087588833 | epot = -21.4920309735611 | etot = -17.7641006281889 +314000 ekin = 2.2552391830868 | erot = 2.55077633299239 | epot = -21.5103692936944 | etot = -16.7043537776152 +315000 ekin = 2.5352734391515 | erot = 2.13089997124613 | epot = -21.5923709217299 | etot = -16.9261975113323 +316000 ekin = 1.99944427781285 | erot = 1.80072924409704 | epot = -21.6039893771529 | etot = -17.803815855243 +317000 ekin = 2.11848744585804 | erot = 2.01459693810075 | epot = -21.5948976630665 | etot = -17.4618132791077 +318000 ekin = 2.29013024301854 | erot = 1.92405818620914 | epot = -21.5643695946921 | etot = -17.3501811654644 +319000 ekin = 1.97314693278018 | erot = 1.67996578959134 | epot = -21.4554808400841 | etot = -17.8023681177126 +320000 ekin = 2.45681719546631 | erot = 3.07835144499744 | epot = -21.3924125538101 | etot = -15.8572439133463 +321000 ekin = 1.85729238455498 | erot = 2.67083565671245 | epot = -21.433818829251 | etot = -16.9056907879836 +322000 ekin = 1.96132292396412 | erot = 3.36792274118279 | epot = -21.3663490830085 | etot = -16.0371034178616 +323000 ekin = 1.94437285233567 | erot = 2.09558156605687 | epot = -21.4151250968679 | etot = -17.3751706784754 +324000 ekin = 2.229181524904 | erot = 2.4674418745061 | epot = -21.532385908563 | etot = -16.8357625091529 +325000 ekin = 2.74582842770392 | erot = 2.36717454305098 | epot = -21.6443544237971 | etot = -16.5313514530422 +326000 ekin = 1.91124551133375 | erot = 1.93084217743114 | epot = -21.7077957426602 | etot = -17.8657080538953 +327000 ekin = 3.05627483509655 | erot = 1.67325209460963 | epot = -21.7948818019128 | etot = -17.0653548722066 +328000 ekin = 2.73933273476856 | erot = 1.92380912803777 | epot = -21.8364014823586 | etot = -17.1732596195523 +329000 ekin = 2.95907896099514 | erot = 3.15654168356681 | epot = -21.898199971646 | etot = -15.7825793270841 +330000 ekin = 2.90795110595274 | erot = 2.01765890034968 | epot = -21.9037795505258 | etot = -16.9781695442234 +331000 ekin = 2.27446048340228 | erot = 2.03754878634056 | epot = -21.8760842049291 | etot = -17.5640749351863 +332000 ekin = 2.43262938612094 | erot = 3.19219171897213 | epot = -21.9305186945662 | etot = -16.3056975894732 +333000 ekin = 2.47357651298171 | erot = 2.70061045814697 | epot = -22.0416691323271 | etot = -16.8674821611985 +334000 ekin = 2.38171387374892 | erot = 3.00424927873366 | epot = -22.0746318522988 | etot = -16.6886686998162 +335000 ekin = 2.10465470910016 | erot = 3.57382014016833 | epot = -22.1175420615632 | etot = -16.4390672122947 +336000 ekin = 2.61374577374183 | erot = 2.13386927281299 | epot = -22.08988251196 | etot = -17.3422674654052 +337000 ekin = 2.72124526751511 | erot = 2.74800480481403 | epot = -22.0768537131621 | etot = -16.607603640833 +338000 ekin = 1.83524121485421 | erot = 2.24338894827196 | epot = -22.1591955034455 | etot = -18.0805653403194 +339000 ekin = 1.54928432997334 | erot = 2.49812246084905 | epot = -22.202239883467 | etot = -18.1548330926446 +340000 ekin = 1.44405714940632 | erot = 4.0451327092417 | epot = -22.1149458734013 | etot = -16.6257560147533 +341000 ekin = 1.67447392575555 | erot = 2.77749751745982 | epot = -22.0760831546714 | etot = -17.624111711456 +342000 ekin = 1.9825676117275 | erot = 2.71655566521084 | epot = -22.1563522566984 | etot = -17.45722897976 +343000 ekin = 2.68213676683887 | erot = 3.16686462846914 | epot = -22.2498477633288 | etot = -16.4008463680208 +344000 ekin = 1.77905771753907 | erot = 2.19153667254074 | epot = -22.2907212723871 | etot = -18.3201268823073 +345000 ekin = 1.5460499615042 | erot = 1.85960255696712 | epot = -22.3447003428977 | etot = -18.9390478244264 +346000 ekin = 1.71554664484034 | erot = 1.79880968736714 | epot = -22.3117022609055 | etot = -18.797345928698 +347000 ekin = 1.38672912049481 | erot = 2.61484473767931 | epot = -22.332503239512 | etot = -18.3309293813379 +348000 ekin = 2.15015924850684 | erot = 2.86300326453563 | epot = -22.3337312775957 | etot = -17.3205687645532 +349000 ekin = 1.83066085453602 | erot = 1.9844132649487 | epot = -22.3967822584585 | etot = -18.5817081389738 +350000 ekin = 1.83318738252649 | erot = 2.56907029661254 | epot = -22.4577827539416 | etot = -18.0555250748026 +351000 ekin = 1.72790505260219 | erot = 2.87456274671834 | epot = -22.5159555107051 | etot = -17.9134877113846 +352000 ekin = 2.80786740016944 | erot = 2.08750448125769 | epot = -22.6549834386892 | etot = -17.7596115572621 +353000 ekin = 3.5492801472091 | erot = 1.42584537334883 | epot = -22.6849212734238 | etot = -17.7097957528659 +354000 ekin = 3.49129244374804 | erot = 2.25156548638802 | epot = -22.604182620693 | etot = -16.861324690557 +355000 ekin = 2.06248783371663 | erot = 2.92733565233054 | epot = -22.5494488364627 | etot = -17.5596253504155 +356000 ekin = 2.13415426306312 | erot = 3.32668319049641 | epot = -22.6122425286523 | etot = -17.1514050750927 +357000 ekin = 2.75897049849731 | erot = 2.51843165594436 | epot = -22.6042888591885 | etot = -17.3268867047468 +358000 ekin = 2.51778220496547 | erot = 2.28374144764325 | epot = -22.5654155469984 | etot = -17.7638918943897 +359000 ekin = 3.2037278512604 | erot = 2.5552016027623 | epot = -22.6749569097326 | etot = -16.91602745571 +360000 ekin = 2.52669169359923 | erot = 1.97563796824025 | epot = -22.7314557612254 | etot = -18.229126099386 +361000 ekin = 2.60424632123629 | erot = 2.51068088850826 | epot = -22.7715023743751 | etot = -17.6565751646306 +362000 ekin = 2.43350156723209 | erot = 3.84566788758402 | epot = -22.7352151098034 | etot = -16.4560456549873 +363000 ekin = 2.91069717970492 | erot = 1.99710098714122 | epot = -22.6302259934474 | etot = -17.7224278266013 +364000 ekin = 2.2553832868325 | erot = 1.87832387363455 | epot = -22.5083625296191 | etot = -18.374655369152 +365000 ekin = 2.04575884197224 | erot = 2.797742068412 | epot = -22.332262738426 | etot = -17.4887618280417 +366000 ekin = 2.26894187965217 | erot = 1.94379382552235 | epot = -22.2788727984906 | etot = -18.0661370933161 +367000 ekin = 2.82509630766737 | erot = 2.50361468767084 | epot = -22.3209381619452 | etot = -16.992227166607 +368000 ekin = 2.81542036602322 | erot = 2.18733627644489 | epot = -22.4297259451244 | etot = -17.4269693026563 +369000 ekin = 2.30426035796382 | erot = 2.85653411706989 | epot = -22.4923286665588 | etot = -17.3315341915251 +370000 ekin = 2.67871033327547 | erot = 2.11464921695177 | epot = -22.578069860797 | etot = -17.7847103105697 +371000 ekin = 2.19281044135007 | erot = 3.60165960664287 | epot = -22.6424730832337 | etot = -16.8480030352407 +372000 ekin = 1.77481259468411 | erot = 3.406547444381 | epot = -22.7147683829008 | etot = -17.5334083438357 +373000 ekin = 2.15551547517191 | erot = 2.7877825236183 | epot = -22.7559497214321 | etot = -17.8126517226419 +374000 ekin = 2.71938368055486 | erot = 3.58127823243842 | epot = -22.9084433694729 | etot = -16.6077814564796 +375000 ekin = 2.42759321485976 | erot = 2.9742127178716 | epot = -22.9740378563778 | etot = -17.5722319236464 +376000 ekin = 3.39126830110572 | erot = 3.24733797625004 | epot = -22.9874015798135 | etot = -16.3487953024578 +377000 ekin = 3.20966733323472 | erot = 2.65934060364476 | epot = -22.9452111216365 | etot = -17.076203184757 +378000 ekin = 1.56095946168131 | erot = 2.66159033944991 | epot = -22.9575870308253 | etot = -18.7350372296941 +379000 ekin = 1.9498568748538 | erot = 2.54085216255828 | epot = -22.9834751642939 | etot = -18.4927661268818 +380000 ekin = 2.65820438237073 | erot = 2.88045867212573 | epot = -22.9984703542083 | etot = -17.4598072997118 +381000 ekin = 2.97084599252829 | erot = 2.18892549461574 | epot = -23.0341895570111 | etot = -17.8744180698671 +382000 ekin = 2.61355176942653 | erot = 2.02938704043227 | epot = -23.00841197151 | etot = -18.3654731616512 +383000 ekin = 2.03830671072154 | erot = 2.50516194855525 | epot = -23.0393965606452 | etot = -18.4959279013684 +384000 ekin = 2.1060608733416 | erot = 2.2184025045895 | epot = -23.0602182522593 | etot = -18.7357548743282 +385000 ekin = 1.89114918519107 | erot = 1.63701051320103 | epot = -23.0834434146806 | etot = -19.5552837162885 +386000 ekin = 1.55124380123707 | erot = 1.36147797265396 | epot = -23.1300518396949 | etot = -20.2173300658039 +387000 ekin = 2.19627825752355 | erot = 1.75751396098972 | epot = -23.1280875332419 | etot = -19.1742953147287 +388000 ekin = 1.96387084539616 | erot = 1.95852585326804 | epot = -23.0327752892415 | etot = -19.1103785905773 +389000 ekin = 2.50801560941705 | erot = 2.32519825784836 | epot = -23.0011464671235 | etot = -18.1679325998581 +390000 ekin = 2.03596866068489 | erot = 1.88295618907177 | epot = -22.8810338311575 | etot = -18.9621089814009 +391000 ekin = 1.8098591016452 | erot = 2.39622167162874 | epot = -22.81955664632 | etot = -18.613475873046 +392000 ekin = 2.17725370142733 | erot = 2.87094426544089 | epot = -22.7839731045438 | etot = -17.7357751376756 +393000 ekin = 2.14224634181997 | erot = 3.17242974303658 | epot = -22.8435025538357 | etot = -17.5288264689792 +394000 ekin = 1.97769550804367 | erot = 2.16375300420729 | epot = -22.8342667825711 | etot = -18.6928182703201 +395000 ekin = 2.03687268736298 | erot = 2.49567469731651 | epot = -22.8892034986303 | etot = -18.3566561139508 +396000 ekin = 2.16189109047463 | erot = 1.95308746486161 | epot = -22.9781386034885 | etot = -18.8631600481523 +397000 ekin = 2.41744222422408 | erot = 1.65310699287476 | epot = -23.0900453292844 | etot = -19.0194961121856 +398000 ekin = 3.58905654436294 | erot = 2.51930256503331 | epot = -23.2070733343384 | etot = -17.0987142249422 +399000 ekin = 2.65051654249497 | erot = 1.78138450529865 | epot = -23.3040478764215 | etot = -18.8721468286279 +400000 ekin = 2.49402752614129 | erot = 2.10290777432183 | epot = -23.3608759462318 | etot = -18.7639406457687 +401000 ekin = 2.04176177605462 | erot = 2.154995213856 | epot = -23.4039603394011 | etot = -19.2072033494905 +402000 ekin = 2.44505875861459 | erot = 2.11318097973378 | epot = -23.3975262709888 | etot = -18.8392865326404 +403000 ekin = 2.54858079745147 | erot = 2.81138206601919 | epot = -23.476064698677 | etot = -18.1161018352063 +404000 ekin = 2.21063952462117 | erot = 2.64710865829565 | epot = -23.574696037266 | etot = -18.7169478543492 +405000 ekin = 2.47328118101332 | erot = 2.40933750599425 | epot = -23.5927917139469 | etot = -18.7101730269393 +406000 ekin = 2.24891173527799 | erot = 2.23777884116047 | epot = -23.6086191890417 | etot = -19.1219286126032 +407000 ekin = 2.0107940045037 | erot = 2.78642832526904 | epot = -23.5246032469978 | etot = -18.727380917225 +408000 ekin = 2.59464051790823 | erot = 2.59123578102097 | epot = -23.4198302602656 | etot = -18.2339539613364 +409000 ekin = 2.37170880608734 | erot = 2.26136902851213 | epot = -23.317258193724 | etot = -18.6841803591245 +410000 ekin = 1.99754661347185 | erot = 1.95523998485755 | epot = -23.2950402043273 | etot = -19.3422536059979 +411000 ekin = 1.8693657058423 | erot = 2.63899492681176 | epot = -23.2490367633041 | etot = -18.74067613065 +412000 ekin = 1.98214047746227 | erot = 2.68315820775202 | epot = -23.1987357483281 | etot = -18.5334370631139 +413000 ekin = 2.39078873487373 | erot = 2.65589562872907 | epot = -23.1435198518627 | etot = -18.0968354882599 +414000 ekin = 2.40821090859775 | erot = 1.75574324408225 | epot = -23.0725048141377 | etot = -18.9085506614577 +415000 ekin = 2.74601981183015 | erot = 2.43675176686816 | epot = -23.1211711904486 | etot = -17.9383996117503 +416000 ekin = 2.08828454200993 | erot = 2.76783506526218 | epot = -23.1383119239965 | etot = -18.2821923167244 +417000 ekin = 2.01455344430628 | erot = 1.95306265456051 | epot = -23.1433633505287 | etot = -19.1757472516619 +418000 ekin = 2.42716528853985 | erot = 2.57642821145486 | epot = -23.127531797131 | etot = -18.1239382971363 +419000 ekin = 3.04095103685797 | erot = 2.58427576972734 | epot = -23.0602279332617 | etot = -17.4350011266764 +420000 ekin = 2.6360746280152 | erot = 2.44478111019393 | epot = -22.982092315172 | etot = -17.9012365769629 +421000 ekin = 2.53019765722915 | erot = 1.78389585255477 | epot = -22.9707435541329 | etot = -18.6566500443489 +422000 ekin = 2.72457425772367 | erot = 1.67768634886349 | epot = -22.9542997027495 | etot = -18.5520390961623 +423000 ekin = 2.11402997037893 | erot = 2.55034580375608 | epot = -22.8263851956497 | etot = -18.1620094215147 +424000 ekin = 1.8895880210325 | erot = 2.31332431343561 | epot = -22.772666888172 | etot = -18.5697545537039 +425000 ekin = 2.3595116370971 | erot = 1.95762380637298 | epot = -22.7752082759346 | etot = -18.4580728324645 +426000 ekin = 2.23706657164627 | erot = 2.60016134755148 | epot = -22.7844114251539 | etot = -17.9471835059562 +427000 ekin = 1.88801598248841 | erot = 2.12415782350886 | epot = -22.9416586386639 | etot = -18.9294848326666 +428000 ekin = 1.92849031333042 | erot = 2.44097902588716 | epot = -23.0611368174399 | etot = -18.6916674782223 +429000 ekin = 1.70536802258415 | erot = 2.14916257389792 | epot = -23.0556586745393 | etot = -19.2011280780572 +430000 ekin = 2.30226095973205 | erot = 2.14689932813604 | epot = -23.0606502516208 | etot = -18.6114899637527 +431000 ekin = 2.45988288454318 | erot = 2.42278380298657 | epot = -23.0729777223881 | etot = -18.1903110348583 +432000 ekin = 2.80869332724974 | erot = 2.19954129490925 | epot = -23.0939746542044 | etot = -18.0857400320454 +433000 ekin = 2.21130556188282 | erot = 1.62882156110628 | epot = -23.1534080352157 | etot = -19.3132809122266 +434000 ekin = 2.60574953870752 | erot = 2.36088790768803 | epot = -23.1901717047879 | etot = -18.2235342583923 +435000 ekin = 2.30377529593091 | erot = 2.53917715731259 | epot = -23.1716983948432 | etot = -18.3287459415997 +436000 ekin = 2.42707603554825 | erot = 2.75234181061924 | epot = -23.2197996577197 | etot = -18.0403818115522 +437000 ekin = 1.65090540276074 | erot = 3.25345231298367 | epot = -23.2216366145388 | etot = -18.3172788987944 +438000 ekin = 1.56145302974407 | erot = 2.60950810563796 | epot = -23.1303770792278 | etot = -18.9594159438458 +439000 ekin = 2.30955439722234 | erot = 1.94011743371103 | epot = -23.1353170794497 | etot = -18.8856452485163 +440000 ekin = 2.53037674867674 | erot = 3.0652704286103 | epot = -23.196858945292 | etot = -17.601211768005 +441000 ekin = 2.80107707952534 | erot = 2.53664155736544 | epot = -23.1712373428919 | etot = -17.8335187060011 +442000 ekin = 2.92536323090713 | erot = 2.88384500930017 | epot = -23.1123001627208 | etot = -17.3030919225135 +443000 ekin = 1.96543935969482 | erot = 1.753449631552 | epot = -23.0380529084377 | etot = -19.3191639171909 +444000 ekin = 2.00309477401363 | erot = 2.23897509587739 | epot = -22.9472103119533 | etot = -18.7051404420623 +445000 ekin = 2.20302071819722 | erot = 2.06928381371828 | epot = -22.7775434364172 | etot = -18.5052389045017 +446000 ekin = 2.43487889302299 | erot = 2.37751556007798 | epot = -22.6838190597697 | etot = -17.8714246066687 +447000 ekin = 2.2620819636031 | erot = 2.41400188145197 | epot = -22.7082516636546 | etot = -18.0321678185995 +448000 ekin = 2.16184472791984 | erot = 1.93539407204278 | epot = -22.8144859493263 | etot = -18.7172471493637 +449000 ekin = 2.21107967973114 | erot = 2.34659682978741 | epot = -22.9059503054159 | etot = -18.3482737958974 +450000 ekin = 2.74677740004439 | erot = 1.97222921372039 | epot = -22.860755926716 | etot = -18.1417493129513 +451000 ekin = 2.2050889378155 | erot = 2.13042736119389 | epot = -22.8862608894796 | etot = -18.5507445904702 +452000 ekin = 2.52760608607095 | erot = 2.34006815636601 | epot = -22.9138111972133 | etot = -18.0461369547763 +453000 ekin = 2.23448825172916 | erot = 1.77834418215733 | epot = -22.8879238301791 | etot = -18.8750913962926 +454000 ekin = 2.4343851915949 | erot = 2.59700848533281 | epot = -22.8184361849036 | etot = -17.7870425079759 +455000 ekin = 2.04195793930991 | erot = 2.79639043747681 | epot = -22.6032980500354 | etot = -17.7649496732487 +456000 ekin = 2.00799933710202 | erot = 2.53653815407518 | epot = -22.4355596266522 | etot = -17.891022135475 +457000 ekin = 2.60426208759883 | erot = 2.46609612876191 | epot = -22.3409120082078 | etot = -17.270553791847 +458000 ekin = 2.01368468059037 | erot = 1.9961381624531 | epot = -22.2549400327205 | etot = -18.2451171896771 +459000 ekin = 1.73688781588865 | erot = 2.48572034306896 | epot = -22.2282088298767 | etot = -18.0056006709191 +460000 ekin = 1.91682575775988 | erot = 2.08308677023944 | epot = -22.2211874714416 | etot = -18.2212749434423 +461000 ekin = 1.54933673126938 | erot = 1.29454502815255 | epot = -22.1945151049368 | etot = -19.3506333455148 +462000 ekin = 2.44160489340629 | erot = 1.34721473707676 | epot = -22.284671307697 | etot = -18.495851677214 +463000 ekin = 2.63165365707667 | erot = 2.08143760128039 | epot = -22.4004513395625 | etot = -17.6873600812055 +464000 ekin = 2.67929276186416 | erot = 3.72563793061087 | epot = -22.5200042545289 | etot = -16.1150735620538 +465000 ekin = 1.94880111369479 | erot = 2.23148844819348 | epot = -22.685554296329 | etot = -18.5052647344407 +466000 ekin = 2.13853049638891 | erot = 2.95056624305957 | epot = -22.7822881705531 | etot = -17.6931914311046 +467000 ekin = 2.46452767169615 | erot = 2.1077848077008 | epot = -22.9485753844866 | etot = -18.3762629050896 +468000 ekin = 1.98589158006998 | erot = 1.62816092182055 | epot = -23.0180008829524 | etot = -19.4039483810618 +469000 ekin = 2.498810820967 | erot = 2.6361546272592 | epot = -23.0547833968841 | etot = -17.9198179486579 +470000 ekin = 2.91491361681313 | erot = 3.19115611298998 | epot = -23.0448741101699 | etot = -16.9388043803668 +471000 ekin = 2.37554627514204 | erot = 1.71739792236247 | epot = -22.9932329645513 | etot = -18.9002887670468 +472000 ekin = 2.18486807923518 | erot = 2.00687069908099 | epot = -22.9563182572702 | etot = -18.764579478954 +473000 ekin = 2.36185345820899 | erot = 2.86259041401023 | epot = -22.9161024426125 | etot = -17.6916585703933 +474000 ekin = 2.17077693495272 | erot = 2.59376596740919 | epot = -22.7894018760352 | etot = -18.0248589736733 +475000 ekin = 2.37844153079293 | erot = 2.01112751381907 | epot = -22.6793191497969 | etot = -18.2897501051849 +476000 ekin = 2.0876367643964 | erot = 2.59647624455221 | epot = -22.6700039875052 | etot = -17.9858909785566 +477000 ekin = 2.52249432714936 | erot = 3.55251934739867 | epot = -22.6424099194916 | etot = -16.5673962449436 +478000 ekin = 2.40424947791157 | erot = 2.7323911725861 | epot = -22.544776325228 | etot = -17.4081356747303 +479000 ekin = 1.27637524434413 | erot = 2.99749792697945 | epot = -22.4994949498981 | etot = -18.2256217785745 +480000 ekin = 1.81374950293817 | erot = 2.14389317135939 | epot = -22.4678405170784 | etot = -18.5101978427809 +481000 ekin = 2.39496774186199 | erot = 3.18299441824521 | epot = -22.4930736763177 | etot = -16.9151115162105 +482000 ekin = 3.21051763720184 | erot = 2.40962326270833 | epot = -22.4479376181304 | etot = -16.8277967182202 +483000 ekin = 3.06081116762377 | erot = 2.49856996934407 | epot = -22.4288948733283 | etot = -16.8695137363604 +484000 ekin = 2.7452293328759 | erot = 2.53012629993099 | epot = -22.483756332919 | etot = -17.2084007001121 +485000 ekin = 3.33103095180521 | erot = 2.42091818181918 | epot = -22.4922555047182 | etot = -16.7403063710938 +486000 ekin = 1.99323479363108 | erot = 1.76127718142275 | epot = -22.5432098594131 | etot = -18.7886978843593 +487000 ekin = 2.64825718911654 | erot = 2.50204426232017 | epot = -22.6407366935241 | etot = -17.4904352420874 +488000 ekin = 1.76385891719471 | erot = 2.64266555173498 | epot = -22.6990728058786 | etot = -18.2925483369489 +489000 ekin = 2.10357630534276 | erot = 2.95613916443127 | epot = -22.7877124402073 | etot = -17.7279969704332 +490000 ekin = 2.33515649128314 | erot = 2.32995416999058 | epot = -22.7920703811403 | etot = -18.1269597198666 +491000 ekin = 2.48752587426647 | erot = 2.58310949760555 | epot = -22.7834811495388 | etot = -17.7128457776668 +492000 ekin = 3.29820665204489 | erot = 2.18682924183924 | epot = -22.7674519489923 | etot = -17.2824160551082 +493000 ekin = 3.40238156707506 | erot = 2.35717041222451 | epot = -22.7149408840448 | etot = -16.9553889047452 +494000 ekin = 3.59348050162499 | erot = 2.23182460532058 | epot = -22.7081682295491 | etot = -16.8828631226035 +495000 ekin = 2.52030309238562 | erot = 2.16229430067423 | epot = -22.6973031832711 | etot = -18.0147057902113 +496000 ekin = 1.96100991422337 | erot = 3.58581695215166 | epot = -22.7342002900882 | etot = -17.1873734237132 +497000 ekin = 2.2228647925968 | erot = 2.49495319949133 | epot = -22.752706201593 | etot = -18.0348882095048 +498000 ekin = 1.71033952564695 | erot = 2.41331591511584 | epot = -22.7131621100867 | etot = -18.589506669324 +499000 ekin = 2.41919864300729 | erot = 2.82349519531821 | epot = -22.7304918052927 | etot = -17.4877979669672 +500000 ekin = 2.76271068346558 | erot = 2.22796445937143 | epot = -22.810945568044 | etot = -17.820270425207 +501000 ekin = 2.97642553987186 | erot = 1.97769778889399 | epot = -22.8306304048616 | etot = -17.8765070760957 +502000 ekin = 2.96175345860856 | erot = 1.80859086419487 | epot = -22.8525538190094 | etot = -18.082209496206 +503000 ekin = 2.51126831088417 | erot = 2.88572311841927 | epot = -22.8673362278446 | etot = -17.4703447985412 +504000 ekin = 2.84611165351303 | erot = 2.67626783872459 | epot = -22.784891957601 | etot = -17.2625124653634 +505000 ekin = 2.96124584448914 | erot = 2.59100575301934 | epot = -22.8251284225258 | etot = -17.2728768250174 +506000 ekin = 2.19858217910528 | erot = 1.97142936872076 | epot = -22.8530995461462 | etot = -18.6830879983201 +507000 ekin = 2.27398115142402 | erot = 2.68837996151517 | epot = -22.8141163798141 | etot = -17.8517552668749 +508000 ekin = 2.64439339973837 | erot = 2.04756467869449 | epot = -22.8146247157345 | etot = -18.1226666373017 +509000 ekin = 2.96023637315629 | erot = 2.90549934754532 | epot = -22.8719625385967 | etot = -17.0062268178951 +510000 ekin = 2.26067558634546 | erot = 2.80864918519521 | epot = -22.9774448292236 | etot = -17.9081200576829 +511000 ekin = 2.88512738978599 | erot = 2.15263877534437 | epot = -23.086672848248 | etot = -18.0489066831176 +512000 ekin = 2.17783748155516 | erot = 2.31389139764186 | epot = -23.1520181882638 | etot = -18.6602893090668 +513000 ekin = 1.69717952556151 | erot = 2.88265468656805 | epot = -23.1640284548407 | etot = -18.5841942427111 +514000 ekin = 1.72432024724117 | erot = 2.32742209152174 | epot = -23.1602225830814 | etot = -19.1084802443185 +515000 ekin = 2.00525337522086 | erot = 1.80102864435032 | epot = -23.1548763180746 | etot = -19.3485942985034 +516000 ekin = 3.04706172157038 | erot = 1.54171785431326 | epot = -23.1202751246552 | etot = -18.5314955487716 +517000 ekin = 2.47323892251936 | erot = 2.10799615007355 | epot = -23.0942246440307 | etot = -18.5129895714378 +518000 ekin = 2.03556879740597 | erot = 2.51531294708502 | epot = -23.01998934344 | etot = -18.4691075989491 +519000 ekin = 1.59255614728459 | erot = 1.63520468579907 | epot = -22.9787913166931 | etot = -19.7510304836094 +520000 ekin = 2.17210761761845 | erot = 1.8975366735392 | epot = -22.9877149955356 | etot = -18.918070704378 +521000 ekin = 1.98466680078867 | erot = 2.09219045542651 | epot = -23.0348541858322 | etot = -18.9579969296171 +522000 ekin = 2.72098469914434 | erot = 2.19565658619456 | epot = -23.1001210576502 | etot = -18.1834797723113 +523000 ekin = 2.26033454380754 | erot = 1.67112114369622 | epot = -23.1475509854345 | etot = -19.2160952979307 +524000 ekin = 2.34603831546138 | erot = 2.1054661011949 | epot = -23.1746761633773 | etot = -18.723171746721 +525000 ekin = 2.13671314300235 | erot = 2.07172081705863 | epot = -23.241177743004 | etot = -19.032743782943 +526000 ekin = 2.50849953901566 | erot = 2.27662230434506 | epot = -23.3179050583979 | etot = -18.5327832150372 +527000 ekin = 3.04322527932213 | erot = 1.8128057083239 | epot = -23.3977373118239 | etot = -18.5417063241779 +528000 ekin = 2.572303182379 | erot = 2.54386055260816 | epot = -23.4208428708383 | etot = -18.3046791358511 +529000 ekin = 2.39361269633634 | erot = 1.91637577362227 | epot = -23.3966015599491 | etot = -19.0866130899905 +530000 ekin = 3.3562937907424 | erot = 3.41683815876463 | epot = -23.2977853851852 | etot = -16.5246534356781 +531000 ekin = 2.52741741752381 | erot = 2.34075342407645 | epot = -23.1721175623278 | etot = -18.3039467207275 +532000 ekin = 2.78397051305127 | erot = 1.78575123294094 | epot = -23.2171711834401 | etot = -18.6474494374479 +533000 ekin = 2.27408274334042 | erot = 2.01427501035043 | epot = -23.2885684059727 | etot = -19.0002106522818 +534000 ekin = 2.54998010491125 | erot = 2.0164545364507 | epot = -23.340767920006 | etot = -18.7743332786441 +535000 ekin = 2.49595662250557 | erot = 2.09586427439366 | epot = -23.3878755759449 | etot = -18.7960546790457 +536000 ekin = 2.47717157546008 | erot = 1.92116873587364 | epot = -23.3847675210095 | etot = -18.9864272096758 +537000 ekin = 1.75235621440219 | erot = 2.11852052216092 | epot = -23.4590860280326 | etot = -19.5882092914695 +538000 ekin = 2.19317209186629 | erot = 2.75191518419657 | epot = -23.5517834707225 | etot = -18.6066961946597 +539000 ekin = 2.16135327665114 | erot = 2.25935011393788 | epot = -23.5718250119029 | etot = -19.1511216213139 +540000 ekin = 2.35701554620647 | erot = 1.6449529057333 | epot = -23.5490867129451 | etot = -19.5471182610054 +541000 ekin = 2.61451212811978 | erot = 2.52550284426682 | epot = -23.5334576350385 | etot = -18.3934426626519 +542000 ekin = 2.78909215024063 | erot = 2.09346850400965 | epot = -23.5754619290989 | etot = -18.6929012748486 +543000 ekin = 2.77024528778678 | erot = 1.84116991183092 | epot = -23.4849560716084 | etot = -18.8735408719907 +544000 ekin = 2.15807529188369 | erot = 1.50139575300257 | epot = -23.4530822422947 | etot = -19.7936111974084 +545000 ekin = 1.72860204886329 | erot = 2.56468335549414 | epot = -23.4524953434144 | etot = -19.159209939057 +546000 ekin = 2.38494138419348 | erot = 1.87772638427254 | epot = -23.4950389557033 | etot = -19.2323711872372 +547000 ekin = 2.44871634556835 | erot = 2.44464466893214 | epot = -23.544915775382 | etot = -18.6515547608815 +548000 ekin = 2.36962922994878 | erot = 2.40235228488721 | epot = -23.5548428056052 | etot = -18.7828612907692 +549000 ekin = 2.57958168249614 | erot = 2.04930779813674 | epot = -23.5565149978683 | etot = -18.9276255172355 +550000 ekin = 1.9793136647427 | erot = 1.85207468704394 | epot = -23.5614067919063 | etot = -19.7300184401196 +551000 ekin = 2.4121774327081 | erot = 2.0348936886299 | epot = -23.5115216908382 | etot = -19.0644505695002 +552000 ekin = 2.6621149390197 | erot = 1.41279265378133 | epot = -23.3450678435402 | etot = -19.2701602507391 +553000 ekin = 1.76359346131444 | erot = 2.63019210822711 | epot = -23.1435570943958 | etot = -18.7497715248542 +554000 ekin = 2.29840754300073 | erot = 2.34424452982823 | epot = -23.1114395278817 | etot = -18.4687874550527 +555000 ekin = 3.29672420152566 | erot = 1.64146930698359 | epot = -23.0891292168918 | etot = -18.1509357083825 +556000 ekin = 2.92076699655596 | erot = 2.59602967895818 | epot = -23.0268314200472 | etot = -17.5100347445331 +557000 ekin = 2.90322014804994 | erot = 3.16052668894921 | epot = -23.0146480567181 | etot = -16.950901219719 +558000 ekin = 2.78018761002222 | erot = 2.59826947006759 | epot = -22.7877399275349 | etot = -17.4092828474451 +559000 ekin = 2.48661596771862 | erot = 3.22596665511856 | epot = -22.8226574327834 | etot = -17.1100748099462 +560000 ekin = 2.34942852601698 | erot = 2.32773162877396 | epot = -22.8255608134696 | etot = -18.1484006586786 +561000 ekin = 2.0520192544917 | erot = 2.90306975046936 | epot = -22.8488516051139 | etot = -17.8937626001529 +562000 ekin = 2.18821919117372 | erot = 3.66499439159819 | epot = -22.7618817506902 | etot = -16.9086681679183 +563000 ekin = 3.11505518852414 | erot = 2.28057725990564 | epot = -22.791430640287 | etot = -17.3957981918572 +564000 ekin = 2.45343120006931 | erot = 2.36321638506708 | epot = -22.75807077839 | etot = -17.9414231932536 +565000 ekin = 2.77835835502221 | erot = 2.07073547186409 | epot = -22.7486053888412 | etot = -17.8995115619549 +566000 ekin = 2.43655641927934 | erot = 2.19832280178868 | epot = -22.7227654505166 | etot = -18.0878862294486 +567000 ekin = 2.71233133108494 | erot = 2.01281091173405 | epot = -22.8839744455115 | etot = -18.1588322026925 +568000 ekin = 3.12450796157708 | erot = 1.93520150351061 | epot = -22.9625972279254 | etot = -17.9028877628377 +569000 ekin = 3.72714267701977 | erot = 2.06562452789051 | epot = -22.9814174117752 | etot = -17.1886502068649 +570000 ekin = 2.68808623045676 | erot = 2.36042122391805 | epot = -22.998959026692 | etot = -17.9504515723172 +571000 ekin = 1.97223467321356 | erot = 2.85558181274648 | epot = -22.9369001315648 | etot = -18.1090836456047 +572000 ekin = 2.4182049732123 | erot = 2.40910077907643 | epot = -22.934930836907 | etot = -18.1076250846182 +573000 ekin = 1.76702714285012 | erot = 2.31739567602694 | epot = -22.9768902017483 | etot = -18.8924673828712 +574000 ekin = 2.08740259214111 | erot = 2.59288012722136 | epot = -23.0518321557917 | etot = -18.3715494364293 +575000 ekin = 2.34020490338786 | erot = 2.78500973557001 | epot = -23.106579446946 | etot = -17.9813648079881 +576000 ekin = 2.15506609467459 | erot = 3.3045287538029 | epot = -23.1521162771299 | etot = -17.6925214286524 +577000 ekin = 2.45698150895878 | erot = 2.31876672704204 | epot = -23.1781917242715 | etot = -18.4024434882707 +578000 ekin = 2.59353106592521 | erot = 2.33790294336519 | epot = -23.2101395643707 | etot = -18.2787055550803 +579000 ekin = 2.58102015460712 | erot = 1.71748063175117 | epot = -23.1865014452815 | etot = -18.8880006589232 +580000 ekin = 2.30361750578347 | erot = 2.87410564379621 | epot = -23.2045008793077 | etot = -18.026777729728 +581000 ekin = 2.45915247103344 | erot = 2.59640238490727 | epot = -23.1882783600354 | etot = -18.1327235040947 +582000 ekin = 2.33801590725494 | erot = 3.19256035650617 | epot = -23.2501410058056 | etot = -17.7195647420445 +583000 ekin = 1.95982078382855 | erot = 2.81944051586213 | epot = -23.4085593869414 | etot = -18.6292980872508 +584000 ekin = 2.00358327245437 | erot = 1.7126727026301 | epot = -23.4960310960901 | etot = -19.7797751210056 +585000 ekin = 2.28859150562676 | erot = 2.06309046911262 | epot = -23.5306230166998 | etot = -19.1789410419604 +586000 ekin = 2.21858454582016 | erot = 1.97776854350186 | epot = -23.4873397268816 | etot = -19.2909866375596 +587000 ekin = 3.70065233550663 | erot = 1.82187748311298 | epot = -23.4652388428899 | etot = -17.9427090242702 +588000 ekin = 3.49447328534893 | erot = 2.31981981591506 | epot = -23.3985567739262 | etot = -17.5842636726622 +589000 ekin = 2.66144502802388 | erot = 3.02756546370717 | epot = -23.2783756079917 | etot = -17.5893651162607 +590000 ekin = 1.52141257336428 | erot = 2.09874614600563 | epot = -23.1290158071881 | etot = -19.5088570878182 +591000 ekin = 1.82897193042274 | erot = 1.75592223095374 | epot = -23.0622736076073 | etot = -19.4773794462309 +592000 ekin = 2.49491276892191 | erot = 2.5482988197852 | epot = -23.054885494985 | etot = -18.0116739062779 +593000 ekin = 2.36845716276159 | erot = 1.78503341410575 | epot = -23.005264310194 | etot = -18.8517737333267 +594000 ekin = 2.07907010887474 | erot = 2.14563658430187 | epot = -22.9611396232755 | etot = -18.7364329300989 +595000 ekin = 2.62736231723874 | erot = 2.0397582574453 | epot = -22.9495489717352 | etot = -18.2824283970512 +596000 ekin = 2.58985967531625 | erot = 2.12449830164849 | epot = -22.9908505579803 | etot = -18.2764925810155 +597000 ekin = 3.02540042664856 | erot = 3.14256707367048 | epot = -22.9740991012936 | etot = -16.8061316009746 +598000 ekin = 3.44397104083287 | erot = 2.8605790839857 | epot = -23.0035411551228 | etot = -16.6989910303042 +599000 ekin = 2.13932500926498 | erot = 3.49187029024979 | epot = -22.9657391359988 | etot = -17.334543836484 +600000 ekin = 2.19758597945326 | erot = 2.49610822362376 | epot = -22.9452235009931 | etot = -18.2515292979161 +601000 ekin = 2.80918982916752 | erot = 2.81768433603376 | epot = -22.8970508934525 | etot = -17.2701767282513 +602000 ekin = 2.30031523379463 | erot = 2.40907304500534 | epot = -22.8523950981499 | etot = -18.1430068193499 +603000 ekin = 1.91335501396421 | erot = 1.99518053980753 | epot = -22.7884152302358 | etot = -18.879879676464 +604000 ekin = 2.5976715095492 | erot = 3.14351403383687 | epot = -22.7430641975849 | etot = -17.0018786541988 +605000 ekin = 2.63203298717972 | erot = 2.07906613894389 | epot = -22.7307949909783 | etot = -18.0196958648547 +606000 ekin = 2.94678399289781 | erot = 2.03982213630799 | epot = -22.6555302524726 | etot = -17.6689241232668 +607000 ekin = 2.85272606479019 | erot = 2.36693467257681 | epot = -22.6318548820144 | etot = -17.4121941446474 +608000 ekin = 3.6642968125636 | erot = 2.46706737589234 | epot = -22.5724662590778 | etot = -16.4411020706219 +609000 ekin = 2.69343886620625 | erot = 2.25873504143679 | epot = -22.6007364465805 | etot = -17.6485625389374 +610000 ekin = 2.99904616523658 | erot = 2.13621966615343 | epot = -22.5973658485054 | etot = -17.4621000171154 +611000 ekin = 3.86832985948944 | erot = 2.12096644577641 | epot = -22.5702925425382 | etot = -16.5809962372724 +612000 ekin = 2.88515301824618 | erot = 2.45910554524357 | epot = -22.4848584522585 | etot = -17.1405998887688 +613000 ekin = 2.9367425327116 | erot = 2.14436169371533 | epot = -22.465526703267 | etot = -17.3844224768401 +614000 ekin = 2.79116462876301 | erot = 2.024409539648 | epot = -22.5207406301148 | etot = -17.7051664617038 +615000 ekin = 2.29338048298908 | erot = 2.38828872470982 | epot = -22.6082782403584 | etot = -17.9266090326595 +616000 ekin = 1.78195169789474 | erot = 2.45334803626968 | epot = -22.6887534547644 | etot = -18.4534537206 +617000 ekin = 2.57505808534158 | erot = 2.55345758187858 | epot = -22.701463839496 | etot = -17.5729481722758 +618000 ekin = 2.29561379442387 | erot = 2.68043259355499 | epot = -22.629958627306 | etot = -17.6539122393272 +619000 ekin = 1.94323313590202 | erot = 2.00964911157699 | epot = -22.56819110474 | etot = -18.6153088572609 +620000 ekin = 2.92263589097657 | erot = 2.15657756066215 | epot = -22.6264664894927 | etot = -17.547253037854 +621000 ekin = 2.90437881656455 | erot = 1.70649555848315 | epot = -22.665419447573 | etot = -18.0545450725253 +622000 ekin = 2.03426149564846 | erot = 2.51826459248401 | epot = -22.6086250578043 | etot = -18.0560989696718 +623000 ekin = 1.98348786592096 | erot = 3.08484972830227 | epot = -22.6234743341759 | etot = -17.5551367399527 +624000 ekin = 2.08463083558977 | erot = 2.64004606903047 | epot = -22.6266529328942 | etot = -17.901976028274 +625000 ekin = 2.52963490334089 | erot = 2.37033264022622 | epot = -22.6750436783156 | etot = -17.7750761347485 +626000 ekin = 2.73147680333726 | erot = 2.07051651598004 | epot = -22.7272383647964 | etot = -17.9252450454791 +627000 ekin = 2.23447399123207 | erot = 2.35288557052269 | epot = -22.7136740507756 | etot = -18.1263144890208 +628000 ekin = 2.28933754695897 | erot = 2.29676268895054 | epot = -22.6176528573237 | etot = -18.0315526214142 +629000 ekin = 2.5355466362136 | erot = 1.92082543033528 | epot = -22.5693331526924 | etot = -18.1129610861435 +630000 ekin = 3.11700824717166 | erot = 2.51611049765935 | epot = -22.5144695759915 | etot = -16.8813508311605 +631000 ekin = 2.38844807455604 | erot = 3.31601650504458 | epot = -22.5190998334878 | etot = -16.8146352538871 +632000 ekin = 2.59939587493746 | erot = 2.51496212358955 | epot = -22.4711049664696 | etot = -17.3567469679426 +633000 ekin = 2.45338619933597 | erot = 1.89874016257143 | epot = -22.4394257686937 | etot = -18.0872994067863 +634000 ekin = 2.23819111967047 | erot = 1.98305652730466 | epot = -22.3433365860708 | etot = -18.1220889390957 +635000 ekin = 2.22438000857702 | erot = 1.95893208021227 | epot = -22.2877959440852 | etot = -18.1044838552959 +636000 ekin = 2.26938644192167 | erot = 2.77816773779856 | epot = -22.304696935737 | etot = -17.2571427560168 +637000 ekin = 1.97799147515645 | erot = 2.59610837639352 | epot = -22.3353238115758 | etot = -17.7612239600258 +638000 ekin = 2.54901279963355 | erot = 3.14232301833368 | epot = -22.3113570318407 | etot = -16.6200212138734 +639000 ekin = 2.38194254982011 | erot = 2.49468098011844 | epot = -22.2696251856514 | etot = -17.3930016557128 +640000 ekin = 2.07438054408915 | erot = 2.20336226777045 | epot = -22.1673693230788 | etot = -17.8896265112192 +641000 ekin = 2.49150296422893 | erot = 3.53882164550033 | epot = -22.047323387435 | etot = -16.0169987777057 +642000 ekin = 3.37964058409635 | erot = 2.18458831029801 | epot = -21.9324522713976 | etot = -16.3682233770032 +643000 ekin = 2.80862431007863 | erot = 2.40815089193716 | epot = -21.8726014240441 | etot = -16.6558262220283 +644000 ekin = 2.952235016065 | erot = 1.92776262379328 | epot = -21.826057423183 | etot = -16.9460597833247 +645000 ekin = 4.10488984334312 | erot = 1.89062109330214 | epot = -21.7981661301139 | etot = -15.8026551934687 +646000 ekin = 2.50234872105284 | erot = 2.00205075040523 | epot = -21.7221642434957 | etot = -17.2177647720377 +647000 ekin = 2.52267281239589 | erot = 2.19481558810105 | epot = -21.7438885460027 | etot = -17.0264001455058 +648000 ekin = 2.99344241657584 | erot = 2.11139263207284 | epot = -21.7373240000025 | etot = -16.6324889513538 +649000 ekin = 2.55027365085816 | erot = 3.20350991793738 | epot = -21.7192481424448 | etot = -15.9654645736493 +650000 ekin = 3.75163896052813 | erot = 2.44189212282279 | epot = -21.6756681314987 | etot = -15.4821370481478 +651000 ekin = 3.29740056237165 | erot = 2.36780448747275 | epot = -21.5372361691658 | etot = -15.8720311193214 +652000 ekin = 2.54645886055823 | erot = 2.99097829596978 | epot = -21.4549655298412 | etot = -15.9175283733132 +653000 ekin = 2.88682688109756 | erot = 2.53633970608342 | epot = -21.4696471597398 | etot = -16.0464805725588 +654000 ekin = 2.28614085804932 | erot = 2.12026601708473 | epot = -21.5642684321318 | etot = -17.1578615569978 +655000 ekin = 2.20709609517087 | erot = 2.10729950549551 | epot = -21.5349466292622 | etot = -17.2205510285959 +656000 ekin = 2.40310876229413 | erot = 2.09663823500903 | epot = -21.5631924595209 | etot = -17.0634454622178 +657000 ekin = 2.7886551346751 | erot = 2.19608839827219 | epot = -21.794507747247 | etot = -16.8097642142998 +658000 ekin = 3.1025713807162 | erot = 2.59154293692773 | epot = -21.96675599421 | etot = -16.2726416765661 +659000 ekin = 2.88891106020275 | erot = 3.47010878893494 | epot = -22.0542552611187 | etot = -15.695235411981 +660000 ekin = 2.90074521854052 | erot = 1.62850743298554 | epot = -22.1003034196589 | etot = -17.5710507681328 +661000 ekin = 3.26666543815737 | erot = 1.86223225384175 | epot = -22.202664217118 | etot = -17.0737665251189 +662000 ekin = 3.1558491019044 | erot = 2.16868634291728 | epot = -22.3049478747805 | etot = -16.9804124299588 +663000 ekin = 1.94349853674083 | erot = 2.45687952722591 | epot = -22.3908978754178 | etot = -17.990519811451 +664000 ekin = 1.45445820960401 | erot = 1.37641815749115 | epot = -22.5088813854798 | etot = -19.6780050183846 +665000 ekin = 1.57568561901953 | erot = 2.30379312359823 | epot = -22.5957949572927 | etot = -18.7163162146749 +666000 ekin = 2.46162449261636 | erot = 1.76978614573263 | epot = -22.7431602236664 | etot = -18.5117495853174 +667000 ekin = 2.82410423268351 | erot = 2.3383666365949 | epot = -22.9350563238978 | etot = -17.7725854546194 +668000 ekin = 2.73717686116191 | erot = 3.18779777915035 | epot = -23.0188768131827 | etot = -17.0939021728704 +669000 ekin = 3.41035672635339 | erot = 2.45479601777612 | epot = -23.0718232403886 | etot = -17.2066704962591 +670000 ekin = 2.54649164859505 | erot = 1.99520979169172 | epot = -23.0246775830826 | etot = -18.4829761427959 +671000 ekin = 2.3802025684166 | erot = 3.00742736998541 | epot = -23.0023479116088 | etot = -17.6147179732068 +672000 ekin = 3.0126952152146 | erot = 2.55297219144565 | epot = -22.9947723733502 | etot = -17.4291049666899 +673000 ekin = 3.39486270740071 | erot = 2.3808700262033 | epot = -22.9033457919095 | etot = -17.1276130583054 +674000 ekin = 3.13698489626099 | erot = 2.10609113054063 | epot = -22.8089270617647 | etot = -17.5658510349631 +675000 ekin = 2.32294130821675 | erot = 1.5285851482073 | epot = -22.6840603385672 | etot = -18.8325338821432 +676000 ekin = 2.43564726401376 | erot = 2.26860623636408 | epot = -22.6133446272028 | etot = -17.909091126825 +677000 ekin = 2.75162757613842 | erot = 1.94219014743457 | epot = -22.7039380847023 | etot = -18.0101203611293 +678000 ekin = 2.86321973687601 | erot = 1.66387788364136 | epot = -22.7223510604726 | etot = -18.1952534399553 +679000 ekin = 2.35079208772869 | erot = 2.70386328048641 | epot = -22.7977445343495 | etot = -17.7430891661344 +680000 ekin = 2.48449675729004 | erot = 2.90645575582477 | epot = -22.8559375688936 | etot = -17.4649850557788 +681000 ekin = 1.91581136662333 | erot = 2.58179603882022 | epot = -22.7891325966099 | etot = -18.2915251911664 +682000 ekin = 2.10466427353705 | erot = 2.69470735868807 | epot = -22.6959043279182 | etot = -17.896532695693 +683000 ekin = 2.34504535409021 | erot = 2.11592035700791 | epot = -22.5718670441909 | etot = -18.1109013330928 +684000 ekin = 2.87198876498958 | erot = 2.65732173958706 | epot = -22.4986977268025 | etot = -16.9693872222258 +685000 ekin = 3.03375238110975 | erot = 2.18190577381518 | epot = -22.4634189289575 | etot = -17.2477607740326 +686000 ekin = 2.46248931777656 | erot = 2.43025710170918 | epot = -22.4079029677658 | etot = -17.5151565482801 +687000 ekin = 2.74662486817896 | erot = 1.79609152562411 | epot = -22.3360381567114 | etot = -17.7933217629083 +688000 ekin = 1.81703718003042 | erot = 2.06511603415635 | epot = -22.3083758541198 | etot = -18.426222639933 +689000 ekin = 2.84202633430564 | erot = 1.92033962884777 | epot = -22.3752571185822 | etot = -17.6128911554288 +690000 ekin = 2.07525448405017 | erot = 2.46342632176817 | epot = -22.4633535431152 | etot = -17.9246727372969 +691000 ekin = 2.12558517800138 | erot = 2.52961097164 | epot = -22.483426266766 | etot = -17.8282301171246 +692000 ekin = 2.86720433292881 | erot = 2.65102150657025 | epot = -22.4003374064863 | etot = -16.8821115669873 +693000 ekin = 2.30143055084864 | erot = 2.52290946383361 | epot = -22.2859681228792 | etot = -17.4616281081969 +694000 ekin = 2.88400701080875 | erot = 2.34320802755437 | epot = -22.206318584282 | etot = -16.9791035459189 +695000 ekin = 2.93184722112895 | erot = 2.22933507376834 | epot = -22.2348177906806 | etot = -17.0736354957833 +696000 ekin = 2.63173546326796 | erot = 2.34275369570833 | epot = -22.274597219839 | etot = -17.3001080608627 +697000 ekin = 1.87084079501972 | erot = 1.78050094908734 | epot = -22.2730387150935 | etot = -18.6216969709865 +698000 ekin = 2.19791428580687 | erot = 2.82883581756349 | epot = -22.2819378523405 | etot = -17.2551877489701 +699000 ekin = 2.34279295545267 | erot = 2.07514436344563 | epot = -22.2061425261575 | etot = -17.7882052072592 +700000 ekin = 2.576803119019 | erot = 2.32167543064962 | epot = -22.1658685747825 | etot = -17.2673900251139 +701000 ekin = 2.9943865807539 | erot = 1.89982533986206 | epot = -22.2191193266439 | etot = -17.324907406028 +702000 ekin = 2.68548464757459 | erot = 2.65050744453208 | epot = -22.2547415922757 | etot = -16.918749500169 +703000 ekin = 2.01996957402024 | erot = 2.04032822241737 | epot = -22.3253693056515 | etot = -18.2650715092139 +704000 ekin = 1.58871069317829 | erot = 1.64014270467762 | epot = -22.3617232281452 | etot = -19.1328698302893 +705000 ekin = 2.3089415754982 | erot = 1.90252913035993 | epot = -22.4307958564623 | etot = -18.2193251506042 +706000 ekin = 2.61729186445574 | erot = 3.21879868039103 | epot = -22.5603358780911 | etot = -16.7242453332443 +707000 ekin = 2.60797107906866 | erot = 2.31455039977396 | epot = -22.7102471053997 | etot = -17.7877256265571 +708000 ekin = 1.81633850341999 | erot = 2.3482257566942 | epot = -22.841408787855 | etot = -18.6768445277408 +709000 ekin = 1.83541322105378 | erot = 2.51792380003796 | epot = -23.0137235815795 | etot = -18.6603865604878 +710000 ekin = 2.2142058326246 | erot = 1.92378721690473 | epot = -23.1433453130909 | etot = -19.0053522635615 +711000 ekin = 2.06744054454467 | erot = 2.3981170935319 | epot = -23.1532717948855 | etot = -18.687714156809 +712000 ekin = 2.1727947270635 | erot = 1.75362175342097 | epot = -23.0479262273955 | etot = -19.121509746911 +713000 ekin = 2.87118830138474 | erot = 1.54943993787555 | epot = -22.8430575230906 | etot = -18.4224292838303 +714000 ekin = 2.0107946674397 | erot = 1.87510988392751 | epot = -22.9212969433221 | etot = -19.0353923919549 +715000 ekin = 2.4992182958927 | erot = 1.91934008289236 | epot = -22.9679126658062 | etot = -18.5493542870211 +716000 ekin = 2.94666510633353 | erot = 2.18714442405523 | epot = -23.033997097429 | etot = -17.9001875670402 +717000 ekin = 3.07404079722085 | erot = 2.46628262765133 | epot = -23.1869721551174 | etot = -17.6466487302452 +718000 ekin = 3.47060078371109 | erot = 2.28206620506093 | epot = -23.2524492340768 | etot = -17.4997822453048 +719000 ekin = 4.08343792096552 | erot = 3.10429377075217 | epot = -23.2448292181926 | etot = -16.0570975264749 +720000 ekin = 2.52774819763971 | erot = 1.92867508904585 | epot = -23.1435084559682 | etot = -18.6870851692826 +721000 ekin = 2.58294244811584 | erot = 2.0383053178033 | epot = -23.0601633758883 | etot = -18.4389156099691 +722000 ekin = 1.9445888545086 | erot = 2.32008660802523 | epot = -22.9811929404572 | etot = -18.7165174779234 +723000 ekin = 2.41998340576259 | erot = 2.12369728979369 | epot = -23.0570939793876 | etot = -18.5134132838314 +724000 ekin = 1.90406371300861 | erot = 1.97533505769876 | epot = -23.1267629042383 | etot = -19.247364133531 +725000 ekin = 2.14287056473422 | erot = 2.79289687450022 | epot = -23.1695632046138 | etot = -18.2337957653794 +726000 ekin = 2.26423317099721 | erot = 2.55343019202652 | epot = -23.2432909083709 | etot = -18.4256275453472 +727000 ekin = 1.69816397656716 | erot = 2.64011919415556 | epot = -23.298837689321 | etot = -18.9605545185982 +728000 ekin = 2.23000862561934 | erot = 3.58521470578671 | epot = -23.3528245832467 | etot = -17.5376012518407 +729000 ekin = 2.70076566380343 | erot = 1.73367306410751 | epot = -23.3971276122796 | etot = -18.9626888843686 +730000 ekin = 2.54818673802759 | erot = 2.77394958410256 | epot = -23.3988686964744 | etot = -18.0767323743443 +731000 ekin = 2.69782550956093 | erot = 2.04855826523075 | epot = -23.4310969813891 | etot = -18.6847132065974 +732000 ekin = 2.79613002753752 | erot = 1.87867430486715 | epot = -23.4885161441653 | etot = -18.8137118117607 +733000 ekin = 2.20346728125046 | erot = 2.64365594749975 | epot = -23.5261309431819 | etot = -18.6790077144317 +734000 ekin = 1.69780111261443 | erot = 2.30917909560787 | epot = -23.5188046470475 | etot = -19.5118244388252 +735000 ekin = 2.18402736165936 | erot = 2.72051620230871 | epot = -23.4712689506938 | etot = -18.5667253867257 +736000 ekin = 2.26138696009404 | erot = 1.17083930058803 | epot = -23.4348107178754 | etot = -20.0025844571934 +737000 ekin = 2.22219419044796 | erot = 3.14114682990362 | epot = -23.3869288757725 | etot = -18.0235878554209 +738000 ekin = 1.75464981631084 | erot = 2.28485941478058 | epot = -23.2709893028052 | etot = -19.2314800717138 +739000 ekin = 1.41806378584362 | erot = 2.16714034112821 | epot = -23.2213775300889 | etot = -19.636173403117 +740000 ekin = 1.90901017596351 | erot = 2.27102763422491 | epot = -23.1829198366046 | etot = -19.0028820264162 +741000 ekin = 1.9930994487751 | erot = 2.73523269523399 | epot = -23.1169670577824 | etot = -18.3886349137733 +742000 ekin = 1.99876411117685 | erot = 1.89882876917754 | epot = -23.0300825800851 | etot = -19.1324896997307 +743000 ekin = 1.96472814667687 | erot = 2.79504722629174 | epot = -22.8990488521609 | etot = -18.1392734791923 +744000 ekin = 2.02442646092311 | erot = 2.35044838626024 | epot = -22.8186526150799 | etot = -18.4437777678966 +745000 ekin = 1.65344231988822 | erot = 1.87919095141018 | epot = -22.7624827109091 | etot = -19.2298494396107 +746000 ekin = 2.1034668185472 | erot = 2.03078530569663 | epot = -22.743454277698 | etot = -18.6092021534542 +747000 ekin = 3.06690414848489 | erot = 1.6754029786949 | epot = -22.7625979159322 | etot = -18.0202907887524 +748000 ekin = 3.06965414483401 | erot = 1.86014593098643 | epot = -22.8118567150739 | etot = -17.8820566392535 +749000 ekin = 2.53718696167217 | erot = 2.02710579059033 | epot = -22.8431046011969 | etot = -18.2788118489344 +750000 ekin = 2.75657354808099 | erot = 2.34953156046291 | epot = -22.9548205390759 | etot = -17.848715430532 +751000 ekin = 2.52290020835147 | erot = 2.34873763599977 | epot = -23.0238691402084 | etot = -18.1522312958572 +752000 ekin = 2.47222247869325 | erot = 1.68679846444683 | epot = -22.9958559112491 | etot = -18.8368349681091 +753000 ekin = 2.48263277172423 | erot = 1.54669382815742 | epot = -23.0858212396418 | etot = -19.0564946397602 +754000 ekin = 2.54806257410878 | erot = 2.26636466676163 | epot = -23.1896472696842 | etot = -18.3752200288138 +755000 ekin = 1.53168409517921 | erot = 2.22665478278013 | epot = -23.2059118234918 | etot = -19.4475729455324 +756000 ekin = 2.10751715527953 | erot = 2.40525774326678 | epot = -23.114150245375 | etot = -18.6013753468287 +757000 ekin = 2.93395895491028 | erot = 2.05821177584909 | epot = -23.0783355599275 | etot = -18.0861648291682 +758000 ekin = 2.38307945406232 | erot = 2.50598165375058 | epot = -22.9691152621287 | etot = -18.0800541543158 +759000 ekin = 2.60292884338835 | erot = 2.36916677072548 | epot = -22.7987274767845 | etot = -17.8266318626707 +760000 ekin = 3.2284318196987 | erot = 2.73822716520638 | epot = -22.6756147646272 | etot = -16.7089557797221 +761000 ekin = 3.41868727786494 | erot = 1.68975765213408 | epot = -22.5638952547581 | etot = -17.4554503247591 +762000 ekin = 3.43033946346107 | erot = 2.5283975140253 | epot = -22.3549032489322 | etot = -16.3961662714458 +763000 ekin = 2.65773094814485 | erot = 1.83975133975562 | epot = -22.234833339183 | etot = -17.7373510512825 +764000 ekin = 2.3815484472129 | erot = 2.70684992442147 | epot = -22.0890752688231 | etot = -17.0006768971887 +765000 ekin = 2.23212803588897 | erot = 1.94868597739427 | epot = -21.9918715237933 | etot = -17.81105751051 +766000 ekin = 2.49097891886066 | erot = 1.96764603993156 | epot = -21.8443436680801 | etot = -17.3857187092879 +767000 ekin = 2.3457921497675 | erot = 2.64636009163513 | epot = -21.7634962034012 | etot = -16.7713439619986 +768000 ekin = 1.87671147825106 | erot = 2.05549869178485 | epot = -21.7324638416528 | etot = -17.8002536716169 +769000 ekin = 3.05058687860239 | erot = 2.66104171022372 | epot = -21.66792195987 | etot = -15.9562933710439 +770000 ekin = 2.44115683640633 | erot = 1.97554932479751 | epot = -21.6448820664751 | etot = -17.2281759052712 +771000 ekin = 2.23687464004429 | erot = 2.55040970708789 | epot = -21.5811924169692 | etot = -16.793908069837 +772000 ekin = 2.76529680592008 | erot = 1.97873499811185 | epot = -21.6543448952384 | etot = -16.9103130912064 +773000 ekin = 2.14632888240094 | erot = 2.41330587525514 | epot = -21.7728828090228 | etot = -17.2132480513667 +774000 ekin = 2.19848545803079 | erot = 1.9765131024719 | epot = -21.8398858604883 | etot = -17.6648872999856 +775000 ekin = 2.52300137989083 | erot = 2.80935365273515 | epot = -22.0219985274259 | etot = -16.6896434947999 +776000 ekin = 3.15842485269274 | erot = 2.47066157093645 | epot = -22.183029096161 | etot = -16.5539426725319 +777000 ekin = 1.91784338934576 | erot = 1.76045300517081 | epot = -22.2259652888115 | etot = -18.547668894295 +778000 ekin = 2.93738066043324 | erot = 2.29457842490289 | epot = -22.2339481852394 | etot = -17.0019890999032 +779000 ekin = 3.09847206114319 | erot = 2.0455771700605 | epot = -22.240438366259 | etot = -17.0963891350553 +780000 ekin = 2.86127568397807 | erot = 3.12055135138658 | epot = -22.1865692766137 | etot = -16.204742241249 +781000 ekin = 2.36069914420785 | erot = 3.53186431088487 | epot = -22.1210563364352 | etot = -16.2284928813425 +782000 ekin = 2.31592690319261 | erot = 2.85730598644035 | epot = -22.0302855151548 | etot = -16.8570526255218 +783000 ekin = 1.86647729944746 | erot = 3.03450246093099 | epot = -21.886014367949 | etot = -16.9850346075705 +784000 ekin = 2.04055627573201 | erot = 2.26047908607293 | epot = -21.7534271639393 | etot = -17.4523918021343 +785000 ekin = 2.02248469828703 | erot = 2.13950421850547 | epot = -21.6318967501918 | etot = -17.4699078333993 +786000 ekin = 2.34211746551602 | erot = 2.34838133643265 | epot = -21.5890308210084 | etot = -16.8985320190598 +787000 ekin = 2.74971447554938 | erot = 2.24123553296042 | epot = -21.5192132515563 | etot = -16.5282632430465 +788000 ekin = 2.14142056672039 | erot = 2.27008574684965 | epot = -21.4982362621714 | etot = -17.0867299486013 +789000 ekin = 1.98580913341303 | erot = 2.00702444041791 | epot = -21.5235331659838 | etot = -17.5306995921529 +790000 ekin = 1.68578263083924 | erot = 1.43485602862151 | epot = -21.6440081593601 | etot = -18.5233694998993 +791000 ekin = 2.13583938840528 | erot = 2.5373009545894 | epot = -21.7916440698418 | etot = -17.1185037268471 +792000 ekin = 1.71937483898028 | erot = 2.19563804216011 | epot = -21.8794946709408 | etot = -17.9644817898004 +793000 ekin = 3.15868943755338 | erot = 1.94575875708421 | epot = -22.0398145404617 | etot = -16.9353663458242 +794000 ekin = 2.45478602538954 | erot = 3.00825554959563 | epot = -22.0843165283013 | etot = -16.6212749533161 +795000 ekin = 2.87760320917193 | erot = 3.06920266633565 | epot = -22.1595628991904 | etot = -16.2127570236829 +796000 ekin = 2.29816690595058 | erot = 1.61510864654315 | epot = -22.1869705548184 | etot = -18.2736950023247 +797000 ekin = 2.1901525606721 | erot = 3.65734446008353 | epot = -22.1432608090644 | etot = -16.2957637883088 +798000 ekin = 2.12018787925578 | erot = 2.92822258455555 | epot = -22.1311312789224 | etot = -17.0827208151111 +799000 ekin = 2.49416140154829 | erot = 2.73328283280216 | epot = -22.0825726051882 | etot = -16.8551283708378 +800000 ekin = 2.18932007838552 | erot = 2.97640731559393 | epot = -21.979362152191 | etot = -16.8136347582115 +801000 ekin = 2.58827112124838 | erot = 2.7440442483726 | epot = -21.9108490336924 | etot = -16.5785336640714 +802000 ekin = 3.07870342348167 | erot = 2.87961505564287 | epot = -21.822560433681 | etot = -15.8642419545565 +803000 ekin = 2.2398624368064 | erot = 2.50525058807596 | epot = -21.72759408181 | etot = -16.9824810569277 +804000 ekin = 2.91885860068426 | erot = 1.57889040451428 | epot = -21.6896376725624 | etot = -17.1918886673638 +805000 ekin = 2.68277363980193 | erot = 3.05527868915738 | epot = -21.6710764398127 | etot = -15.9330241108534 +806000 ekin = 2.77769607049014 | erot = 2.1888727690908 | epot = -21.6314833902337 | etot = -16.6649145506527 +807000 ekin = 2.12673239079668 | erot = 2.86003407600806 | epot = -21.7295924017744 | etot = -16.7428259349697 +808000 ekin = 1.89599614774678 | erot = 2.29237053227662 | epot = -21.7511361510417 | etot = -17.5627694710183 +809000 ekin = 1.96405066221971 | erot = 1.92110393348368 | epot = -21.7075506883706 | etot = -17.8223960926672 +810000 ekin = 2.01518137594275 | erot = 2.60119247286596 | epot = -21.6788385874729 | etot = -17.0624647386642 +811000 ekin = 2.31084800889289 | erot = 1.75270367309064 | epot = -21.6837819033719 | etot = -17.6202302213883 +812000 ekin = 2.5770103100209 | erot = 2.34932304073588 | epot = -21.7246716033188 | etot = -16.798338252562 +813000 ekin = 2.87706904926076 | erot = 2.35686610624154 | epot = -21.8375922236049 | etot = -16.6036570681026 +814000 ekin = 2.89908405023866 | erot = 2.31423299883226 | epot = -21.8379261473901 | etot = -16.6246090983192 +815000 ekin = 2.54050064212256 | erot = 2.82732568868829 | epot = -21.6068952707049 | etot = -16.2390689398941 +816000 ekin = 2.17040404256387 | erot = 2.53711088209172 | epot = -21.5560322071983 | etot = -16.8485172825427 +817000 ekin = 1.7842696071831 | erot = 2.67810959410576 | epot = -21.8738878035325 | etot = -17.4115086022437 +818000 ekin = 2.29659398017838 | erot = 2.63718862373664 | epot = -22.164277271391 | etot = -17.230494667476 +819000 ekin = 2.15801167884062 | erot = 2.62095572928877 | epot = -22.1816109590116 | etot = -17.4026435508822 +820000 ekin = 1.94384548213955 | erot = 2.28597987799275 | epot = -22.0986187375022 | etot = -17.8687933773699 +821000 ekin = 2.10513194007576 | erot = 2.38698175569219 | epot = -22.1146754444785 | etot = -17.6225617487105 +822000 ekin = 2.24819716786441 | erot = 2.15258805680875 | epot = -22.0539472940486 | etot = -17.6531620693754 +823000 ekin = 2.26584952085583 | erot = 2.60619852526611 | epot = -22.0924201800579 | etot = -17.220372133936 +824000 ekin = 1.65187935478514 | erot = 1.48703119037228 | epot = -22.1682955997986 | etot = -19.0293850546412 +825000 ekin = 1.60213094818648 | erot = 1.98592524368393 | epot = -22.1687104063708 | etot = -18.5806542145004 +826000 ekin = 1.97430720107255 | erot = 2.19175014677159 | epot = -22.1061881978655 | etot = -17.9401308500213 +827000 ekin = 2.1793755983405 | erot = 2.44975419075935 | epot = -21.9704586607304 | etot = -17.3413288716305 +828000 ekin = 1.90399088418588 | erot = 2.72532994798816 | epot = -21.9585923270583 | etot = -17.3292714948842 +829000 ekin = 2.06478103068884 | erot = 2.9658303540259 | epot = -21.9849402038682 | etot = -16.9543288191534 +830000 ekin = 1.98920675238979 | erot = 2.15331250444996 | epot = -22.0339146439702 | etot = -17.8913953871305 +831000 ekin = 2.33567462674689 | erot = 2.36888807413497 | epot = -22.1271573756461 | etot = -17.4225946747643 +832000 ekin = 2.0119470999192 | erot = 1.94769143293625 | epot = -22.2038482709588 | etot = -18.2442097381034 +833000 ekin = 2.26025933495881 | erot = 2.16012558191462 | epot = -22.2882501045414 | etot = -17.867865187668 +834000 ekin = 2.11529426445865 | erot = 1.52405523315358 | epot = -22.3075608649826 | etot = -18.6682113673703 +835000 ekin = 2.8992075090551 | erot = 2.73801081751029 | epot = -22.3942491248321 | etot = -16.7570307982667 +836000 ekin = 3.33069528982658 | erot = 2.4277126780786 | epot = -22.4321737300744 | etot = -16.6737657621692 +837000 ekin = 2.74831774333782 | erot = 2.31991750378628 | epot = -22.4290234552872 | etot = -17.3607882081631 +838000 ekin = 3.13714871682188 | erot = 3.21601751721777 | epot = -22.4642383906451 | etot = -16.1110721566054 +839000 ekin = 2.73358272751807 | erot = 2.60144488190506 | epot = -22.4062682687368 | etot = -17.0712406593137 +840000 ekin = 2.96121930874637 | erot = 1.42725942278118 | epot = -22.3293755621294 | etot = -17.9408968306018 +841000 ekin = 2.95134811170866 | erot = 2.67666861874608 | epot = -22.2936348151224 | etot = -16.6656180846677 +842000 ekin = 2.15783928636401 | erot = 2.30287195796693 | epot = -22.2978011147172 | etot = -17.8370898703863 +843000 ekin = 2.84565152669617 | erot = 2.0510801477514 | epot = -22.3162908719779 | etot = -17.4195591975303 +844000 ekin = 2.99645803669157 | erot = 1.50433298006521 | epot = -22.3768320579304 | etot = -17.8760410411736 +845000 ekin = 3.20248025697125 | erot = 2.27246140825564 | epot = -22.3985708422076 | etot = -16.9236291769807 +846000 ekin = 3.35773945734322 | erot = 2.54074745551552 | epot = -22.4144833015876 | etot = -16.5159963887289 +847000 ekin = 2.17779203733109 | erot = 2.73817581188461 | epot = -22.3524825149514 | etot = -17.4365146657357 +848000 ekin = 2.51627348417144 | erot = 2.81170686694717 | epot = -22.2066307862469 | etot = -16.8786504351283 +849000 ekin = 1.99679455190557 | erot = 2.56855846773092 | epot = -22.0763062134929 | etot = -17.5109531938564 +850000 ekin = 2.05799123916876 | erot = 1.80888056240785 | epot = -22.0665032506706 | etot = -18.1996314490939 +851000 ekin = 2.0888979376792 | erot = 1.86172181790289 | epot = -22.0629711763889 | etot = -18.1123514208068 +852000 ekin = 1.68990805178902 | erot = 1.42763535981882 | epot = -22.002100112701 | etot = -18.8845567010931 +853000 ekin = 1.99310886654811 | erot = 3.05226969048292 | epot = -22.0306903552278 | etot = -16.9853117981968 +854000 ekin = 2.98378700534986 | erot = 2.2310274524054 | epot = -22.1115820238811 | etot = -16.8967675661258 +855000 ekin = 2.17087415585277 | erot = 2.8378147226879 | epot = -22.1115106395971 | etot = -17.1028217610564 +856000 ekin = 2.42228475387308 | erot = 1.53328604594478 | epot = -22.0841888628209 | etot = -18.128618063003 +857000 ekin = 2.50431566526894 | erot = 2.80498769176516 | epot = -21.9881235267534 | etot = -16.6788201697193 +858000 ekin = 2.17333686672378 | erot = 2.8259111550717 | epot = -21.9093201368614 | etot = -16.9100721150659 +859000 ekin = 2.29930070497243 | erot = 2.32417368939061 | epot = -21.8849849636104 | etot = -17.2615105692473 +860000 ekin = 1.99153024057672 | erot = 1.94674638600151 | epot = -21.8998709373217 | etot = -17.9615943107434 +861000 ekin = 2.69177523559624 | erot = 2.23997750036373 | epot = -21.8915522194994 | etot = -16.9597994835394 +862000 ekin = 2.86117050047984 | erot = 2.41530060322761 | epot = -21.876687883023 | etot = -16.6002167793156 +863000 ekin = 2.59841547044276 | erot = 3.3501705008543 | epot = -21.8162649771437 | etot = -15.8676790058467 +864000 ekin = 2.92496272611018 | erot = 2.30350236144453 | epot = -21.7820358973268 | etot = -16.5535708097721 +865000 ekin = 1.94718216128952 | erot = 2.16572180916633 | epot = -21.7000823492195 | etot = -17.5871783787636 +866000 ekin = 1.99006127871689 | erot = 1.65011901234952 | epot = -21.6190182409268 | etot = -17.9788379498604 +867000 ekin = 1.76250718110787 | erot = 3.37958608370307 | epot = -21.5401486584561 | etot = -16.3980553936452 +868000 ekin = 1.845623450314 | erot = 2.78812196028616 | epot = -21.5771917352235 | etot = -16.9434463246234 +869000 ekin = 2.39300849969205 | erot = 2.38301618173176 | epot = -21.6710790825578 | etot = -16.895054401134 +870000 ekin = 1.91899243212541 | erot = 3.22222440717393 | epot = -21.6734733803871 | etot = -16.5322565410878 +871000 ekin = 3.10255827845531 | erot = 2.95454268850896 | epot = -21.5913249106744 | etot = -15.5342239437101 +872000 ekin = 2.94582883077842 | erot = 1.38261935263093 | epot = -21.4597055547833 | etot = -17.1312573713739 +873000 ekin = 2.72830997927423 | erot = 2.23223699637274 | epot = -21.3657566950046 | etot = -16.4052097193577 +874000 ekin = 2.41464704842015 | erot = 2.10351476791496 | epot = -21.2635161734954 | etot = -16.7453543571603 +875000 ekin = 2.99468455803482 | erot = 2.72761242382524 | epot = -21.2488881289381 | etot = -15.526591147078 +876000 ekin = 2.13382009818493 | erot = 2.23152059294678 | epot = -21.2388603913311 | etot = -16.8735197001994 +877000 ekin = 1.839391763993 | erot = 1.607279977226 | epot = -21.2015948102408 | etot = -17.7549230690218 +878000 ekin = 2.01267175782178 | erot = 2.73109796378376 | epot = -21.2125253160263 | etot = -16.4687555944208 +879000 ekin = 1.42911941081343 | erot = 2.17371661448622 | epot = -21.1345316334464 | etot = -17.5316956081468 +880000 ekin = 2.10605339224633 | erot = 2.5884751778913 | epot = -21.0787246891645 | etot = -16.3841961190269 +881000 ekin = 1.54924791070118 | erot = 2.0068513915418 | epot = -21.1356465207066 | etot = -17.5795472184637 +882000 ekin = 2.199643157135 | erot = 2.65509097106007 | epot = -21.2389026935677 | etot = -16.3841685653726 +883000 ekin = 2.20850404171077 | erot = 2.22833605977577 | epot = -21.3067394383395 | etot = -16.869899336853 +884000 ekin = 2.76978562647275 | erot = 2.10395845939756 | epot = -21.3429618615585 | etot = -16.4692177756882 +885000 ekin = 1.93339807672781 | erot = 1.77156241344967 | epot = -21.3858074096933 | etot = -17.6808469195158 +886000 ekin = 2.00408769971894 | erot = 3.10736267931439 | epot = -21.3935346347812 | etot = -16.2820842557479 +887000 ekin = 1.96987943750801 | erot = 2.82035886899744 | epot = -21.3967073105593 | etot = -16.6064690040538 +888000 ekin = 1.91464371566411 | erot = 2.33371232948867 | epot = -21.4767119016419 | etot = -17.2283558564891 +889000 ekin = 1.88227414130201 | erot = 2.45915914930408 | epot = -21.5790392436829 | etot = -17.2376059530768 +890000 ekin = 1.84515176532447 | erot = 2.24992378831499 | epot = -21.6747594004542 | etot = -17.5796838468148 +891000 ekin = 2.6016566869706 | erot = 2.34500453305753 | epot = -21.8016735536793 | etot = -16.8550123336512 +892000 ekin = 2.71287751886859 | erot = 2.69544224573131 | epot = -21.9063749565585 | etot = -16.4980551919586 +893000 ekin = 2.17862714611329 | erot = 2.98452123742221 | epot = -21.9155556335137 | etot = -16.7524072499782 +894000 ekin = 2.52079948361477 | erot = 2.46355933674925 | epot = -21.915110079455 | etot = -16.930751259091 +895000 ekin = 2.53566097944338 | erot = 2.4513045444294 | epot = -21.947786087834 | etot = -16.9608205639612 +896000 ekin = 1.84455393639213 | erot = 2.77499090684945 | epot = -21.9167554809878 | etot = -17.2972106377463 +897000 ekin = 2.38519326880694 | erot = 2.019802873173 | epot = -21.8644918203993 | etot = -17.4594956784193 +898000 ekin = 2.14354914407572 | erot = 1.89196669459414 | epot = -21.7953104274974 | etot = -17.7597945888276 +899000 ekin = 2.65485657727374 | erot = 2.3237456003819 | epot = -21.6964754705568 | etot = -16.7178732929012 +900000 ekin = 2.1437154528087 | erot = 2.28119066740275 | epot = -21.6934954112434 | etot = -17.2685892910319 +901000 ekin = 1.93965814946881 | erot = 1.81495571440908 | epot = -21.7369092433376 | etot = -17.9822953794597 +902000 ekin = 2.60993957981555 | erot = 2.50321386623391 | epot = -21.6842517568354 | etot = -16.571098310786 +903000 ekin = 1.87484955546757 | erot = 2.17008893987962 | epot = -21.6383913984978 | etot = -17.5934529031506 +904000 ekin = 1.87454064845764 | erot = 2.32484081519398 | epot = -21.5866637125315 | etot = -17.3872822488799 +905000 ekin = 2.31407473814844 | erot = 2.15094868542391 | epot = -21.5154415841816 | etot = -17.0504181606093 +906000 ekin = 2.49583383758853 | erot = 2.25091096848461 | epot = -21.5170853902294 | etot = -16.7703405841563 +907000 ekin = 4.19798796104344 | erot = 2.5030532322807 | epot = -21.5976736513859 | etot = -14.8966324580618 +908000 ekin = 3.26730891548756 | erot = 2.11222217905481 | epot = -21.7526644402476 | etot = -16.3731333457052 +909000 ekin = 2.64106561110374 | erot = 1.92197432194202 | epot = -21.8748043207924 | etot = -17.3117643877467 +910000 ekin = 2.61805562731904 | erot = 2.90737422678703 | epot = -21.9709470207745 | etot = -16.4455171666685 +911000 ekin = 2.62012718860141 | erot = 4.35318528241844 | epot = -22.0282478750366 | etot = -15.0549354040167 +912000 ekin = 3.07628909273118 | erot = 3.69371809788395 | epot = -22.0511180009901 | etot = -15.281110810375 +913000 ekin = 2.82956898268831 | erot = 2.17078429141201 | epot = -22.0149543706266 | etot = -17.0146010965263 +914000 ekin = 2.16386655780066 | erot = 1.22303673036133 | epot = -21.9243495493208 | etot = -18.5374462611589 +915000 ekin = 1.59447095066509 | erot = 2.95966391292002 | epot = -21.8264580452026 | etot = -17.2723231816175 +916000 ekin = 2.58365539107523 | erot = 3.75147270955029 | epot = -21.8922962938608 | etot = -15.5571681932352 +917000 ekin = 3.01643029206973 | erot = 2.88035639021004 | epot = -21.9150526568514 | etot = -16.0182659745717 +918000 ekin = 2.89929776900147 | erot = 2.64137394041291 | epot = -21.9078998623094 | etot = -16.367228152895 +919000 ekin = 3.20476671865012 | erot = 2.76036957969153 | epot = -21.8878055443404 | etot = -15.9226692459988 +920000 ekin = 2.28949350558683 | erot = 2.38558870046816 | epot = -21.8659406759967 | etot = -17.1908584699418 +921000 ekin = 2.39158312157105 | erot = 2.44959700788167 | epot = -21.8638974869225 | etot = -17.0227173574697 +922000 ekin = 2.30678787768012 | erot = 2.42145678067298 | epot = -21.8218369909645 | etot = -17.0935923326114 +923000 ekin = 2.49697778842282 | erot = 2.66565493744118 | epot = -21.8078634464733 | etot = -16.6452307206093 +924000 ekin = 1.55676047489501 | erot = 2.97115254541007 | epot = -21.7829722234117 | etot = -17.2550592031067 +925000 ekin = 1.86603413909288 | erot = 1.96274861601779 | epot = -21.7288604040749 | etot = -17.9000776489642 +926000 ekin = 1.36993364395821 | erot = 2.11749584641399 | epot = -21.7083442855147 | etot = -18.2209147951426 +927000 ekin = 2.55718977538496 | erot = 2.08109095048881 | epot = -21.7242353526192 | etot = -17.0859546267455 +928000 ekin = 2.0974272910786 | erot = 2.73922911267236 | epot = -21.7673808868819 | etot = -16.9307244831309 +929000 ekin = 1.85550591174834 | erot = 1.84990976935039 | epot = -21.8639426090857 | etot = -18.158526927987 +930000 ekin = 1.99594723517184 | erot = 2.09151231016387 | epot = -21.8461015073053 | etot = -17.7586419619696 +931000 ekin = 2.45331651079283 | erot = 1.86703658018613 | epot = -21.7382799817762 | etot = -17.4179268907972 +932000 ekin = 2.76909250526759 | erot = 2.34990175754269 | epot = -21.7639792890094 | etot = -16.6449850261991 +933000 ekin = 3.04747366335481 | erot = 2.52740756503515 | epot = -21.6783727845496 | etot = -16.1034915561597 +934000 ekin = 2.93463275640818 | erot = 2.48893095891026 | epot = -21.5784996926914 | etot = -16.1549359773729 +935000 ekin = 2.77799347567549 | erot = 2.1392935841225 | epot = -21.5334239467005 | etot = -16.6161368869025 +936000 ekin = 2.96529953690398 | erot = 2.07095365726714 | epot = -21.5249249864244 | etot = -16.4886717922533 +937000 ekin = 3.0485053770175 | erot = 2.32432162998051 | epot = -21.4386642161072 | etot = -16.0658372091092 +938000 ekin = 2.9926262850536 | erot = 2.35224559307843 | epot = -21.3457080466208 | etot = -16.0008361684887 +939000 ekin = 2.61238181353703 | erot = 2.26780356837292 | epot = -21.3079422537804 | etot = -16.4277568718705 +940000 ekin = 2.65930112044942 | erot = 2.75497479722395 | epot = -21.2170493356504 | etot = -15.802773417977 +941000 ekin = 2.27574261339217 | erot = 2.61419196501686 | epot = -21.1297657597673 | etot = -16.2398311813583 +942000 ekin = 1.89172011891055 | erot = 2.82029488513784 | epot = -21.0410099256114 | etot = -16.328994921563 +943000 ekin = 2.47643464476757 | erot = 2.34737109151876 | epot = -21.046668772798 | etot = -16.2228630365117 +944000 ekin = 2.13883995897326 | erot = 1.92577316206138 | epot = -21.0114219746514 | etot = -16.9468088536167 +945000 ekin = 2.57768697869113 | erot = 2.21470136124069 | epot = -21.0634624131725 | etot = -16.2710740732407 +946000 ekin = 2.36420709243625 | erot = 2.89647330776424 | epot = -21.088814693033 | etot = -15.8281342928325 +947000 ekin = 2.07104171538467 | erot = 1.86575631327232 | epot = -21.1004860950452 | etot = -17.1636880663882 +948000 ekin = 1.85532958802997 | erot = 1.36952834086551 | epot = -21.1364231315616 | etot = -17.9115652026661 +949000 ekin = 1.76206591178366 | erot = 2.31737328558629 | epot = -21.1463744779337 | etot = -17.0669352805638 +950000 ekin = 1.72021033353108 | erot = 2.24191394295309 | epot = -21.1376324866856 | etot = -17.1755082102014 +951000 ekin = 1.96140007830504 | erot = 2.32248863487758 | epot = -21.1955927656813 | etot = -16.9117040524987 +952000 ekin = 2.93256201500608 | erot = 2.74550490827503 | epot = -21.234781024541 | etot = -15.5567141012599 +953000 ekin = 2.95031285986317 | erot = 2.39822873263993 | epot = -21.252609183133 | etot = -15.9040675906299 +954000 ekin = 3.09579074538114 | erot = 1.98159252445734 | epot = -21.1641538136742 | etot = -16.0867705438357 +955000 ekin = 3.59360323486038 | erot = 2.06789679071821 | epot = -21.0522880782498 | etot = -15.3907880526712 +956000 ekin = 2.97416074498497 | erot = 3.66953591785751 | epot = -20.9097603766373 | etot = -14.2660637137948 +957000 ekin = 3.03140562067951 | erot = 2.66078083760708 | epot = -20.741905867784 | etot = -15.0497194094974 +958000 ekin = 2.68913434704072 | erot = 2.94057112873834 | epot = -20.5488384129041 | etot = -14.9191329371251 +959000 ekin = 1.93264217407773 | erot = 2.45198406257092 | epot = -20.468781161493 | etot = -16.0841549248444 +960000 ekin = 1.49632279167952 | erot = 3.13346348599987 | epot = -20.4844974178568 | etot = -15.8547111401774 +961000 ekin = 1.96353429663481 | erot = 2.07553358516994 | epot = -20.4805590123497 | etot = -16.441491130545 +962000 ekin = 2.02830196392007 | erot = 1.88908496389356 | epot = -20.5374211599971 | etot = -16.6200342321835 +963000 ekin = 1.80829526034561 | erot = 2.46258345726267 | epot = -20.5841835730967 | etot = -16.3133048554884 +964000 ekin = 2.79449124937198 | erot = 2.42527551362846 | epot = -20.623880544448 | etot = -15.4041137814476 +965000 ekin = 2.53493670506137 | erot = 2.27804362684503 | epot = -20.6549300812151 | etot = -15.8419497493087 +966000 ekin = 2.0920817650402 | erot = 2.27478990703181 | epot = -20.704473904241 | etot = -16.337602232169 +967000 ekin = 1.55562260797661 | erot = 3.55543363172458 | epot = -20.739375276301 | etot = -15.6283190365998 +968000 ekin = 1.93439891222236 | erot = 2.37295903815892 | epot = -20.7189229543385 | etot = -16.4115650039572 +969000 ekin = 2.16199728898303 | erot = 2.4601205252494 | epot = -20.6747113173023 | etot = -16.0525935030699 +970000 ekin = 1.84926216722517 | erot = 2.96951777569267 | epot = -20.6011599981509 | etot = -15.7823800552331 +971000 ekin = 1.93656411083027 | erot = 3.08724923997924 | epot = -20.5835250734812 | etot = -15.5597117226717 +972000 ekin = 1.90452783927713 | erot = 2.5823076678316 | epot = -20.5782905980209 | etot = -16.0914550909122 +973000 ekin = 2.1922712122506 | erot = 2.92686386394502 | epot = -20.5868173702649 | etot = -15.4676822940693 +974000 ekin = 2.53094641465528 | erot = 2.69271305556795 | epot = -20.5382547781502 | etot = -15.314595307927 +975000 ekin = 3.41187201669925 | erot = 2.32917219553093 | epot = -20.5109803919917 | etot = -14.7699361797616 +976000 ekin = 2.88156114272554 | erot = 3.10474521611246 | epot = -20.5158119249461 | etot = -14.5295055661081 +977000 ekin = 2.73962881168093 | erot = 2.50884169958543 | epot = -20.4964590297999 | etot = -15.2479885185336 +978000 ekin = 1.79682802545478 | erot = 2.06924041504343 | epot = -20.4730821934977 | etot = -16.6070137529995 +979000 ekin = 1.86521389998383 | erot = 2.22151626929011 | epot = -20.4069392895634 | etot = -16.3202091202894 +980000 ekin = 1.92383169177414 | erot = 1.56425965548877 | epot = -20.3533353734708 | etot = -16.8652440262079 +981000 ekin = 1.55110199282939 | erot = 2.05381225133935 | epot = -20.3970890782076 | etot = -16.7921748340389 +982000 ekin = 1.85559395816058 | erot = 1.96991369841493 | epot = -20.499354149896 | etot = -16.6738464933205 +983000 ekin = 2.75061857015333 | erot = 1.7944840218308 | epot = -20.5241519929378 | etot = -15.9790494009537 +984000 ekin = 3.65069712553537 | erot = 2.64237329124733 | epot = -20.6374699142712 | etot = -14.3443994974885 +985000 ekin = 2.9563732193106 | erot = 2.18846412126773 | epot = -20.8122975273334 | etot = -15.6674601867551 +986000 ekin = 2.87072902054599 | erot = 2.18810434250119 | epot = -20.9390290724605 | etot = -15.8801957094134 +987000 ekin = 3.37463328642758 | erot = 2.5371366667467 | epot = -21.0098323012658 | etot = -15.0980623480916 +988000 ekin = 3.45107854450338 | erot = 3.23625536313169 | epot = -21.0554260480417 | etot = -14.3680921404067 +989000 ekin = 2.83591404363756 | erot = 2.20564156324817 | epot = -21.19499265416 | etot = -16.1534370472743 +990000 ekin = 2.79864389348437 | erot = 1.83178426663539 | epot = -21.1880268304373 | etot = -16.5575986703175 +991000 ekin = 3.14781925181036 | erot = 3.2078247180891 | epot = -21.1115234865128 | etot = -14.7558795166133 +992000 ekin = 3.30033725309946 | erot = 2.62749912694387 | epot = -21.0030296251662 | etot = -15.0751932451229 +993000 ekin = 3.07374297249949 | erot = 2.22697230616356 | epot = -20.9385586572609 | etot = -15.6378433785979 +994000 ekin = 3.21461776403449 | erot = 2.80599707993708 | epot = -20.8790524582442 | etot = -14.8584376142727 +995000 ekin = 3.25071478747345 | erot = 1.73415439498321 | epot = -20.8037804714002 | etot = -15.8189112889436 +996000 ekin = 3.07999632962569 | erot = 3.18107550500824 | epot = -20.7805295335828 | etot = -14.5194576989488 +997000 ekin = 2.97118118001025 | erot = 3.14046656474894 | epot = -20.7334885248756 | etot = -14.6218407801164 +998000 ekin = 3.09169861594907 | erot = 1.99060706981745 | epot = -20.6553134096535 | etot = -15.573007723887 +999000 ekin = 2.07498130576584 | erot = 2.75045972766921 | epot = -20.616091526295 | etot = -15.79065049286 +1000000 ekin = 2.07851119592057 | erot = 2.11869313853035 | epot = -20.4539417072875 | etot = -16.2567373728366 + 1000000 0.092378275 -1.3359709 0.057599499 -1.1484644 2.8477973e-05 +Loop time of 38.201 on 1 procs for 1000000 steps with 16 atoms + +Performance: 22617.237 tau/day, 26177.358 timesteps/s +98.6% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 27.344 | 27.344 | 27.344 | 0.0 | 71.58 +Bond | 0.88043 | 0.88043 | 0.88043 | 0.0 | 2.30 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.2073 | 0.2073 | 0.2073 | 0.0 | 0.54 +Output | 7e-06 | 7e-06 | 7e-06 | 0.0 | 0.00 +Modify | 9.4379 | 9.4379 | 9.4379 | 0.0 | 24.71 +Other | | 0.331 | | | 0.87 + +Nlocal: 16 ave 16 max 16 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 88 ave 88 max 88 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 88 +Ave neighs/atom = 5.5 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:38 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.18Jun19.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.18Jun19.duplex2.g++.4 new file mode 100644 index 0000000000..3010570379 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA/duplex2/log.18Jun19.duplex2.g++.4 @@ -0,0 +1,1167 @@ +LAMMPS (18 Jun 2019) +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000189 secs + read_data CPU = 0.003505 secs + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna/fene +bond_coeff * 2.0 0.25 0.7525 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk +pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna/stk seqav ${T} 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/stk seqav 0.1 1.3448 2.6568 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.92828 + ghost atom cutoff = 1.92828 + binsize = 0.964142, bins = 42 42 42 + 5 neighbor lists, perpetual/occasional/extra = 5 0 0 + (1) pair oxdna/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.466 | 7.648 | 7.83 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5402493 0.0070469125 -1.5332024 6.0760034e-06 +1000 ekin = 1.34565986428024 | erot = 2.31051421234078 | epot = -24.5061991591502 | etot = -20.8500250825292 +2000 ekin = 2.15911766687235 | erot = 2.16031365874706 | epot = -24.4723177103698 | etot = -20.1528863847504 +3000 ekin = 3.26561948796015 | erot = 2.75651822936605 | epot = -24.412573068346 | etot = -18.3904353510198 +4000 ekin = 1.92438809241066 | erot = 2.12016940074985 | epot = -24.3496233970111 | etot = -20.3050659038505 +5000 ekin = 1.35986357015476 | erot = 1.99413493074226 | epot = -24.2789445616949 | etot = -20.9249460607979 +6000 ekin = 2.19432475124593 | erot = 1.74281260409078 | epot = -24.2128064295788 | etot = -20.2756690742421 +7000 ekin = 2.65619274477635 | erot = 1.74094257048458 | epot = -24.1673462333493 | etot = -19.7702109180883 +8000 ekin = 2.51333548501169 | erot = 2.34649854571052 | epot = -24.0812769481836 | etot = -19.2214429174614 +9000 ekin = 2.24506493169711 | erot = 2.0652555461504 | epot = -23.9906736063989 | etot = -19.6803531285514 +10000 ekin = 2.36632635249862 | erot = 1.79592471761529 | epot = -23.9002627850602 | etot = -19.7380117149463 +11000 ekin = 2.03296432220126 | erot = 1.687070009478 | epot = -23.8527188138995 | etot = -20.1326844822202 +12000 ekin = 2.65352743446956 | erot = 2.50226345616878 | epot = -23.8480805937578 | etot = -18.6922897031194 +13000 ekin = 1.89067421214403 | erot = 2.35043092595414 | epot = -23.7714712440931 | etot = -19.5303661059949 +14000 ekin = 1.90680463918722 | erot = 2.127459870274 | epot = -23.7545354032947 | etot = -19.7202708938335 +15000 ekin = 2.40428667481004 | erot = 2.06172433796653 | epot = -23.6726347642127 | etot = -19.2066237514361 +16000 ekin = 2.7510166356243 | erot = 1.18896277635345 | epot = -23.5745121257654 | etot = -19.6345327137876 +17000 ekin = 2.44090826892662 | erot = 2.38166706806442 | epot = -23.5888433865641 | etot = -18.766268049573 +18000 ekin = 2.16977970545217 | erot = 2.46915729098831 | epot = -23.6023194416344 | etot = -18.9633824451939 +19000 ekin = 2.19378610033861 | erot = 2.45183819484608 | epot = -23.5449084745393 | etot = -18.8992841793546 +20000 ekin = 2.07734013817241 | erot = 1.81448496219961 | epot = -23.5782673056894 | etot = -19.6864422053173 +21000 ekin = 2.27781532351243 | erot = 2.76369118136087 | epot = -23.5986545956161 | etot = -18.5571480907428 +22000 ekin = 2.69375785791379 | erot = 1.86436952967315 | epot = -23.5521083325077 | etot = -18.9939809449208 +23000 ekin = 1.99952884103097 | erot = 2.28032953163858 | epot = -23.4448504933921 | etot = -19.1649921207226 +24000 ekin = 2.19993258930349 | erot = 2.97916455146846 | epot = -23.365299008021 | etot = -18.1862018672491 +25000 ekin = 2.28089469652686 | erot = 2.97627567077201 | epot = -23.2873526827526 | etot = -18.0301823154537 +26000 ekin = 1.99390998801618 | erot = 2.79250495479073 | epot = -23.1859723519608 | etot = -18.3995574091539 +27000 ekin = 2.00992865272585 | erot = 2.66533768693446 | epot = -23.0781687640813 | etot = -18.402902424421 +28000 ekin = 2.00322172723407 | erot = 2.36418499091004 | epot = -23.0032647032354 | etot = -18.6358579850913 +29000 ekin = 2.52361436071784 | erot = 2.06140753694879 | epot = -22.9685706338047 | etot = -18.383548736138 +30000 ekin = 1.94969919616482 | erot = 2.13601590002587 | epot = -22.8657664932105 | etot = -18.7800513970198 +31000 ekin = 1.81286761012387 | erot = 2.31717861791922 | epot = -22.8372197907213 | etot = -18.7071735626782 +32000 ekin = 1.88389491638451 | erot = 2.00512246825909 | epot = -22.9321024454487 | etot = -19.0430850608051 +33000 ekin = 1.78524470387102 | erot = 1.83154598239148 | epot = -22.9538943248059 | etot = -19.3371036385434 +34000 ekin = 2.28023843988047 | erot = 3.11357086039976 | epot = -23.0617618407572 | etot = -17.6679525404769 +35000 ekin = 2.88795920533174 | erot = 1.81662227096288 | epot = -23.1342233361349 | etot = -18.4296418598403 +36000 ekin = 2.40018487148211 | erot = 2.59182059399979 | epot = -23.2153198761915 | etot = -18.2233144107096 +37000 ekin = 2.22699211630433 | erot = 1.73889017332476 | epot = -23.2291614908027 | etot = -19.2632792011736 +38000 ekin = 2.13593461964592 | erot = 3.07590136326317 | epot = -23.1607724763685 | etot = -17.9489364934594 +39000 ekin = 2.08839393640823 | erot = 2.80471150509565 | epot = -23.1352878747759 | etot = -18.242182433272 +40000 ekin = 2.94982054413846 | erot = 2.19484102372242 | epot = -23.1842229043853 | etot = -18.0395613365244 +41000 ekin = 2.47855373480178 | erot = 3.46795094832273 | epot = -23.1698888629099 | etot = -17.2233841797854 +42000 ekin = 2.57225931171306 | erot = 3.11160980977123 | epot = -23.0914425999525 | etot = -17.4075734784682 +43000 ekin = 2.16695829201326 | erot = 2.67063324875933 | epot = -22.9841690345739 | etot = -18.1465774938013 +44000 ekin = 2.3251045436594 | erot = 3.31069456451417 | epot = -22.9099977707014 | etot = -17.2741986625278 +45000 ekin = 1.8593572517472 | erot = 3.48256913429863 | epot = -22.7853293556222 | etot = -17.4434029695763 +46000 ekin = 2.59906260222482 | erot = 2.2320785378511 | epot = -22.67184319375 | etot = -17.8407020536741 +47000 ekin = 1.9041935097682 | erot = 3.39352467596442 | epot = -22.5624536061979 | etot = -17.2647354204653 +48000 ekin = 2.46191536162938 | erot = 2.50024189038396 | epot = -22.5888330081063 | etot = -17.626675756093 +49000 ekin = 3.18008619674965 | erot = 2.18329398142911 | epot = -22.6110647388653 | etot = -17.2476845606865 +50000 ekin = 2.92380640638808 | erot = 1.5483538313346 | epot = -22.6682279672282 | etot = -18.1960677295055 +51000 ekin = 2.86729503225236 | erot = 2.67529217516738 | epot = -22.6748886664557 | etot = -17.132301459036 +52000 ekin = 2.30283827457731 | erot = 1.82645474029553 | epot = -22.6607030819086 | etot = -18.5314100670358 +53000 ekin = 3.18697616339313 | erot = 1.67211265049679 | epot = -22.7158951183044 | etot = -17.8568063044145 +54000 ekin = 2.63274995193146 | erot = 1.96664130685844 | epot = -22.7877787224364 | etot = -18.1883874636465 +55000 ekin = 3.18311630681888 | erot = 2.85127254864952 | epot = -22.8390589862477 | etot = -16.8046701307793 +56000 ekin = 2.55275960671527 | erot = 3.05720384772627 | epot = -22.8187750450683 | etot = -17.2088115906267 +57000 ekin = 2.43682051944963 | erot = 3.45782031837861 | epot = -22.7770565571277 | etot = -16.8824157192995 +58000 ekin = 1.93888380963701 | erot = 2.51321017005842 | epot = -22.7135987564736 | etot = -18.2615047767781 +59000 ekin = 2.5584899615086 | erot = 3.52166542523796 | epot = -22.6623202639297 | etot = -16.5821648771831 +60000 ekin = 2.80661395039301 | erot = 2.89055248290059 | epot = -22.5801959967487 | etot = -16.8830295634551 +61000 ekin = 2.68598657973729 | erot = 2.54741083070049 | epot = -22.4806361765055 | etot = -17.2472387660677 +62000 ekin = 2.74493324548126 | erot = 2.23648307303268 | epot = -22.4129547813458 | etot = -17.4315384628319 +63000 ekin = 2.65627195091608 | erot = 2.46107949280746 | epot = -22.3986334001314 | etot = -17.2812819564079 +64000 ekin = 2.12379240032878 | erot = 2.79203441675508 | epot = -22.3495990435982 | etot = -17.4337722265143 +65000 ekin = 1.86782238979936 | erot = 2.70277079938775 | epot = -22.3710220966341 | etot = -17.800428907447 +66000 ekin = 2.74983103317414 | erot = 1.93532287297328 | epot = -22.3642892005435 | etot = -17.6791352943961 +67000 ekin = 2.51092055125345 | erot = 2.46618624666164 | epot = -22.3997780561407 | etot = -17.4226712582257 +68000 ekin = 2.95469759114172 | erot = 1.97026833535316 | epot = -22.465077041847 | etot = -17.5401111153521 +69000 ekin = 2.60179538487173 | erot = 2.27022574694886 | epot = -22.4013876082186 | etot = -17.529366476398 +70000 ekin = 2.38624525335423 | erot = 2.82124637267728 | epot = -22.3329612644329 | etot = -17.1254696384013 +71000 ekin = 2.62641919853461 | erot = 2.89332429923839 | epot = -22.3324946257813 | etot = -16.8127511280083 +72000 ekin = 2.93199679301318 | erot = 2.83600213853038 | epot = -22.4418753486332 | etot = -16.6738764170897 +73000 ekin = 2.20521324648382 | erot = 3.0506384171445 | epot = -22.5078076718832 | etot = -17.2519560082549 +74000 ekin = 2.16594519672766 | erot = 2.82993872672918 | epot = -22.5187768617569 | etot = -17.5228929383001 +75000 ekin = 1.52753824412461 | erot = 1.91758574309003 | epot = -22.6434864113427 | etot = -19.198362424128 +76000 ekin = 1.89477517532868 | erot = 2.83145375092217 | epot = -22.7507099037207 | etot = -18.0244809774699 +77000 ekin = 2.84722966394523 | erot = 3.20523918524771 | epot = -22.8263123696514 | etot = -16.7738435204585 +78000 ekin = 2.44900478430451 | erot = 2.80964787966682 | epot = -22.8119237303111 | etot = -17.5532710663397 +79000 ekin = 2.16549328835506 | erot = 1.67531288307153 | epot = -22.8278994273521 | etot = -18.9870932559255 +80000 ekin = 2.38929173610466 | erot = 2.58355997375491 | epot = -22.7453472674483 | etot = -17.7724955575887 +81000 ekin = 2.74182188148999 | erot = 1.92580771183151 | epot = -22.6872721828913 | etot = -18.0196425895698 +82000 ekin = 1.90254633515813 | erot = 1.70958501101745 | epot = -22.5904815431895 | etot = -18.9783501970139 +83000 ekin = 1.63862423461032 | erot = 1.87668722448406 | epot = -22.5030898166236 | etot = -18.9877783575292 +84000 ekin = 1.65768128899531 | erot = 2.10186039233844 | epot = -22.4199436013011 | etot = -18.6604019199674 +85000 ekin = 2.40787065796921 | erot = 2.04965431830703 | epot = -22.3401854879212 | etot = -17.882660511645 +86000 ekin = 2.51073542405177 | erot = 1.79768841940749 | epot = -22.3948638623201 | etot = -18.0864400188608 +87000 ekin = 2.13729284484532 | erot = 1.97886338867606 | epot = -22.4457225556767 | etot = -18.3295663221553 +88000 ekin = 1.7511616822056 | erot = 2.36434608342924 | epot = -22.4232555875236 | etot = -18.3077478218887 +89000 ekin = 1.85498863251071 | erot = 3.29466014836527 | epot = -22.4615925106509 | etot = -17.3119437297749 +90000 ekin = 2.22730928223451 | erot = 2.36761183779185 | epot = -22.5498488806969 | etot = -17.9549277606706 +91000 ekin = 2.40026068010467 | erot = 3.1312454261103 | epot = -22.5445138059197 | etot = -17.0130076997047 +92000 ekin = 2.69184894487886 | erot = 3.01111638487596 | epot = -22.5488335054242 | etot = -16.8458681756693 +93000 ekin = 3.04452081584098 | erot = 3.0289315825034 | epot = -22.4857514998612 | etot = -16.4122991015169 +94000 ekin = 3.21054020599498 | erot = 1.87554208928457 | epot = -22.58235617796 | etot = -17.4962738826805 +95000 ekin = 3.49164555041805 | erot = 2.89107259754101 | epot = -22.651746211573 | etot = -16.2690280636139 +96000 ekin = 2.8961145983777 | erot = 2.38403691628048 | epot = -22.6376886129393 | etot = -17.3575370982811 +97000 ekin = 1.94001816357315 | erot = 2.09603205774619 | epot = -22.6212143095229 | etot = -18.5851640882036 +98000 ekin = 2.21812472183551 | erot = 3.66512951907029 | epot = -22.5400207863669 | etot = -16.6567665454611 +99000 ekin = 1.96304801418099 | erot = 2.78092002528644 | epot = -22.4500077741119 | etot = -17.7060397346444 +100000 ekin = 1.78146596589238 | erot = 2.66087063973067 | epot = -22.3806285021859 | etot = -17.9382918965629 +101000 ekin = 2.13576431486591 | erot = 2.39189697670582 | epot = -22.3671198416411 | etot = -17.8394585500694 +102000 ekin = 1.54265458925823 | erot = 2.31301627489861 | epot = -22.3596033820568 | etot = -18.5039325179 +103000 ekin = 1.6493299781162 | erot = 2.82700146777614 | epot = -22.4044472055819 | etot = -17.9281157596895 +104000 ekin = 1.88425130865015 | erot = 3.36695629589132 | epot = -22.4614117565727 | etot = -17.2102041520312 +105000 ekin = 2.0873628063424 | erot = 1.99902589912497 | epot = -22.4857870795246 | etot = -18.3993983740572 +106000 ekin = 2.85192200005481 | erot = 1.96124421177818 | epot = -22.4885148263279 | etot = -17.6753486144949 +107000 ekin = 2.27699301124082 | erot = 1.54572940373457 | epot = -22.4328687856414 | etot = -18.610146370666 +108000 ekin = 2.43341212242248 | erot = 1.7101452395327 | epot = -22.4750159709763 | etot = -18.3314586090212 +109000 ekin = 2.3240302459673 | erot = 2.92730273400661 | epot = -22.4544447404649 | etot = -17.203111760491 +110000 ekin = 2.75939007795593 | erot = 2.3726124845783 | epot = -22.4066316113363 | etot = -17.2746290488021 +111000 ekin = 2.30202775259985 | erot = 2.09098171366697 | epot = -22.340628179725 | etot = -17.9476187134581 +112000 ekin = 2.89672803093986 | erot = 1.84536318388285 | epot = -22.189229344937 | etot = -17.4471381301143 +113000 ekin = 2.802868120203 | erot = 1.68317583122193 | epot = -22.1739192926257 | etot = -17.6878753412008 +114000 ekin = 3.41134331362353 | erot = 2.66279011393036 | epot = -22.2993892060878 | etot = -16.2252557785339 +115000 ekin = 3.04096848543598 | erot = 1.72164164793761 | epot = -22.3101669297006 | etot = -17.547556796327 +116000 ekin = 3.18249263106367 | erot = 3.21872780579631 | epot = -22.3766120310369 | etot = -15.975391594177 +117000 ekin = 3.04033644338918 | erot = 2.4163277414929 | epot = -22.3406101341932 | etot = -16.8839459493111 +118000 ekin = 3.2297663279461 | erot = 1.46870208555873 | epot = -22.262910646297 | etot = -17.5644422327922 +119000 ekin = 2.35815331598994 | erot = 3.07464675916892 | epot = -22.21629705762 | etot = -16.7834969824611 +120000 ekin = 1.93901604028919 | erot = 2.21087803685818 | epot = -22.1596747789505 | etot = -18.0097807018031 +121000 ekin = 1.94791988346889 | erot = 3.06697908719322 | epot = -22.1473490758084 | etot = -17.1324501051462 +122000 ekin = 1.69642311218451 | erot = 1.71065948591522 | epot = -22.235021693017 | etot = -18.8279390949172 +123000 ekin = 1.74537927001903 | erot = 2.31042772730644 | epot = -22.3250546948603 | etot = -18.2692476975348 +124000 ekin = 2.74229806685692 | erot = 1.94346011848795 | epot = -22.3376426377462 | etot = -17.6518844524013 +125000 ekin = 2.77628031613761 | erot = 1.95737420539167 | epot = -22.3561899601979 | etot = -17.6225354386686 +126000 ekin = 2.05898577806786 | erot = 1.47493157618749 | epot = -22.3918669376121 | etot = -18.8579495833568 +127000 ekin = 1.88620727578863 | erot = 1.58698481884328 | epot = -22.3753405588623 | etot = -18.9021484642304 +128000 ekin = 1.65027256647601 | erot = 1.87589048163674 | epot = -22.3576574967822 | etot = -18.8314944486694 +129000 ekin = 2.51771860981078 | erot = 2.38745668871875 | epot = -22.3622404512641 | etot = -17.4570651527346 +130000 ekin = 1.60778116741171 | erot = 2.81983062254802 | epot = -22.3043401463426 | etot = -17.8767283563829 +131000 ekin = 2.27966529707091 | erot = 2.29465997580789 | epot = -22.1860056729234 | etot = -17.6116804000446 +132000 ekin = 2.94605151024306 | erot = 2.34727265039698 | epot = -22.1004107829512 | etot = -16.8070866223112 +133000 ekin = 2.00184520718143 | erot = 2.13597622566089 | epot = -22.0860804435183 | etot = -17.948259010676 +134000 ekin = 1.54536260297594 | erot = 2.86019181856985 | epot = -22.0324797134652 | etot = -17.6269252919194 +135000 ekin = 1.7899169229158 | erot = 2.40585579784188 | epot = -22.0564792277569 | etot = -17.8607065069992 +136000 ekin = 1.63315069688348 | erot = 2.13968964990471 | epot = -22.0645410751455 | etot = -18.2917007283573 +137000 ekin = 2.36475220491125 | erot = 1.93075105476848 | epot = -22.101884847306 | etot = -17.8063815876262 +138000 ekin = 2.9554682114977 | erot = 1.58329215843879 | epot = -22.158920719349 | etot = -17.6201603494125 +139000 ekin = 3.18559985564368 | erot = 2.24978247982886 | epot = -22.2766713145625 | etot = -16.84128897909 +140000 ekin = 2.25331500051846 | erot = 3.04264261269698 | epot = -22.4413209794807 | etot = -17.1453633662653 +141000 ekin = 1.8939664036255 | erot = 3.12730191483887 | epot = -22.6943708703895 | etot = -17.6731025519251 +142000 ekin = 2.48698722341786 | erot = 2.50204475841097 | epot = -22.8022645411412 | etot = -17.8132325593124 +143000 ekin = 2.39031114354901 | erot = 2.72027514737474 | epot = -22.7789363640121 | etot = -17.6683500730884 +144000 ekin = 1.93009742932803 | erot = 2.68112648713777 | epot = -22.6600942975092 | etot = -18.0488703810434 +145000 ekin = 1.81543048110687 | erot = 1.73927524532866 | epot = -22.6290694904769 | etot = -19.0743637640413 +146000 ekin = 2.4125202126428 | erot = 2.0856902293417 | epot = -22.560764077018 | etot = -18.0625536350335 +147000 ekin = 1.44642974398304 | erot = 1.86921415702345 | epot = -22.4437745695725 | etot = -19.128130668566 +148000 ekin = 1.94224767107089 | erot = 2.57935525538892 | epot = -22.4110987100046 | etot = -17.8894957835448 +149000 ekin = 2.03195649040454 | erot = 3.31786202502786 | epot = -22.312227106758 | etot = -16.9624085913256 +150000 ekin = 2.47792894576431 | erot = 2.68612874200302 | epot = -22.1392843642772 | etot = -16.9752266765099 +151000 ekin = 2.75692645092955 | erot = 1.88122565848133 | epot = -21.9329416416722 | etot = -17.2947895322613 +152000 ekin = 2.7753834344323 | erot = 1.78115734250796 | epot = -21.745072490984 | etot = -17.1885317140438 +153000 ekin = 3.09316888168833 | erot = 1.80744228044955 | epot = -21.6451473427313 | etot = -16.7445361805934 +154000 ekin = 2.31433640945477 | erot = 2.19304386678896 | epot = -21.5946356595636 | etot = -17.0872553833199 +155000 ekin = 1.94169881401553 | erot = 2.67959698479411 | epot = -21.6941053409436 | etot = -17.0728095421339 +156000 ekin = 2.69151609119638 | erot = 2.25048211983205 | epot = -21.7610571974251 | etot = -16.8190589863966 +157000 ekin = 3.89507004263776 | erot = 2.74501587672577 | epot = -21.8157728797742 | etot = -15.1756869604107 +158000 ekin = 2.88173407476086 | erot = 2.69702262693026 | epot = -21.8854957137509 | etot = -16.3067390120597 +159000 ekin = 3.15173323195919 | erot = 2.61743473710129 | epot = -21.8245251626835 | etot = -16.055357193623 +160000 ekin = 2.54983562435716 | erot = 3.26037467643908 | epot = -21.8527884226329 | etot = -16.0425781218366 +161000 ekin = 2.47569624391789 | erot = 2.44418416527208 | epot = -21.7973550812186 | etot = -16.8774746720287 +162000 ekin = 2.9422872213738 | erot = 2.59784970938383 | epot = -21.7813251561028 | etot = -16.2411882253452 +163000 ekin = 3.25812805712343 | erot = 2.2523933100784 | epot = -21.820089307521 | etot = -16.3095679403192 +164000 ekin = 3.52786799143084 | erot = 2.22392713421413 | epot = -21.7646946348872 | etot = -16.0128995092422 +165000 ekin = 2.47839548873417 | erot = 2.58744140761171 | epot = -21.679095294504 | etot = -16.6132583981582 +166000 ekin = 2.14435847552791 | erot = 3.04732688845808 | epot = -21.6219995979976 | etot = -16.4303142340116 +167000 ekin = 2.77664659649902 | erot = 2.89037999868329 | epot = -21.5339928834654 | etot = -15.8669662882831 +168000 ekin = 1.74464407802389 | erot = 2.78052653338967 | epot = -21.4288999288374 | etot = -16.9037293174239 +169000 ekin = 1.80689129093329 | erot = 2.46391033708927 | epot = -21.4128285618694 | etot = -17.1420269338468 +170000 ekin = 1.6949814594151 | erot = 2.88911238881154 | epot = -21.4319269866203 | etot = -16.8478331383937 +171000 ekin = 2.15326316196645 | erot = 1.61346547801869 | epot = -21.2861470779283 | etot = -17.5194184379432 +172000 ekin = 1.67904916339532 | erot = 2.36509147316375 | epot = -21.1250864759441 | etot = -17.080945839385 +173000 ekin = 2.05349972960735 | erot = 2.1886466510775 | epot = -21.0744450592631 | etot = -16.8322986785782 +174000 ekin = 2.49402795941962 | erot = 3.10392317000879 | epot = -20.9332609664624 | etot = -15.335309837034 +175000 ekin = 2.60611029063986 | erot = 2.90993176119182 | epot = -20.8533230180668 | etot = -15.3372809662352 +176000 ekin = 2.14535974511637 | erot = 2.67710511021539 | epot = -20.8508037764829 | etot = -16.0283389211511 +177000 ekin = 2.82654664242577 | erot = 2.80647819657321 | epot = -20.9303681620826 | etot = -15.2973433230836 +178000 ekin = 3.17006270723388 | erot = 1.88204403688962 | epot = -21.0665744865168 | etot = -16.0144677423933 +179000 ekin = 2.33834827123178 | erot = 2.84870047825869 | epot = -21.1082901606943 | etot = -15.9212414112039 +180000 ekin = 2.39362550925045 | erot = 2.94575326168227 | epot = -21.1089731290028 | etot = -15.7695943580701 +181000 ekin = 2.78703231260152 | erot = 3.29998898392537 | epot = -21.0761138110654 | etot = -14.9890925145385 +182000 ekin = 3.02338391239199 | erot = 2.32533107462881 | epot = -21.0444377426861 | etot = -15.6957227556653 +183000 ekin = 2.44126401356994 | erot = 2.19853056632819 | epot = -20.8846280234405 | etot = -16.2448334435424 +184000 ekin = 2.56448211253962 | erot = 2.77267067014066 | epot = -20.6657911214549 | etot = -15.3286383387746 +185000 ekin = 2.16427057092672 | erot = 1.95880146934286 | epot = -20.5647658775173 | etot = -16.4416938372477 +186000 ekin = 2.06536030915311 | erot = 3.14593463137772 | epot = -20.4537584304771 | etot = -15.2424634899463 +187000 ekin = 2.43846121057803 | erot = 1.93593042270703 | epot = -20.4775765627296 | etot = -16.1031849294445 +188000 ekin = 2.28827356508696 | erot = 2.89699235589217 | epot = -20.6028880527163 | etot = -15.4176221317372 +189000 ekin = 1.67206333515898 | erot = 3.05807378739729 | epot = -20.6184572736204 | etot = -15.8883201510642 +190000 ekin = 1.96995062226968 | erot = 2.94301967439401 | epot = -20.6150380630742 | etot = -15.7020677664105 +191000 ekin = 2.31558303301195 | erot = 2.65062200614568 | epot = -20.5845049099943 | etot = -15.6182998708367 +192000 ekin = 3.58105122568799 | erot = 2.89866835149675 | epot = -20.555036456006 | etot = -14.0753168788213 +193000 ekin = 2.69738971383614 | erot = 3.08390984677749 | epot = -20.5718609412494 | etot = -14.7905613806358 +194000 ekin = 2.65963556416735 | erot = 2.28486501061268 | epot = -20.4488832942326 | etot = -15.5043827194526 +195000 ekin = 1.85289053427901 | erot = 2.65318671222087 | epot = -20.3816844231208 | etot = -15.8756071766209 +196000 ekin = 2.28257181147918 | erot = 2.31175601065462 | epot = -20.4051132325268 | etot = -15.810785410393 +197000 ekin = 2.49770460330585 | erot = 2.55587879440511 | epot = -20.4716020539923 | etot = -15.4180186562814 +198000 ekin = 2.01700960777427 | erot = 1.51922008609382 | epot = -20.4907970823156 | etot = -16.9545673884475 +199000 ekin = 1.50027537520987 | erot = 2.19604462463446 | epot = -20.5138434458212 | etot = -16.8175234459769 +200000 ekin = 1.64850512926723 | erot = 2.4596633548257 | epot = -20.4934420686449 | etot = -16.385273584552 +201000 ekin = 2.62997533994907 | erot = 2.61637339049483 | epot = -20.5569645618355 | etot = -15.3106158313916 +202000 ekin = 2.3089517547524 | erot = 2.5565329388766 | epot = -20.6262537118088 | etot = -15.7607690181798 +203000 ekin = 1.64768887888551 | erot = 2.11556417528285 | epot = -20.6617888215465 | etot = -16.8985357673782 +204000 ekin = 2.01924097320136 | erot = 1.97748949636931 | epot = -20.7002685556682 | etot = -16.7035380860975 +205000 ekin = 2.97656554045711 | erot = 3.25408007971553 | epot = -20.9425038008424 | etot = -14.7118581806698 +206000 ekin = 2.56613069661945 | erot = 2.21624244224461 | epot = -21.0621833598182 | etot = -16.2798102209542 +207000 ekin = 3.44850636848559 | erot = 2.48816050856267 | epot = -21.2038849430867 | etot = -15.2672180660384 +208000 ekin = 2.54208934028226 | erot = 2.22605232144502 | epot = -21.3476404533667 | etot = -16.5794987916394 +209000 ekin = 3.84151461096732 | erot = 2.16534559513903 | epot = -21.4932373455843 | etot = -15.486377139478 +210000 ekin = 3.06873591712904 | erot = 2.24760815652574 | epot = -21.6427793540355 | etot = -16.3264352803807 +211000 ekin = 1.64176280869923 | erot = 2.17721976802011 | epot = -21.8130439048272 | etot = -17.9940613281078 +212000 ekin = 2.5985934050661 | erot = 2.41520703335869 | epot = -21.9964648294563 | etot = -16.9826643910315 +213000 ekin = 2.51136104390039 | erot = 1.99503544560738 | epot = -22.161492842604 | etot = -17.6550963530962 +214000 ekin = 2.77089845962619 | erot = 3.17247228684199 | epot = -22.208715104286 | etot = -16.2653443578179 +215000 ekin = 2.53408528186206 | erot = 1.84963848601798 | epot = -22.1148567901871 | etot = -17.7311330223071 +216000 ekin = 2.52671619876928 | erot = 2.77873014449688 | epot = -22.1370884570131 | etot = -16.8316421137469 +217000 ekin = 2.50171921508545 | erot = 1.89238935467003 | epot = -22.226079201001 | etot = -17.8319706312455 +218000 ekin = 2.43936294263937 | erot = 2.41974828067303 | epot = -22.2447049583244 | etot = -17.385593735012 +219000 ekin = 2.30221269367205 | erot = 2.65120674162376 | epot = -22.2807164841742 | etot = -17.3272970488784 +220000 ekin = 1.70065256620687 | erot = 2.34758543213915 | epot = -22.2809933538228 | etot = -18.2327553554768 +221000 ekin = 2.09298237125575 | erot = 2.47886481595909 | epot = -22.267957001012 | etot = -17.6961098137972 +222000 ekin = 1.58469709510937 | erot = 2.14490786301286 | epot = -22.1867412404881 | etot = -18.4571362823659 +223000 ekin = 1.83926923346352 | erot = 1.89456034969536 | epot = -22.131893392038 | etot = -18.3980638088791 +224000 ekin = 2.59583657132575 | erot = 2.93869915115497 | epot = -22.1425986650605 | etot = -16.6080629425798 +225000 ekin = 3.29351563254165 | erot = 2.8433953581414 | epot = -22.12757310355 | etot = -15.9906621128669 +226000 ekin = 3.03135339447922 | erot = 2.08293143143602 | epot = -22.15283624886 | etot = -17.0385514229448 +227000 ekin = 2.50176282992082 | erot = 3.15084128846394 | epot = -22.2250438959744 | etot = -16.5724397775897 +228000 ekin = 2.32013498351673 | erot = 2.67554406359439 | epot = -22.3177515383563 | etot = -17.3220724912452 +229000 ekin = 2.89545450975319 | erot = 2.90735055857068 | epot = -22.4361496683348 | etot = -16.6333446000109 +230000 ekin = 2.28321229485933 | erot = 3.48420465632866 | epot = -22.548785995051 | etot = -16.781369043863 +231000 ekin = 2.0778632375453 | erot = 3.10673973696436 | epot = -22.5896609633152 | etot = -17.4050579888055 +232000 ekin = 2.1202374109541 | erot = 1.98747810033065 | epot = -22.5738924334392 | etot = -18.4661769221544 +233000 ekin = 2.33571877855589 | erot = 2.83585090202738 | epot = -22.5402065195541 | etot = -17.3686368389708 +234000 ekin = 2.10578223747154 | erot = 2.07381218733635 | epot = -22.5507693150833 | etot = -18.3711748902754 +235000 ekin = 2.44321041214394 | erot = 2.80846352304318 | epot = -22.5606929563186 | etot = -17.3090190211315 +236000 ekin = 2.93630791731799 | erot = 3.0631591853173 | epot = -22.4860653874722 | etot = -16.4865982848369 +237000 ekin = 3.21264879506079 | erot = 3.26866508478298 | epot = -22.3683553437862 | etot = -15.8870414639424 +238000 ekin = 2.46595539123277 | erot = 2.32502019506664 | epot = -22.3144456769666 | etot = -17.5234700906672 +239000 ekin = 2.10325864915823 | erot = 2.47631139904042 | epot = -22.3011392921811 | etot = -17.7215692439825 +240000 ekin = 1.77270999777839 | erot = 2.60141429112664 | epot = -22.2344206081543 | etot = -17.8602963192493 +241000 ekin = 1.94952922244078 | erot = 1.39715216866764 | epot = -22.2207225048761 | etot = -18.8740411137677 +242000 ekin = 3.05687991591411 | erot = 2.00862394928705 | epot = -22.2213200390944 | etot = -17.1558161738932 +243000 ekin = 2.86735711945299 | erot = 1.79948118674678 | epot = -22.2697610280427 | etot = -17.6029227218429 +244000 ekin = 2.00525854269389 | erot = 2.36445341214555 | epot = -22.2726788994494 | etot = -17.90296694461 +245000 ekin = 2.28011102404838 | erot = 2.787005205328 | epot = -22.2995433574618 | etot = -17.2324271280854 +246000 ekin = 2.06819738789813 | erot = 2.24624952782285 | epot = -22.2551680110138 | etot = -17.9407210952928 +247000 ekin = 1.69964711256213 | erot = 3.22260619239827 | epot = -22.1916408256116 | etot = -17.2693875206512 +248000 ekin = 1.92997585194759 | erot = 3.61155944514373 | epot = -22.0096484177853 | etot = -16.4681131206939 +249000 ekin = 2.16278530892653 | erot = 3.27771891456709 | epot = -21.8856058980727 | etot = -16.4451016745791 +250000 ekin = 2.32204054211024 | erot = 2.46317574116847 | epot = -21.8028762710592 | etot = -17.0176599877804 +251000 ekin = 1.23768964067254 | erot = 2.24150533762101 | epot = -21.763065707404 | etot = -18.2838707291104 +252000 ekin = 1.79818833522214 | erot = 2.12556386664128 | epot = -21.7586349357285 | etot = -17.8348827338651 +253000 ekin = 2.12809689846393 | erot = 2.59685639208402 | epot = -21.7226495687758 | etot = -16.9976962782278 +254000 ekin = 2.46813261968532 | erot = 2.00391812662869 | epot = -21.7113918037362 | etot = -17.2393410574222 +255000 ekin = 2.3156672908729 | erot = 2.03619058028117 | epot = -21.7265453183257 | etot = -17.3746874471716 +256000 ekin = 2.87223929491326 | erot = 2.61790933826624 | epot = -21.659332511914 | etot = -16.1691838787345 +257000 ekin = 2.85756762932927 | erot = 2.081746739162 | epot = -21.6161821054731 | etot = -16.6768677369819 +258000 ekin = 2.06111021157734 | erot = 2.32748664972428 | epot = -21.5132485706727 | etot = -17.124651709371 +259000 ekin = 2.23305784057759 | erot = 2.88843859953735 | epot = -21.5040039667855 | etot = -16.3825075266705 +260000 ekin = 2.49862397932476 | erot = 2.38336885848389 | epot = -21.488210637319 | etot = -16.6062177995103 +261000 ekin = 2.09280296934734 | erot = 2.39632540029205 | epot = -21.4325331777953 | etot = -16.9434048081559 +262000 ekin = 2.33576913564289 | erot = 2.67273419354397 | epot = -21.3832241450035 | etot = -16.3747208158166 +263000 ekin = 2.20536189489354 | erot = 2.71530627040565 | epot = -21.4329409070981 | etot = -16.5122727417989 +264000 ekin = 2.2858247573423 | erot = 2.76839346219664 | epot = -21.39310844316 | etot = -16.338890223621 +265000 ekin = 1.70928536820409 | erot = 1.79395423442894 | epot = -21.2682341921474 | etot = -17.7649945895144 +266000 ekin = 2.48721735474525 | erot = 2.08745460533224 | epot = -21.1746995817337 | etot = -16.6000276216562 +267000 ekin = 2.69283567987773 | erot = 2.10301910407211 | epot = -21.1705161290062 | etot = -16.3746613450564 +268000 ekin = 3.00000233743719 | erot = 2.80954585635721 | epot = -21.164752112651 | etot = -15.3552039188566 +269000 ekin = 3.50713810468527 | erot = 2.35763817348003 | epot = -21.1537110688984 | etot = -15.2889347907331 +270000 ekin = 3.50686942248863 | erot = 1.86462765875888 | epot = -21.1925508822801 | etot = -15.8210538010326 +271000 ekin = 3.57026082273992 | erot = 2.08172467795384 | epot = -21.2775817182941 | etot = -15.6255962176003 +272000 ekin = 2.4484752533773 | erot = 3.08466485039761 | epot = -21.3619851902072 | etot = -15.8288450864322 +273000 ekin = 2.39748176307241 | erot = 3.13355050446718 | epot = -21.4386234252579 | etot = -15.9075911577183 +274000 ekin = 2.48208144431863 | erot = 2.00552494041967 | epot = -21.4476232953882 | etot = -16.9600169106499 +275000 ekin = 2.48721081149369 | erot = 3.05413598233603 | epot = -21.4713984309062 | etot = -15.9300516370765 +276000 ekin = 2.82709589676966 | erot = 2.88384306577856 | epot = -21.4434590118161 | etot = -15.7325200492679 +277000 ekin = 2.23479555963313 | erot = 2.20310851955638 | epot = -21.3883073251199 | etot = -16.9504032459304 +278000 ekin = 2.81418916407429 | erot = 3.24537052192613 | epot = -21.3155364074003 | etot = -15.2559767213999 +279000 ekin = 2.57366525203699 | erot = 1.81705578305929 | epot = -21.2862101233851 | etot = -16.8954890882888 +280000 ekin = 2.41063464320149 | erot = 1.76282693004731 | epot = -21.2549625280961 | etot = -17.0815009548473 +281000 ekin = 2.58126226070487 | erot = 2.29258221702166 | epot = -21.306394928225 | etot = -16.4325504504985 +282000 ekin = 3.02016903398222 | erot = 2.43094523890341 | epot = -21.4340900724633 | etot = -15.9829757995777 +283000 ekin = 2.59269149790331 | erot = 2.11330689541033 | epot = -21.6296517079942 | etot = -16.9236533146806 +284000 ekin = 2.51704243107537 | erot = 3.13156683036761 | epot = -21.7452694753527 | etot = -16.0966602139097 +285000 ekin = 2.4236537221525 | erot = 1.77228258125507 | epot = -21.8557019037769 | etot = -17.6597656003693 +286000 ekin = 1.9446719552166 | erot = 2.0366097411672 | epot = -21.901435736722 | etot = -17.9201540403382 +287000 ekin = 2.56319670376172 | erot = 2.60867050510166 | epot = -21.90675099349 | etot = -16.7348837846266 +288000 ekin = 2.19574207425738 | erot = 1.69805542160023 | epot = -21.8143855675961 | etot = -17.9205880717385 +289000 ekin = 2.35326278833027 | erot = 1.65840109676146 | epot = -21.6976038565284 | etot = -17.6859399714367 +290000 ekin = 2.3519456177505 | erot = 1.99444238353744 | epot = -21.6551012116075 | etot = -17.3087132103195 +291000 ekin = 1.48585281531715 | erot = 2.66475825861554 | epot = -21.56036793472 | etot = -17.4097568607873 +292000 ekin = 2.10739944756451 | erot = 2.42809824662638 | epot = -21.4451596117638 | etot = -16.9096619175729 +293000 ekin = 2.11618090223716 | erot = 1.86694554151198 | epot = -21.3593625692767 | etot = -17.3762361255276 +294000 ekin = 2.06078090566332 | erot = 2.13941873359476 | epot = -21.2326233100941 | etot = -17.032423670836 +295000 ekin = 2.11467178034793 | erot = 2.3267343667518 | epot = -21.1123588667461 | etot = -16.6709527196464 +296000 ekin = 1.53087058859331 | erot = 2.94008409149153 | epot = -21.2112197533848 | etot = -16.7402650732999 +297000 ekin = 2.52732986791196 | erot = 2.18380855337858 | epot = -21.1955190508786 | etot = -16.4843806295881 +298000 ekin = 1.89033945823196 | erot = 2.02521913176001 | epot = -21.2593750718296 | etot = -17.3438164818376 +299000 ekin = 1.87142873048436 | erot = 1.66404563221549 | epot = -21.2919162310488 | etot = -17.7564418683489 +300000 ekin = 2.23872615546788 | erot = 1.50807257618897 | epot = -21.3339204593826 | etot = -17.5871217277258 +301000 ekin = 1.99965506724558 | erot = 2.00145094516844 | epot = -21.4707589194325 | etot = -17.4696529070184 +302000 ekin = 1.76370349732521 | erot = 2.23787708901487 | epot = -21.5675275978257 | etot = -17.5659470114856 +303000 ekin = 2.69610887251788 | erot = 1.6995722142974 | epot = -21.5563765448092 | etot = -17.1606954579939 +304000 ekin = 2.55447143501921 | erot = 2.02060813090349 | epot = -21.5692327321341 | etot = -16.9941531662114 +305000 ekin = 2.38230604232717 | erot = 2.31489374428114 | epot = -21.5335950166329 | etot = -16.8363952300246 +306000 ekin = 2.07785475765118 | erot = 2.4523066068597 | epot = -21.4550895345847 | etot = -16.9249281700738 +307000 ekin = 3.17130424567278 | erot = 3.29574614566806 | epot = -21.4151535289883 | etot = -14.9481031376474 +308000 ekin = 3.40959217051674 | erot = 2.68389483402973 | epot = -21.4778643688409 | etot = -15.3843773642944 +309000 ekin = 2.36068264180093 | erot = 2.91715332823342 | epot = -21.5794336507741 | etot = -16.3015976807398 +310000 ekin = 2.4995235722922 | erot = 2.36028950896138 | epot = -21.5982142524176 | etot = -16.738401171164 +311000 ekin = 2.53288726180906 | erot = 2.29596940545851 | epot = -21.6418553661547 | etot = -16.8129986988871 +312000 ekin = 2.05123272208704 | erot = 2.92023923411834 | epot = -21.7377547517075 | etot = -16.7662827955022 +313000 ekin = 1.80834719374888 | erot = 2.29357283142125 | epot = -21.7993116362532 | etot = -17.6973916110831 +314000 ekin = 2.30684015099018 | erot = 2.20859462712272 | epot = -21.8029398081388 | etot = -17.2875050300259 +315000 ekin = 1.86413924486173 | erot = 2.14748794238475 | epot = -21.8550418960799 | etot = -17.8434147088335 +316000 ekin = 2.20558056533516 | erot = 3.03447287931582 | epot = -21.8868412075709 | etot = -16.6467877629199 +317000 ekin = 2.47820931125479 | erot = 3.56870099099487 | epot = -21.9902146748519 | etot = -15.9433043726022 +318000 ekin = 2.36582343801679 | erot = 3.01887804681552 | epot = -22.1178732891163 | etot = -16.733171804284 +319000 ekin = 2.40464629760758 | erot = 3.15910789488741 | epot = -22.2289401281565 | etot = -16.6651859356615 +320000 ekin = 1.80206494109346 | erot = 2.83527990295434 | epot = -22.3120263401861 | etot = -17.6746814961383 +321000 ekin = 2.91146951948762 | erot = 2.25772268449837 | epot = -22.3029455835947 | etot = -17.1337533796087 +322000 ekin = 2.8226351296685 | erot = 2.67950826833977 | epot = -22.3041650189947 | etot = -16.8020216209865 +323000 ekin = 2.067323568424 | erot = 2.319752847753 | epot = -22.3338840353559 | etot = -17.9468076191789 +324000 ekin = 2.6012747278288 | erot = 2.58351861537749 | epot = -22.3215168526944 | etot = -17.1367235094881 +325000 ekin = 3.45560055552843 | erot = 2.50162515355505 | epot = -22.1825527777624 | etot = -16.2253270686789 +326000 ekin = 3.51422890604519 | erot = 2.84426061018012 | epot = -22.0201095272525 | etot = -15.6616200110272 +327000 ekin = 2.63551490316295 | erot = 2.20570805472231 | epot = -21.9384479867007 | etot = -17.0972250288154 +328000 ekin = 1.8043914440792 | erot = 2.37599512200968 | epot = -21.861980397642 | etot = -17.6815938315531 +329000 ekin = 2.15766181563134 | erot = 2.45286496267961 | epot = -21.8518523862112 | etot = -17.2413256079002 +330000 ekin = 1.8483425992464 | erot = 2.03367429366601 | epot = -21.768409525242 | etot = -17.8863926323296 +331000 ekin = 2.3531484336258 | erot = 1.80165819621476 | epot = -21.7197009414848 | etot = -17.5648943116443 +332000 ekin = 1.67855936307207 | erot = 2.5334121965131 | epot = -21.7336434355881 | etot = -17.5216718760029 +333000 ekin = 1.60376334688456 | erot = 2.14058675025446 | epot = -21.835637958395 | etot = -18.091287861256 +334000 ekin = 2.26551990081779 | erot = 2.62486254825415 | epot = -21.8794971078471 | etot = -16.9891146587751 +335000 ekin = 2.91208137486081 | erot = 3.11052870452009 | epot = -21.9161692767172 | etot = -15.8935591973363 +336000 ekin = 2.73132973682385 | erot = 2.56213100489412 | epot = -21.8312488568505 | etot = -16.5377881151325 +337000 ekin = 3.15411918141902 | erot = 3.87512819831194 | epot = -21.9061152574783 | etot = -14.8768678777473 +338000 ekin = 2.33141760424507 | erot = 2.13211945089677 | epot = -21.913746111238 | etot = -17.4502090560962 +339000 ekin = 1.71915361945719 | erot = 2.31270220754042 | epot = -21.904207477372 | etot = -17.8723516503744 +340000 ekin = 1.62199393011804 | erot = 3.16990972384471 | epot = -21.8898233676232 | etot = -17.0979197136604 +341000 ekin = 1.71588704296646 | erot = 3.17642860992459 | epot = -21.8345558128149 | etot = -16.9422401599239 +342000 ekin = 1.82178091247658 | erot = 2.58875985611024 | epot = -21.7161502950573 | etot = -17.3056095264705 +343000 ekin = 3.08559255942693 | erot = 2.94813449265471 | epot = -21.7030445300997 | etot = -15.669317478018 +344000 ekin = 2.95985387154984 | erot = 3.1154751585035 | epot = -21.6815483295521 | etot = -15.6062192994987 +345000 ekin = 2.33428072266864 | erot = 2.88044431283017 | epot = -21.6567075042343 | etot = -16.4419824687355 +346000 ekin = 2.02077664062698 | erot = 3.45936833964707 | epot = -21.5877268821218 | etot = -16.1075819018478 +347000 ekin = 2.34924784800441 | erot = 1.93056350805623 | epot = -21.4896151766055 | etot = -17.2098038205448 +348000 ekin = 2.79839267202794 | erot = 2.79408776517963 | epot = -21.4682057474678 | etot = -15.8757253102602 +349000 ekin = 2.33820470114614 | erot = 3.12966318670513 | epot = -21.5603039389198 | etot = -16.0924360510685 +350000 ekin = 2.22383234890832 | erot = 2.38886870388011 | epot = -21.5375784703117 | etot = -16.9248774175233 +351000 ekin = 2.33329735253339 | erot = 2.84447430695179 | epot = -21.5078106306152 | etot = -16.33003897113 +352000 ekin = 2.74923373919408 | erot = 2.76796181793625 | epot = -21.5537134920816 | etot = -16.0365179349512 +353000 ekin = 1.76111836153717 | erot = 2.12255592617518 | epot = -21.5037017999955 | etot = -17.6200275122832 +354000 ekin = 2.29967358188085 | erot = 2.37615363620183 | epot = -21.559257977819 | etot = -16.8834307597364 +355000 ekin = 2.32956787601564 | erot = 2.41406261152025 | epot = -21.5311925684016 | etot = -16.7875620808657 +356000 ekin = 2.99536507165417 | erot = 3.0133786789017 | epot = -21.461213826164 | etot = -15.4524700756081 +357000 ekin = 1.79487551861702 | erot = 2.14781775756832 | epot = -21.4425100027869 | etot = -17.4998167266016 +358000 ekin = 2.06856992699964 | erot = 1.9158505155371 | epot = -21.4597512525557 | etot = -17.475330810019 +359000 ekin = 2.03457633089973 | erot = 2.13725650388114 | epot = -21.434584367242 | etot = -17.2627515324611 +360000 ekin = 2.64289898809605 | erot = 2.45722294398598 | epot = -21.3798303659973 | etot = -16.2797084339152 +361000 ekin = 2.44681633772951 | erot = 2.40323525392197 | epot = -21.4535746870958 | etot = -16.6035230954443 +362000 ekin = 2.27284400709389 | erot = 2.04866562998477 | epot = -21.4444048899961 | etot = -17.1228952529175 +363000 ekin = 3.23945885057604 | erot = 1.79247859381387 | epot = -21.4992698914106 | etot = -16.4673324470207 +364000 ekin = 3.01124200487831 | erot = 2.16495867321708 | epot = -21.5330648567406 | etot = -16.3568641786452 +365000 ekin = 2.51472285580867 | erot = 2.29864111879035 | epot = -21.6252096459669 | etot = -16.8118456713679 +366000 ekin = 2.59356655410022 | erot = 2.21031948632573 | epot = -21.6397726115723 | etot = -16.8358865711464 +367000 ekin = 2.23422490605626 | erot = 1.85375489374336 | epot = -21.7036464131406 | etot = -17.615666613341 +368000 ekin = 2.47747707853682 | erot = 2.36511710555106 | epot = -21.7442459693683 | etot = -16.9016517852804 +369000 ekin = 2.03854183495619 | erot = 2.80790943599038 | epot = -21.829546112742 | etot = -16.9830948417954 +370000 ekin = 2.08495509326204 | erot = 2.15717784784087 | epot = -21.8579547558588 | etot = -17.6158218147559 +371000 ekin = 2.1649158804987 | erot = 2.10731342711637 | epot = -21.750730287247 | etot = -17.4785009796319 +372000 ekin = 1.83416420958724 | erot = 1.90082367490453 | epot = -21.6784224725519 | etot = -17.9434345880602 +373000 ekin = 1.97176482573297 | erot = 1.77796007890949 | epot = -21.6393712386778 | etot = -17.8896463340354 +374000 ekin = 2.89940710658305 | erot = 1.91194262525378 | epot = -21.5337545453636 | etot = -16.7224048135267 +375000 ekin = 2.32339676163341 | erot = 1.92362318361284 | epot = -21.4217091025191 | etot = -17.1746891572728 +376000 ekin = 2.59047552311153 | erot = 2.32394149083979 | epot = -21.4139727856534 | etot = -16.4995557717021 +377000 ekin = 2.24598863840517 | erot = 1.65770205797294 | epot = -21.3405339068232 | etot = -17.4368432104451 +378000 ekin = 2.38351514056703 | erot = 2.54156262207207 | epot = -21.3122380587448 | etot = -16.3871602961057 +379000 ekin = 2.08457212928958 | erot = 2.11819645676889 | epot = -21.2663127721437 | etot = -17.0635441860853 +380000 ekin = 2.62168026009058 | erot = 2.36576073073357 | epot = -21.2469701231192 | etot = -16.259529132295 +381000 ekin = 2.42554871977308 | erot = 2.21588725182519 | epot = -21.2594018196931 | etot = -16.6179658480948 +382000 ekin = 2.04454090532126 | erot = 3.35199327879852 | epot = -21.3507561156204 | etot = -15.9542219315006 +383000 ekin = 2.57756769789846 | erot = 1.58356833947095 | epot = -21.4206473136967 | etot = -17.2595112763272 +384000 ekin = 2.32411392435712 | erot = 2.07034159075996 | epot = -21.425401700327 | etot = -17.03094618521 +385000 ekin = 1.93815279071873 | erot = 3.29970374476252 | epot = -21.4993838182002 | etot = -16.2615272827189 +386000 ekin = 2.10645704249442 | erot = 2.94380940917572 | epot = -21.5050572923383 | etot = -16.4547908406681 +387000 ekin = 2.28625118399721 | erot = 2.404880226949 | epot = -21.4350466670762 | etot = -16.74391525613 +388000 ekin = 2.84183807689895 | erot = 2.72440789072405 | epot = -21.448767296848 | etot = -15.882521329225 +389000 ekin = 3.39750799106372 | erot = 3.08194517695386 | epot = -21.6559630447603 | etot = -15.1765098767427 +390000 ekin = 2.82211920760115 | erot = 2.04880343622589 | epot = -21.7229608878358 | etot = -16.8520382440088 +391000 ekin = 2.25113345866117 | erot = 2.45876014532077 | epot = -21.7793475672488 | etot = -17.0694539632668 +392000 ekin = 2.6777973992177 | erot = 2.75278604715789 | epot = -21.9200377033298 | etot = -16.4894542569542 +393000 ekin = 2.07336639249413 | erot = 1.66102921524042 | epot = -22.0500496423094 | etot = -18.3156540345748 +394000 ekin = 2.1138614951422 | erot = 2.4065490584156 | epot = -22.0647062581752 | etot = -17.5442957046174 +395000 ekin = 2.46967791557607 | erot = 2.46187607744978 | epot = -22.0113006362931 | etot = -17.0797466432672 +396000 ekin = 3.17858061422168 | erot = 1.60030928107608 | epot = -21.9570022338792 | etot = -17.1781123385814 +397000 ekin = 2.37483507726776 | erot = 2.17387816921976 | epot = -21.8769234701935 | etot = -17.3282102237059 +398000 ekin = 2.29815779154461 | erot = 2.2014862703049 | epot = -21.8293641014529 | etot = -17.3297200396034 +399000 ekin = 2.66620669497936 | erot = 2.78316441348845 | epot = -21.7420307764657 | etot = -16.2926596679979 +400000 ekin = 1.8196142363994 | erot = 2.77573291920477 | epot = -21.7225828560707 | etot = -17.1272357004666 +401000 ekin = 2.39347596566753 | erot = 3.11237720134102 | epot = -21.7632198127751 | etot = -16.2573666457665 +402000 ekin = 4.01379092525261 | erot = 3.58756310879361 | epot = -21.6952307126456 | etot = -14.0938766785994 +403000 ekin = 3.64238723358271 | erot = 3.44210139074533 | epot = -21.6932224157202 | etot = -14.6087337913922 +404000 ekin = 2.52116102522202 | erot = 2.99286839639893 | epot = -21.7395466120138 | etot = -16.2255171903929 +405000 ekin = 2.80514548558626 | erot = 3.09807228440149 | epot = -21.809681120553 | etot = -15.9064633505653 +406000 ekin = 2.32696376764902 | erot = 2.03572639782902 | epot = -21.9111381639248 | etot = -17.5484479984468 +407000 ekin = 2.33504128016395 | erot = 1.91320949168965 | epot = -21.9359478399848 | etot = -17.6876970681312 +408000 ekin = 1.90942025822265 | erot = 2.20375631379574 | epot = -21.9849314014528 | etot = -17.8717548294344 +409000 ekin = 1.98818542800297 | erot = 1.95540808206523 | epot = -22.0378349759701 | etot = -18.0942414659019 +410000 ekin = 1.59823476401333 | erot = 1.91272967852491 | epot = -22.0830507565096 | etot = -18.5720863139714 +411000 ekin = 1.87320182179615 | erot = 2.46575148951076 | epot = -22.1911106440468 | etot = -17.8521573327399 +412000 ekin = 2.51909186028136 | erot = 2.65534868642724 | epot = -22.281680067606 | etot = -17.1072395208974 +413000 ekin = 2.80929435327118 | erot = 3.19888285052217 | epot = -22.1907679968741 | etot = -16.1825907930808 +414000 ekin = 2.79014519733558 | erot = 2.7251519541093 | epot = -22.144863024243 | etot = -16.6295658727981 +415000 ekin = 2.46789019087319 | erot = 2.24891720770208 | epot = -22.1977268949425 | etot = -17.4809194963672 +416000 ekin = 3.30766536008866 | erot = 1.55878918639505 | epot = -22.1694878213559 | etot = -17.3030332748722 +417000 ekin = 3.95074944679108 | erot = 2.44780201516577 | epot = -22.1018895242095 | etot = -15.7033380622526 +418000 ekin = 2.77340936693415 | erot = 2.68993840817536 | epot = -21.977327562767 | etot = -16.5139797876575 +419000 ekin = 2.38275203991917 | erot = 2.97769109273478 | epot = -21.9010102007429 | etot = -16.5405670680889 +420000 ekin = 1.80397709765343 | erot = 1.82715488758969 | epot = -21.8849019003165 | etot = -18.2537699150734 +421000 ekin = 1.35294173647286 | erot = 1.7746327595132 | epot = -21.8324727162455 | etot = -18.7048982202595 +422000 ekin = 1.39101035408781 | erot = 2.74626781088313 | epot = -21.8922044238521 | etot = -17.7549262588811 +423000 ekin = 1.58313118355036 | erot = 3.0798858727609 | epot = -21.9303489156376 | etot = -17.2673318593263 +424000 ekin = 2.38308976422853 | erot = 2.0290563283423 | epot = -22.0003513420112 | etot = -17.5882052494403 +425000 ekin = 2.32292982636642 | erot = 2.54472792699355 | epot = -22.0461884305753 | etot = -17.1785306772154 +426000 ekin = 2.07274921207622 | erot = 3.12068562025985 | epot = -21.9899604929779 | etot = -16.7965256606419 +427000 ekin = 2.16499158921497 | erot = 2.43609860560844 | epot = -21.883756502818 | etot = -17.2826663079946 +428000 ekin = 1.81001230881454 | erot = 1.6518491031194 | epot = -21.8651168729134 | etot = -18.4032554609795 +429000 ekin = 1.67080799563552 | erot = 2.55829004033943 | epot = -21.823203822061 | etot = -17.5941057860861 +430000 ekin = 2.68658781224627 | erot = 2.8591925337156 | epot = -21.8545360487503 | etot = -16.3087557027885 +431000 ekin = 2.77334901985549 | erot = 1.57746917070686 | epot = -21.8360353910944 | etot = -17.485217200532 +432000 ekin = 2.50244674166436 | erot = 1.60779258881598 | epot = -21.7381087453319 | etot = -17.6278694148516 +433000 ekin = 1.85649371322473 | erot = 2.4917335891794 | epot = -21.7919912827364 | etot = -17.4437639803323 +434000 ekin = 2.89302367450635 | erot = 2.7989004560269 | epot = -21.923157505168 | etot = -16.2312333746348 +435000 ekin = 3.67647442700572 | erot = 1.38588132381276 | epot = -22.1019777057281 | etot = -17.0396219549097 +436000 ekin = 3.05510329104703 | erot = 2.00142902882896 | epot = -22.1034257027066 | etot = -17.0468933828306 +437000 ekin = 3.2334117289381 | erot = 1.78346855436481 | epot = -22.1137020887251 | etot = -17.0968218054222 +438000 ekin = 2.86378458795303 | erot = 1.84588842157479 | epot = -22.072414124752 | etot = -17.3627411152242 +439000 ekin = 2.41407153953135 | erot = 2.70066632790346 | epot = -22.0535011599236 | etot = -16.9387632924888 +440000 ekin = 2.22110309163132 | erot = 3.0167468581899 | epot = -22.0773629228072 | etot = -16.839512972986 +441000 ekin = 2.8952003347941 | erot = 2.87911130379518 | epot = -22.2098492363511 | etot = -16.4355375977618 +442000 ekin = 2.05598301233622 | erot = 1.73562369066667 | epot = -22.2689079268812 | etot = -18.4773012238783 +443000 ekin = 1.86650631344267 | erot = 2.00816178040311 | epot = -22.3072964279925 | etot = -18.4326283341467 +444000 ekin = 2.06088560705618 | erot = 2.15265011198712 | epot = -22.3186686701219 | etot = -18.1051329510786 +445000 ekin = 2.10029110633057 | erot = 2.2800331405132 | epot = -22.3739249314238 | etot = -17.9936006845801 +446000 ekin = 2.42121462246176 | erot = 2.85365097104764 | epot = -22.4030820729314 | etot = -17.128216479422 +447000 ekin = 2.19905370994782 | erot = 2.98216231903379 | epot = -22.4760062523442 | etot = -17.2947902233625 +448000 ekin = 2.35344530580996 | erot = 2.94496431571713 | epot = -22.4927466941727 | etot = -17.1943370726456 +449000 ekin = 2.39032460069844 | erot = 2.92889137252356 | epot = -22.5027878081879 | etot = -17.1835718349659 +450000 ekin = 1.87543018481826 | erot = 1.69603328668916 | epot = -22.4562462785528 | etot = -18.8847828070454 +451000 ekin = 2.01850498861611 | erot = 1.92812989993404 | epot = -22.4817672986218 | etot = -18.5351324100716 +452000 ekin = 1.36652609658347 | erot = 1.87105620810406 | epot = -22.4501755877893 | etot = -19.2125932831018 +453000 ekin = 2.0599225820261 | erot = 2.56027964608567 | epot = -22.2765869721545 | etot = -17.6563847440428 +454000 ekin = 1.47421749728914 | erot = 2.19120144206327 | epot = -22.1381671023588 | etot = -18.4727481630064 +455000 ekin = 1.65550022307771 | erot = 2.72165814308168 | epot = -21.9904394751434 | etot = -17.613281108984 +456000 ekin = 2.34827062603187 | erot = 2.00722438151074 | epot = -21.9105114729144 | etot = -17.5550164653718 +457000 ekin = 2.01338249991754 | erot = 2.37170378033695 | epot = -21.8819790372449 | etot = -17.4968927569904 +458000 ekin = 1.72815421955305 | erot = 2.26329746701056 | epot = -21.9116044050661 | etot = -17.9201527185024 +459000 ekin = 2.48347398227002 | erot = 2.32376196929941 | epot = -21.9949404038568 | etot = -17.1877044522874 +460000 ekin = 2.18770854699575 | erot = 2.00081662918322 | epot = -21.9585322440375 | etot = -17.7700070678586 +461000 ekin = 2.27716435663744 | erot = 2.9019565626907 | epot = -21.8877682177659 | etot = -16.7086472984378 +462000 ekin = 2.61244889701715 | erot = 1.79757533309513 | epot = -21.9143949779912 | etot = -17.5043707478789 +463000 ekin = 2.55684814656524 | erot = 3.31200610027657 | epot = -21.8497749242034 | etot = -15.9809206773616 +464000 ekin = 2.15312235839157 | erot = 2.38947690136822 | epot = -21.7825241097983 | etot = -17.2399248500385 +465000 ekin = 2.5257577253008 | erot = 3.61331808321477 | epot = -21.70727052519 | etot = -15.5681947166744 +466000 ekin = 1.97943618964772 | erot = 2.88688528337621 | epot = -21.7222514097774 | etot = -16.8559299367535 +467000 ekin = 1.62882257493983 | erot = 2.60892282315519 | epot = -21.8080861041928 | etot = -17.5703407060978 +468000 ekin = 1.09823854644375 | erot = 3.35073251937299 | epot = -21.8523811012329 | etot = -17.4034100354162 +469000 ekin = 1.70229597385131 | erot = 2.7588984072639 | epot = -21.8665756757502 | etot = -17.405381294635 +470000 ekin = 1.85844768422772 | erot = 2.8706546217625 | epot = -21.9036130079376 | etot = -17.1745107019474 +471000 ekin = 2.74399539924327 | erot = 2.34943354955083 | epot = -21.9543989717239 | etot = -16.8609700229298 +472000 ekin = 2.7182617922689 | erot = 2.13581917182001 | epot = -22.0449294707038 | etot = -17.1908485066149 +473000 ekin = 2.29380642077304 | erot = 2.07595163501546 | epot = -22.0706135180041 | etot = -17.7008554622156 +474000 ekin = 2.22690782122656 | erot = 2.1647059901395 | epot = -22.0704871162386 | etot = -17.6788733048726 +475000 ekin = 2.4978679533329 | erot = 2.09510196885223 | epot = -22.0509742163569 | etot = -17.4580042941718 +476000 ekin = 2.20264299239668 | erot = 1.76757923556403 | epot = -21.9427521555982 | etot = -17.9725299276375 +477000 ekin = 2.45872237399503 | erot = 2.38426997478539 | epot = -21.9051474088983 | etot = -17.0621550601178 +478000 ekin = 1.89905964030889 | erot = 2.04864356713722 | epot = -21.9114508304737 | etot = -17.9637476230276 +479000 ekin = 2.27133902137491 | erot = 3.08755197682257 | epot = -21.8872829373266 | etot = -16.5283919391291 +480000 ekin = 1.67015605151468 | erot = 2.76560365045837 | epot = -21.8968158425889 | etot = -17.4610561406158 +481000 ekin = 1.81882995680354 | erot = 2.94136105971067 | epot = -21.8571304925407 | etot = -17.0969394760265 +482000 ekin = 2.15305069632653 | erot = 2.07327897823918 | epot = -21.8152992914385 | etot = -17.5889696168728 +483000 ekin = 1.50004535981758 | erot = 1.99364343935404 | epot = -21.7843644990947 | etot = -18.2906756999231 +484000 ekin = 1.85234844255529 | erot = 2.34000231202781 | epot = -21.8614293841666 | etot = -17.6690786295835 +485000 ekin = 1.64682178328831 | erot = 2.50437862576679 | epot = -21.8969405008956 | etot = -17.7457400918405 +486000 ekin = 1.86104257115938 | erot = 2.15995925522771 | epot = -21.8879397421696 | etot = -17.8669379157825 +487000 ekin = 2.34639026339217 | erot = 3.11622773972825 | epot = -21.9707194220382 | etot = -16.5081014189178 +488000 ekin = 2.27484994031488 | erot = 3.28147617368226 | epot = -21.9426475486812 | etot = -16.3863214346841 +489000 ekin = 2.38811933287365 | erot = 2.56070014238266 | epot = -21.8600861168089 | etot = -16.9112666415526 +490000 ekin = 2.12976254880773 | erot = 3.54525746010289 | epot = -21.7617637919249 | etot = -16.0867437830143 +491000 ekin = 2.20850764560417 | erot = 2.48919239454317 | epot = -21.6468680069132 | etot = -16.9491679667658 +492000 ekin = 2.43957739853024 | erot = 2.76323186690378 | epot = -21.6230951653168 | etot = -16.4202858998828 +493000 ekin = 1.79391622496105 | erot = 2.29052518470042 | epot = -21.6945975278841 | etot = -17.6101561182226 +494000 ekin = 2.11542949642227 | erot = 3.01313865872481 | epot = -21.7637004472039 | etot = -16.6351322920568 +495000 ekin = 2.1568591957283 | erot = 2.49005677705245 | epot = -21.8783556810053 | etot = -17.2314397082246 +496000 ekin = 2.06037552826019 | erot = 2.60698629104699 | epot = -21.9276220332962 | etot = -17.260260213989 +497000 ekin = 2.52228141248763 | erot = 1.710130192768 | epot = -21.8769629373864 | etot = -17.6445513321307 +498000 ekin = 2.15394500805411 | erot = 1.78777085700022 | epot = -21.8243748366056 | etot = -17.8826589715513 +499000 ekin = 3.01296343053108 | erot = 1.73934813146708 | epot = -21.8392632680439 | etot = -17.0869517060458 +500000 ekin = 2.76642119718551 | erot = 2.50182215373002 | epot = -21.830671988603 | etot = -16.5624286376875 +501000 ekin = 2.69367571720338 | erot = 2.99042817784739 | epot = -21.7039103667138 | etot = -16.0198064716631 +502000 ekin = 1.91666556639459 | erot = 3.89815239299714 | epot = -21.5845300715443 | etot = -15.7697121121525 +503000 ekin = 1.80513448090424 | erot = 2.94463129244922 | epot = -21.408846856306 | etot = -16.6590810829525 +504000 ekin = 1.70082883689617 | erot = 3.04312463877848 | epot = -21.3315058298563 | etot = -16.5875523541817 +505000 ekin = 2.75953000022913 | erot = 2.14635942194519 | epot = -21.3525103549444 | etot = -16.4466209327701 +506000 ekin = 2.29728093923375 | erot = 2.04403144683579 | epot = -21.3794572010067 | etot = -17.0381448149372 +507000 ekin = 3.17636857959624 | erot = 2.42164349794529 | epot = -21.4731108320934 | etot = -15.8750987545519 +508000 ekin = 2.53590109429522 | erot = 2.52790695399208 | epot = -21.6300410847596 | etot = -16.5662330364723 +509000 ekin = 2.12748393236722 | erot = 2.83071060777933 | epot = -21.7781347526393 | etot = -16.8199402124927 +510000 ekin = 2.16138023827908 | erot = 1.44739524871434 | epot = -21.8661383228762 | etot = -18.2573628358828 +511000 ekin = 2.5432337386743 | erot = 2.77108674378182 | epot = -21.9670096484361 | etot = -16.65268916598 +512000 ekin = 2.32820226144235 | erot = 2.8042493163404 | epot = -22.0177071813425 | etot = -16.8852556035598 +513000 ekin = 2.47700215188743 | erot = 2.17127792631492 | epot = -22.0110285387343 | etot = -17.3627484605319 +514000 ekin = 2.76651136580707 | erot = 2.55680467976047 | epot = -22.0909970005814 | etot = -16.7676809550138 +515000 ekin = 2.5202331965388 | erot = 1.82499891391154 | epot = -22.1712715169565 | etot = -17.8260394065062 +516000 ekin = 2.81741012640848 | erot = 2.22255273815334 | epot = -22.2621950124766 | etot = -17.2222321479148 +517000 ekin = 2.03287831599844 | erot = 2.04932227860395 | epot = -22.2794486174447 | etot = -18.1972480228423 +518000 ekin = 2.18753527424292 | erot = 2.76011341951323 | epot = -22.2667176836093 | etot = -17.3190689898532 +519000 ekin = 2.23127004412533 | erot = 2.23036422155453 | epot = -22.3641437250361 | etot = -17.9025094593562 +520000 ekin = 1.88835704965194 | erot = 2.20137678015021 | epot = -22.4547788180201 | etot = -18.365044988218 +521000 ekin = 2.57911594310157 | erot = 1.87216207270883 | epot = -22.6071563154982 | etot = -18.1558782996878 +522000 ekin = 3.47551915105823 | erot = 1.7762374523623 | epot = -22.6852629490162 | etot = -17.4335063455956 +523000 ekin = 2.84545293485784 | erot = 2.47507537559667 | epot = -22.727728352182 | etot = -17.4072000417275 +524000 ekin = 2.40278895519472 | erot = 2.37529684497552 | epot = -22.6643160930411 | etot = -17.8862302928709 +525000 ekin = 1.59507033575009 | erot = 2.61508341973268 | epot = -22.5633164974795 | etot = -18.3531627419968 +526000 ekin = 1.67007684014044 | erot = 1.59545284095808 | epot = -22.511319978416 | etot = -19.2457902973175 +527000 ekin = 2.19667533945247 | erot = 1.93330231246752 | epot = -22.4181345854017 | etot = -18.2881569334817 +528000 ekin = 2.6386695788743 | erot = 2.84200507572115 | epot = -22.4271496272375 | etot = -16.946474972642 +529000 ekin = 2.71685924097597 | erot = 3.01195511036354 | epot = -22.4607209136928 | etot = -16.7319065623533 +530000 ekin = 2.59646038482582 | erot = 2.1317692819235 | epot = -22.3209630404852 | etot = -17.5927333737358 +531000 ekin = 2.96818211550215 | erot = 2.35836906019033 | epot = -22.2240561584028 | etot = -16.8975049827103 +532000 ekin = 2.54400448114086 | erot = 2.32266423688292 | epot = -22.2383323718678 | etot = -17.3716636538441 +533000 ekin = 2.47235456553948 | erot = 2.96337386592411 | epot = -22.2434312615742 | etot = -16.8077028301106 +534000 ekin = 2.104894788263 | erot = 2.03894640697441 | epot = -22.2624131617689 | etot = -18.1185719665315 +535000 ekin = 3.76811893478762 | erot = 2.64694643296526 | epot = -22.2342741399369 | etot = -15.819208772184 +536000 ekin = 2.78932048770646 | erot = 1.95046774407585 | epot = -22.1710588414062 | etot = -17.4312706096239 +537000 ekin = 2.84547413963846 | erot = 2.6235440651257 | epot = -22.0792539675812 | etot = -16.610235762817 +538000 ekin = 2.67615418297317 | erot = 2.08962546790895 | epot = -21.9560559397441 | etot = -17.190276288862 +539000 ekin = 2.73041224389434 | erot = 2.35761678189143 | epot = -22.0360310245606 | etot = -16.9480019987748 +540000 ekin = 2.45513520817505 | erot = 2.4980712479617 | epot = -22.1997448500024 | etot = -17.2465383938656 +541000 ekin = 3.48268229748523 | erot = 2.77797330372245 | epot = -22.2939060084685 | etot = -16.0332504072608 +542000 ekin = 2.48960436886327 | erot = 2.87332479229809 | epot = -22.3004887690915 | etot = -16.9375596079301 +543000 ekin = 2.34699181381528 | erot = 2.86167842257193 | epot = -22.3027783678197 | etot = -17.0941081314325 +544000 ekin = 2.22918134297116 | erot = 1.4682792461716 | epot = -22.2757921511235 | etot = -18.5783315619807 +545000 ekin = 2.45393652663684 | erot = 2.14178562937392 | epot = -22.2696521197313 | etot = -17.6739299637206 +546000 ekin = 1.98434977645849 | erot = 2.24144093113159 | epot = -22.232171992891 | etot = -18.0063812853009 +547000 ekin = 2.56230350196472 | erot = 1.8957462591202 | epot = -22.2013923967025 | etot = -17.7433426356176 +548000 ekin = 1.72907614338158 | erot = 1.64127030305735 | epot = -22.1897325934373 | etot = -18.8193861469984 +549000 ekin = 1.95696682165776 | erot = 2.64539988943055 | epot = -22.3281210018679 | etot = -17.7257542907796 +550000 ekin = 1.80672944936439 | erot = 1.58554489058937 | epot = -22.4379557312283 | etot = -19.0456813912745 +551000 ekin = 2.19785864069661 | erot = 2.26344341600386 | epot = -22.4944444264338 | etot = -18.0331423697333 +552000 ekin = 2.074442528674 | erot = 2.49246441473273 | epot = -22.5313734934249 | etot = -17.9644665500182 +553000 ekin = 2.94841939583913 | erot = 2.1230978630074 | epot = -22.5870982488507 | etot = -17.5155809900042 +554000 ekin = 2.86687820100223 | erot = 1.9428729838172 | epot = -22.755332978123 | etot = -17.9455817933036 +555000 ekin = 2.43102414091851 | erot = 2.28708167460996 | epot = -22.8409516497233 | etot = -18.1228458341949 +556000 ekin = 2.31020008885682 | erot = 2.55815314755913 | epot = -22.8777743355338 | etot = -18.0094210991179 +557000 ekin = 2.81359485404958 | erot = 1.42586137655665 | epot = -22.93912738 | etot = -18.6996711493938 +558000 ekin = 2.7970970853355 | erot = 1.99545051650404 | epot = -22.9823826800611 | etot = -18.1898350782216 +559000 ekin = 3.34842854089643 | erot = 2.30939572175805 | epot = -23.0558646505447 | etot = -17.3980403878902 +560000 ekin = 3.12583165184862 | erot = 2.33613566970363 | epot = -23.0537007225862 | etot = -17.591733401034 +561000 ekin = 2.9127609673679 | erot = 2.07459481236913 | epot = -22.982260765434 | etot = -17.994904985697 +562000 ekin = 3.33017095598494 | erot = 2.52215992853225 | epot = -22.8889363116257 | etot = -17.0366054271086 +563000 ekin = 2.70200701416854 | erot = 1.64770113379199 | epot = -22.8712722594835 | etot = -18.521564111523 +564000 ekin = 2.82953631474813 | erot = 2.52900560163798 | epot = -22.8387855460795 | etot = -17.4802436296934 +565000 ekin = 2.67999888917708 | erot = 2.05091800967453 | epot = -22.7937507048715 | etot = -18.0628338060199 +566000 ekin = 2.32986557500305 | erot = 2.16379904557213 | epot = -22.8028233873669 | etot = -18.3091587667917 +567000 ekin = 1.92319601586312 | erot = 2.83258522428556 | epot = -22.7588270107033 | etot = -18.0030457705546 +568000 ekin = 2.1767237164987 | erot = 2.23391201707386 | epot = -22.7857243432792 | etot = -18.3750886097066 +569000 ekin = 2.44197408396629 | erot = 2.6515953630557 | epot = -22.7197314796374 | etot = -17.6261620326154 +570000 ekin = 2.43177406209051 | erot = 1.89764945519458 | epot = -22.6963472615904 | etot = -18.3669237443054 +571000 ekin = 2.86160521289847 | erot = 2.96804382024775 | epot = -22.6961835038031 | etot = -16.8665344706569 +572000 ekin = 1.92662919536387 | erot = 3.79135909534691 | epot = -22.6587081618987 | etot = -16.940719871188 +573000 ekin = 2.40137439242946 | erot = 2.29982613356341 | epot = -22.6365074046858 | etot = -17.935306878693 +574000 ekin = 1.68882589350908 | erot = 2.3209740449249 | epot = -22.6783832960445 | etot = -18.6685833576105 +575000 ekin = 1.85490665091732 | erot = 1.8564080891142 | epot = -22.7444448136904 | etot = -19.0331300736588 +576000 ekin = 3.24775679594035 | erot = 2.9556926821431 | epot = -22.6991990620437 | etot = -16.4957495839603 +577000 ekin = 2.89423151645282 | erot = 2.87486712706735 | epot = -22.628436560802 | etot = -16.8593379172818 +578000 ekin = 2.4046091667757 | erot = 2.78216711024699 | epot = -22.4348874817265 | etot = -17.2481112047039 +579000 ekin = 2.40580528046576 | erot = 1.9955781448253 | epot = -22.288913673667 | etot = -17.887530248376 +580000 ekin = 2.69817090358906 | erot = 1.94741864170502 | epot = -22.1754486864787 | etot = -17.5298591411846 +581000 ekin = 2.06309668646281 | erot = 2.97621367011722 | epot = -22.0670098600828 | etot = -17.0276995035027 +582000 ekin = 2.33869527454826 | erot = 3.07898324506955 | epot = -21.9478320300713 | etot = -16.5301535104535 +583000 ekin = 2.23428959741495 | erot = 2.68476693088864 | epot = -21.837983720672 | etot = -16.9189271923684 +584000 ekin = 2.94321016295282 | erot = 2.59995039730549 | epot = -21.7517635625832 | etot = -16.2086030023248 +585000 ekin = 2.36063475490835 | erot = 2.49112677628938 | epot = -21.7173359488816 | etot = -16.8655744176839 +586000 ekin = 3.56583702163525 | erot = 2.02487858259688 | epot = -21.7707868137138 | etot = -16.1800712094817 +587000 ekin = 3.53727585853243 | erot = 1.9725893265202 | epot = -21.7665121756112 | etot = -16.2566469905585 +588000 ekin = 2.82339556293757 | erot = 1.59340504807046 | epot = -21.7545319340972 | etot = -17.3377313230892 +589000 ekin = 2.31627310139818 | erot = 2.20582604523299 | epot = -21.8199173705563 | etot = -17.2978182239252 +590000 ekin = 2.57616671531331 | erot = 1.72768273328208 | epot = -21.8427138199642 | etot = -17.5388643713688 +591000 ekin = 1.91473306171853 | erot = 3.80604384238379 | epot = -21.9351393124187 | etot = -16.2143624083164 +592000 ekin = 2.11222958764659 | erot = 2.84208333850205 | epot = -21.9639458839076 | etot = -17.0096329577589 +593000 ekin = 1.66462149590471 | erot = 2.46217253451014 | epot = -21.9921445323971 | etot = -17.8653505019822 +594000 ekin = 1.86314045588476 | erot = 2.37275936142268 | epot = -22.1149191228505 | etot = -17.879019305543 +595000 ekin = 1.6397125755004 | erot = 2.1497024679856 | epot = -22.2960530768755 | etot = -18.5066380333895 +596000 ekin = 1.86247376576131 | erot = 1.5693809542787 | epot = -22.4014957466218 | etot = -18.9696410265818 +597000 ekin = 2.210739014067 | erot = 2.3087175693751 | epot = -22.4599242604733 | etot = -17.9404676770312 +598000 ekin = 1.8660134932493 | erot = 3.02311727399809 | epot = -22.5165298316334 | etot = -17.627399064386 +599000 ekin = 2.86271635930755 | erot = 2.19928854437227 | epot = -22.536599708025 | etot = -17.4745948043452 +600000 ekin = 2.65062163067179 | erot = 2.14533898812782 | epot = -22.4620537969303 | etot = -17.6660931781307 +601000 ekin = 2.97018864875202 | erot = 3.19824090103877 | epot = -22.3271949752462 | etot = -16.1587654254554 +602000 ekin = 2.93416893709001 | erot = 2.68627449040958 | epot = -22.2245183728173 | etot = -16.6040749453177 +603000 ekin = 2.5987545006459 | erot = 2.71301833029982 | epot = -22.1705323477201 | etot = -16.8587595167744 +604000 ekin = 1.79059859762797 | erot = 2.11515305424796 | epot = -22.1931056020217 | etot = -18.2873539501458 +605000 ekin = 1.82914051863723 | erot = 2.27656979248766 | epot = -22.2183915784731 | etot = -18.1126812673482 +606000 ekin = 2.33864125390345 | erot = 2.204164937778 | epot = -22.1617656383863 | etot = -17.6189594467048 +607000 ekin = 2.72666217259876 | erot = 2.97710334336218 | epot = -22.1572786906588 | etot = -16.4535131746978 +608000 ekin = 2.45226937954678 | erot = 2.41232790919959 | epot = -22.1263051367364 | etot = -17.2617078479901 +609000 ekin = 1.91032127854288 | erot = 2.62712516529567 | epot = -22.0127581830193 | etot = -17.4753117391807 +610000 ekin = 3.01319055031108 | erot = 2.17098104720965 | epot = -21.930499629869 | etot = -16.7463280323483 +611000 ekin = 2.44410994437293 | erot = 2.75159061185424 | epot = -21.9258193850468 | etot = -16.7301188288197 +612000 ekin = 2.50271115837174 | erot = 2.16817640692169 | epot = -21.9676183236645 | etot = -17.2967307583711 +613000 ekin = 3.01842230632868 | erot = 2.12784419676567 | epot = -22.0277467117807 | etot = -16.8814802086864 +614000 ekin = 2.25331711369829 | erot = 2.99334048390158 | epot = -22.0701464667307 | etot = -16.8234888691309 +615000 ekin = 1.66376443031995 | erot = 2.63613776051569 | epot = -21.9985978951916 | etot = -17.698695704356 +616000 ekin = 1.89454248699046 | erot = 2.87318355169532 | epot = -22.0041678369046 | etot = -17.2364417982189 +617000 ekin = 2.14789714287838 | erot = 2.51249074123957 | epot = -22.0251474680604 | etot = -17.3647595839425 +618000 ekin = 3.11174934178844 | erot = 2.74374306269141 | epot = -21.980284295602 | etot = -16.1247918911221 +619000 ekin = 3.41036213968179 | erot = 2.10616794159728 | epot = -21.9557959924962 | etot = -16.4392659112171 +620000 ekin = 4.28430989238205 | erot = 2.19572475327593 | epot = -21.9033881020935 | etot = -15.4233534564355 +621000 ekin = 3.095687767491 | erot = 2.55794040804605 | epot = -21.8286763731363 | etot = -16.1750481975993 +622000 ekin = 2.76030419206697 | erot = 2.60754397958254 | epot = -21.7459002641757 | etot = -16.3780520925262 +623000 ekin = 2.87269212022169 | erot = 2.90401311950186 | epot = -21.5853226709315 | etot = -15.8086174312079 +624000 ekin = 2.01889500087932 | erot = 3.41825755609791 | epot = -21.4095311686242 | etot = -15.972378611647 +625000 ekin = 2.87966631754697 | erot = 2.69115421564283 | epot = -21.2859406043045 | etot = -15.7151200711147 +626000 ekin = 2.56087279949319 | erot = 2.15801254335177 | epot = -21.2329175358055 | etot = -16.5140321929606 +627000 ekin = 2.30197939613517 | erot = 2.40176668957967 | epot = -21.2932794652839 | etot = -16.589533379569 +628000 ekin = 2.23988628353727 | erot = 2.75332535542195 | epot = -21.4558642198861 | etot = -16.4626525809268 +629000 ekin = 2.20891060851904 | erot = 1.97036896055006 | epot = -21.6109313731644 | etot = -17.4316518040953 +630000 ekin = 2.48711004105954 | erot = 2.14055508379566 | epot = -21.6286281269545 | etot = -17.0009630020993 +631000 ekin = 2.05035510102044 | erot = 1.78519131042561 | epot = -21.633635046353 | etot = -17.798088634907 +632000 ekin = 1.65439924450982 | erot = 3.28310987077496 | epot = -21.6999899301469 | etot = -16.7624808148621 +633000 ekin = 2.34657988531209 | erot = 2.34109631044869 | epot = -21.8317647703271 | etot = -17.1440885745664 +634000 ekin = 2.31570267703931 | erot = 2.471293173825 | epot = -21.8814211467029 | etot = -17.0944252958386 +635000 ekin = 1.99068848818427 | erot = 3.35493927676214 | epot = -21.9111632351734 | etot = -16.565535470227 +636000 ekin = 2.5015676385862 | erot = 2.48847742334419 | epot = -21.8752689055209 | etot = -16.8852238435905 +637000 ekin = 2.76558055064046 | erot = 2.80410341825293 | epot = -21.7874464522772 | etot = -16.2177624833838 +638000 ekin = 2.45488734924466 | erot = 2.81516363335622 | epot = -21.897362338598 | etot = -16.6273113559971 +639000 ekin = 1.89221088715375 | erot = 2.13319565970052 | epot = -21.932098303477 | etot = -17.9066917566227 +640000 ekin = 2.12173400886946 | erot = 3.32302167857403 | epot = -21.8808288554836 | etot = -16.4360731680401 +641000 ekin = 2.09554541112562 | erot = 2.23098450754968 | epot = -21.9203390995502 | etot = -17.5938091808749 +642000 ekin = 2.28696138506763 | erot = 2.67378976619349 | epot = -21.9723604262128 | etot = -17.0116092749517 +643000 ekin = 2.74450005384908 | erot = 2.20403941809548 | epot = -21.9235240791533 | etot = -16.9749846072088 +644000 ekin = 2.87909523138453 | erot = 3.40688779630214 | epot = -21.9417833997402 | etot = -15.6558003720535 +645000 ekin = 2.38284095628021 | erot = 2.10846397463902 | epot = -21.8306349073152 | etot = -17.339329976396 +646000 ekin = 2.68568471833193 | erot = 1.8085210536706 | epot = -21.6853054888873 | etot = -17.1910997168848 +647000 ekin = 2.44462012552757 | erot = 2.00446720103467 | epot = -21.4974635292911 | etot = -17.0483762027288 +648000 ekin = 2.22150753159449 | erot = 1.69679185313772 | epot = -21.5947311257684 | etot = -17.6764317410362 +649000 ekin = 2.55943952639507 | erot = 1.77203724563615 | epot = -22.016770390185 | etot = -17.6852936181538 +650000 ekin = 2.7234725572106 | erot = 2.20418229003755 | epot = -22.1594214535889 | etot = -17.2317666063407 +651000 ekin = 2.25383373914402 | erot = 3.26326768595798 | epot = -22.2274805933885 | etot = -16.7103791682865 +652000 ekin = 2.35810253390822 | erot = 2.29591208392313 | epot = -22.2332195197311 | etot = -17.5792049018997 +653000 ekin = 2.06421004499471 | erot = 2.1417184547457 | epot = -22.2265612208312 | etot = -18.0206327210908 +654000 ekin = 2.30460304373657 | erot = 1.85567946278894 | epot = -22.2521914868228 | etot = -18.0919089802973 +655000 ekin = 2.11188824015111 | erot = 1.79072614414006 | epot = -22.2262193909715 | etot = -18.3236050066803 +656000 ekin = 2.44561836830367 | erot = 2.32567811025775 | epot = -22.1872376286341 | etot = -17.4159411500727 +657000 ekin = 2.45751083141108 | erot = 2.86439216413734 | epot = -22.1805503246548 | etot = -16.8586473291064 +658000 ekin = 2.49955432693124 | erot = 2.85472680235227 | epot = -22.1390040132353 | etot = -16.7847228839518 +659000 ekin = 3.37980090980363 | erot = 2.77552992994233 | epot = -21.9898923341708 | etot = -15.8345614944249 +660000 ekin = 2.6941462621918 | erot = 1.99094454704574 | epot = -21.839770569098 | etot = -17.1546797598605 +661000 ekin = 2.21049176877594 | erot = 2.52393650500608 | epot = -21.6857326790217 | etot = -16.9513044052397 +662000 ekin = 2.06962867519899 | erot = 2.53976085175021 | epot = -21.6239147287108 | etot = -17.0145252017616 +663000 ekin = 2.27770295544224 | erot = 2.30124717941155 | epot = -21.5870186127932 | etot = -17.0080684779394 +664000 ekin = 2.39061717453214 | erot = 1.87616423363735 | epot = -21.4930500427881 | etot = -17.2262686346187 +665000 ekin = 2.66924405123179 | erot = 2.29240983153227 | epot = -21.4402310096658 | etot = -16.4785771269017 +666000 ekin = 1.66318176263893 | erot = 2.30827907651666 | epot = -21.3477804932103 | etot = -17.3763196540548 +667000 ekin = 1.65573830146343 | erot = 2.8261361193353 | epot = -21.2651811028886 | etot = -16.7833066820899 +668000 ekin = 2.50126196238916 | erot = 3.29062396521939 | epot = -21.1310768281354 | etot = -15.3391909005269 +669000 ekin = 1.61008562219097 | erot = 2.65727107854378 | epot = -21.0513800034042 | etot = -16.7840233026694 +670000 ekin = 2.21851826153844 | erot = 2.60770568109394 | epot = -20.9727942140714 | etot = -16.146570271439 +671000 ekin = 2.25905318343359 | erot = 2.15965495575029 | epot = -20.920836534986 | etot = -16.5021283958021 +672000 ekin = 1.93426342346647 | erot = 1.65365047668441 | epot = -20.8333028169839 | etot = -17.245388916833 +673000 ekin = 1.880896686753 | erot = 2.07483128120029 | epot = -20.79952620348 | etot = -16.8437982355267 +674000 ekin = 2.06783468057301 | erot = 2.16234064938726 | epot = -20.8176950919606 | etot = -16.5875197620003 +675000 ekin = 2.03952283590142 | erot = 2.48129689359269 | epot = -20.8297865902612 | etot = -16.3089668607671 +676000 ekin = 2.44687523374789 | erot = 2.77932995735251 | epot = -20.8513819036485 | etot = -15.6251767125481 +677000 ekin = 2.18851088067448 | erot = 2.6192892566419 | epot = -20.8589021998565 | etot = -16.0511020625401 +678000 ekin = 2.13451298865477 | erot = 2.78742961560772 | epot = -20.7380850837789 | etot = -15.8161424795164 +679000 ekin = 2.15556981522704 | erot = 2.17593910434841 | epot = -20.629255081746 | etot = -16.2977461621706 +680000 ekin = 2.0771745141444 | erot = 2.68436897198806 | epot = -20.6512705044545 | etot = -15.889727018322 +681000 ekin = 2.16836766753576 | erot = 1.82666294843077 | epot = -20.7392652191906 | etot = -16.744234603224 +682000 ekin = 3.01810965188601 | erot = 2.39774897550361 | epot = -20.7185667085479 | etot = -15.3027080811583 +683000 ekin = 2.84169666492797 | erot = 2.09885122074905 | epot = -20.7261705834808 | etot = -15.7856226978037 +684000 ekin = 1.9625035286937 | erot = 2.99543980855394 | epot = -20.7697045673731 | etot = -15.8117612301254 +685000 ekin = 1.50086016290167 | erot = 2.04478648729578 | epot = -20.7788952528481 | etot = -17.2332486026506 +686000 ekin = 2.3009298353038 | erot = 2.55442118756325 | epot = -20.7673358731011 | etot = -15.9119848502341 +687000 ekin = 1.86053862979306 | erot = 2.84846934037481 | epot = -20.7009117540898 | etot = -15.9919037839219 +688000 ekin = 2.56859020075852 | erot = 2.23263295871676 | epot = -20.6563366249257 | etot = -15.8551134654504 +689000 ekin = 2.7493014170063 | erot = 2.68327386026116 | epot = -20.8092642099637 | etot = -15.3766889326963 +690000 ekin = 2.67477310841297 | erot = 2.52397256899153 | epot = -21.0730303416649 | etot = -15.8742846642604 +691000 ekin = 2.28465281003006 | erot = 2.52273866559282 | epot = -21.2401157605126 | etot = -16.4327242848897 +692000 ekin = 2.42087744380444 | erot = 3.24812320332686 | epot = -21.2665776826931 | etot = -15.5975770355618 +693000 ekin = 2.37642605279041 | erot = 2.99546830568891 | epot = -21.3330277418611 | etot = -15.9611333833818 +694000 ekin = 2.69750178365984 | erot = 2.53085866970816 | epot = -21.521485598392 | etot = -16.293125145024 +695000 ekin = 2.49230316198816 | erot = 1.18105864485318 | epot = -21.6959912399269 | etot = -18.0226294330856 +696000 ekin = 1.86075498586631 | erot = 1.46501529683133 | epot = -21.6808441671222 | etot = -18.3550738844245 +697000 ekin = 2.40460770445908 | erot = 2.10461647488794 | epot = -21.7143559347048 | etot = -17.2051317553578 +698000 ekin = 2.32098148261586 | erot = 1.91506962097515 | epot = -21.7787361369849 | etot = -17.5426850333939 +699000 ekin = 2.44943497732062 | erot = 2.56143482106644 | epot = -21.7638026578475 | etot = -16.7529328594605 +700000 ekin = 2.13119890669415 | erot = 2.28802336161954 | epot = -21.6714710604343 | etot = -17.2522487921206 +701000 ekin = 2.15013169314239 | erot = 2.18565847708907 | epot = -21.5488216255628 | etot = -17.2130314553313 +702000 ekin = 1.57482438035702 | erot = 1.99931097090508 | epot = -21.5047640382371 | etot = -17.930628686975 +703000 ekin = 2.08829522236785 | erot = 2.17557396869524 | epot = -21.5242713758434 | etot = -17.2604021847803 +704000 ekin = 2.82144699483839 | erot = 1.94479401958833 | epot = -21.5462466947694 | etot = -16.7800056803427 +705000 ekin = 2.81019786745821 | erot = 2.16662483548889 | epot = -21.497690476826 | etot = -16.5208677738789 +706000 ekin = 1.97639068263159 | erot = 2.31468002405233 | epot = -21.494117475981 | etot = -17.2030467692971 +707000 ekin = 1.90740387464487 | erot = 2.04436544372037 | epot = -21.5505486138142 | etot = -17.5987792954489 +708000 ekin = 2.4927128838246 | erot = 2.15829540621563 | epot = -21.5728746117359 | etot = -16.9218663216957 +709000 ekin = 2.89296518644075 | erot = 2.58120965850485 | epot = -21.6152997801578 | etot = -16.1411249352122 +710000 ekin = 2.18515172086139 | erot = 2.27924743097097 | epot = -21.5865916502444 | etot = -17.122192498412 +711000 ekin = 2.31589231212299 | erot = 1.40143925977899 | epot = -21.6089597508522 | etot = -17.8916281789502 +712000 ekin = 2.55835611026778 | erot = 2.27281573655802 | epot = -21.7227687229586 | etot = -16.8915968761328 +713000 ekin = 1.95615391137192 | erot = 2.3180685223896 | epot = -21.8059432402922 | etot = -17.5317208065307 +714000 ekin = 2.56238583099812 | erot = 2.10850361056242 | epot = -21.8681675013087 | etot = -17.1972780597481 +715000 ekin = 2.42321114653449 | erot = 3.74023135295615 | epot = -21.8498336266088 | etot = -15.6863911271181 +716000 ekin = 2.83316600532177 | erot = 2.84850242081136 | epot = -21.7640231598546 | etot = -16.0823547337214 +717000 ekin = 3.45113934412558 | erot = 3.20598462177201 | epot = -21.667790662391 | etot = -15.0106666964934 +718000 ekin = 3.10736232683018 | erot = 3.94031338601797 | epot = -21.5629179727886 | etot = -14.5152422599405 +719000 ekin = 2.38564322644681 | erot = 2.95089811755838 | epot = -21.5481188237003 | etot = -16.2115774796951 +720000 ekin = 2.22543420991222 | erot = 3.14305432696276 | epot = -21.5381615962024 | etot = -16.1696730593274 +721000 ekin = 1.71709109813907 | erot = 2.23939430363989 | epot = -21.4645851946691 | etot = -17.5080997928902 +722000 ekin = 1.93213958129581 | erot = 2.81573218276728 | epot = -21.4896847080113 | etot = -16.7418129439482 +723000 ekin = 2.3814534534689 | erot = 2.55666957995948 | epot = -21.4374887927968 | etot = -16.4993657593684 +724000 ekin = 1.74740284448188 | erot = 2.4555617568904 | epot = -21.4125175551609 | etot = -17.2095529537886 +725000 ekin = 2.29233638352032 | erot = 2.9526701477774 | epot = -21.4751392844086 | etot = -16.2301327531109 +726000 ekin = 1.63503646092182 | erot = 2.30649262262117 | epot = -21.5156851039584 | etot = -17.5741560204154 +727000 ekin = 2.46705454176008 | erot = 3.19802987014479 | epot = -21.5382715508196 | etot = -15.8731871389148 +728000 ekin = 2.21709576272191 | erot = 2.16616227421244 | epot = -21.5244744557248 | etot = -17.1412164187904 +729000 ekin = 1.89396537247993 | erot = 1.66596987620967 | epot = -21.5644109232526 | etot = -18.004475674563 +730000 ekin = 1.78155182892059 | erot = 2.15399661961713 | epot = -21.5594738957829 | etot = -17.6239254472452 +731000 ekin = 2.16713092512296 | erot = 2.96875570154118 | epot = -21.4952326145865 | etot = -16.3593459879223 +732000 ekin = 2.40927355189018 | erot = 2.27189990077002 | epot = -21.3831563581627 | etot = -16.7019829055024 +733000 ekin = 3.04824198143784 | erot = 2.57289903054807 | epot = -21.429005165309 | etot = -15.8078641533231 +734000 ekin = 2.36703883022855 | erot = 2.04468815017469 | epot = -21.4926214065432 | etot = -17.0808944261399 +735000 ekin = 2.13292788677937 | erot = 1.55097035487251 | epot = -21.5455592190822 | etot = -17.8616609774303 +736000 ekin = 2.13562110082196 | erot = 3.45795834862287 | epot = -21.6515763333194 | etot = -16.0579968838746 +737000 ekin = 1.73550703692746 | erot = 3.58781244645382 | epot = -21.6785680654269 | etot = -16.3552485820456 +738000 ekin = 2.01136680767019 | erot = 2.50533140705366 | epot = -21.7068415263434 | etot = -17.1901433116196 +739000 ekin = 1.85122466968333 | erot = 2.19323904324285 | epot = -21.7211705032462 | etot = -17.6767067903201 +740000 ekin = 2.84677298867337 | erot = 2.79086338446698 | epot = -21.7460997683893 | etot = -16.108463395249 +741000 ekin = 2.47281769013274 | erot = 2.90867674862121 | epot = -21.8038806031312 | etot = -16.4223861643772 +742000 ekin = 2.74212748781964 | erot = 3.26601844940295 | epot = -21.9417105639309 | etot = -15.9335646267083 +743000 ekin = 2.23337436613032 | erot = 3.20752099935254 | epot = -22.0769938861091 | etot = -16.6360985206262 +744000 ekin = 2.01007582963959 | erot = 3.79208398827071 | epot = -22.1581491314472 | etot = -16.3559893135369 +745000 ekin = 3.14168435406402 | erot = 2.32756039064277 | epot = -22.1552791709709 | etot = -16.6860344262642 +746000 ekin = 2.96147960587595 | erot = 2.64919778641529 | epot = -22.131657657659 | etot = -16.5209802653678 +747000 ekin = 2.31713973406909 | erot = 2.0538838502724 | epot = -22.1362115743712 | etot = -17.7651879900297 +748000 ekin = 2.36228107661837 | erot = 2.41530550223615 | epot = -22.1703943251347 | etot = -17.3928077462802 +749000 ekin = 2.07006713072585 | erot = 2.7743291960411 | epot = -22.1708421357978 | etot = -17.3264458090308 +750000 ekin = 1.65834656870048 | erot = 2.38415657369843 | epot = -22.2465520170919 | etot = -18.204048874693 +751000 ekin = 1.79302728344389 | erot = 2.827102160061 | epot = -22.3488339479635 | etot = -17.7287045044586 +752000 ekin = 1.35555517803007 | erot = 1.46019783589209 | epot = -22.4342877547318 | etot = -19.6185347408096 +753000 ekin = 1.88586262445723 | erot = 2.44014879801272 | epot = -22.3837690917336 | etot = -18.0577576692636 +754000 ekin = 1.74745498380874 | erot = 2.73612011854199 | epot = -22.2852965474798 | etot = -17.8017214451291 +755000 ekin = 2.39590781949902 | erot = 2.41019902787154 | epot = -22.2066358684386 | etot = -17.400529021068 +756000 ekin = 1.83745653598818 | erot = 2.79024351605605 | epot = -22.133592240187 | etot = -17.5058921881428 +757000 ekin = 1.97281200687049 | erot = 2.57792722235948 | epot = -22.0604464398181 | etot = -17.5097072105881 +758000 ekin = 1.18945619136922 | erot = 2.72372183682492 | epot = -21.9899494795137 | etot = -18.0767714513196 +759000 ekin = 2.16230453116658 | erot = 1.39722896511084 | epot = -22.0003304659983 | etot = -18.4407969697208 +760000 ekin = 2.57253050230035 | erot = 2.33269711137819 | epot = -22.0357457302398 | etot = -17.1305181165612 +761000 ekin = 2.08545216810511 | erot = 2.24940559703297 | epot = -22.1132097744113 | etot = -17.7783520092733 +762000 ekin = 2.13509249172209 | erot = 1.66078369856518 | epot = -22.1380840935026 | etot = -18.3422079032154 +763000 ekin = 2.42851727622128 | erot = 3.36016749294484 | epot = -22.2079173436287 | etot = -16.4192325744626 +764000 ekin = 2.84703530894743 | erot = 2.79172375883345 | epot = -22.2143624032421 | etot = -16.5756033354612 +765000 ekin = 1.81325658345262 | erot = 2.77448180912351 | epot = -22.1194010453623 | etot = -17.5316626527862 +766000 ekin = 2.64831101430988 | erot = 2.3138164970859 | epot = -21.9919179324216 | etot = -17.0297904210258 +767000 ekin = 2.58949745571041 | erot = 2.86718473216884 | epot = -21.9087370669524 | etot = -16.4520548790732 +768000 ekin = 1.86313167956692 | erot = 2.78552244417217 | epot = -21.9381577980074 | etot = -17.2895036742683 +769000 ekin = 2.40162376419982 | erot = 2.31402374045875 | epot = -22.0373843590672 | etot = -17.3217368544087 +770000 ekin = 2.49146487205159 | erot = 3.23101926076328 | epot = -22.1439576198693 | etot = -16.4214734870544 +771000 ekin = 2.33226337742861 | erot = 2.27787220200643 | epot = -22.1812213688414 | etot = -17.5710857894063 +772000 ekin = 2.28990016215835 | erot = 2.99389364569332 | epot = -22.2765115340955 | etot = -16.9927177262439 +773000 ekin = 2.23002457595115 | erot = 1.82240115552767 | epot = -22.3379686916384 | etot = -18.2855429601596 +774000 ekin = 2.82350297312971 | erot = 2.21054815770298 | epot = -22.331524297742 | etot = -17.2974731669093 +775000 ekin = 1.82305982105504 | erot = 1.87100336542221 | epot = -22.2729891281483 | etot = -18.578925941671 +776000 ekin = 1.39169167990077 | erot = 3.16027505319296 | epot = -22.2459295451276 | etot = -17.6939628120339 +777000 ekin = 1.6265637770548 | erot = 2.80881827044756 | epot = -22.1611617112313 | etot = -17.7257796637289 +778000 ekin = 1.49436478903862 | erot = 2.24161236856226 | epot = -22.1732646444852 | etot = -18.4372874868843 +779000 ekin = 1.88107404119766 | erot = 1.90732846459751 | epot = -22.2125828989308 | etot = -18.4241803931357 +780000 ekin = 1.70209634464211 | erot = 2.30515299210351 | epot = -22.2800747799124 | etot = -18.2728254431668 +781000 ekin = 2.12615575710868 | erot = 2.5606535839807 | epot = -22.3657963731658 | etot = -17.6789870320765 +782000 ekin = 2.60319344794517 | erot = 1.9571688066736 | epot = -22.278889588664 | etot = -17.7185273340452 +783000 ekin = 2.19489638548848 | erot = 2.9003350616753 | epot = -22.2004563501245 | etot = -17.1052249029607 +784000 ekin = 2.84914111009349 | erot = 2.24051018422878 | epot = -22.2093010900996 | etot = -17.1196497957773 +785000 ekin = 3.14240765153577 | erot = 2.92860772919915 | epot = -22.2500274240077 | etot = -16.1790120432728 +786000 ekin = 2.83372300736036 | erot = 3.44593690351849 | epot = -22.2923595270367 | etot = -16.0126996161579 +787000 ekin = 2.41074903520556 | erot = 3.01381650302092 | epot = -22.2329745868673 | etot = -16.8084090486408 +788000 ekin = 1.99557665602945 | erot = 2.01600225895996 | epot = -22.1996915458458 | etot = -18.1881126308564 +789000 ekin = 2.46258971641133 | erot = 2.27406771625316 | epot = -22.1314921413931 | etot = -17.3948347087286 +790000 ekin = 3.5794195002921 | erot = 2.82440864812442 | epot = -22.0691321886934 | etot = -15.6653040402769 +791000 ekin = 3.1240271028451 | erot = 2.42401718962737 | epot = -22.0808685046086 | etot = -16.5328242121361 +792000 ekin = 3.95429056548242 | erot = 1.97241939137157 | epot = -22.0156932891881 | etot = -16.0889833323341 +793000 ekin = 2.26828416500901 | erot = 2.58677202552917 | epot = -21.9219598803777 | etot = -17.0669036898395 +794000 ekin = 2.16106559150924 | erot = 2.44310931274122 | epot = -21.7619518452423 | etot = -17.1577769409919 +795000 ekin = 1.62519700428841 | erot = 2.41826691867446 | epot = -21.6012749849542 | etot = -17.5578110619913 +796000 ekin = 2.18377144801669 | erot = 2.13093440679001 | epot = -21.4820337714693 | etot = -17.1673279166626 +797000 ekin = 1.81427862345353 | erot = 1.99534051513419 | epot = -21.4739195915569 | etot = -17.6643004529692 +798000 ekin = 2.2201219513299 | erot = 2.51363796316553 | epot = -21.5008270155092 | etot = -16.7670671010138 +799000 ekin = 1.88984581553595 | erot = 2.87047971528298 | epot = -21.4708608053325 | etot = -16.7105352745136 +800000 ekin = 2.14235800297794 | erot = 2.35196377273805 | epot = -21.3792596865246 | etot = -16.8849379108086 +801000 ekin = 1.84302686949433 | erot = 1.65480855802629 | epot = -21.2211741734437 | etot = -17.7233387459231 +802000 ekin = 2.20305615004888 | erot = 2.22355768328245 | epot = -21.1073599995259 | etot = -16.6807461661946 +803000 ekin = 2.64836814873033 | erot = 1.90761871804858 | epot = -21.0752041885471 | etot = -16.5192173217682 +804000 ekin = 2.34495845479317 | erot = 2.89112045330492 | epot = -21.0176734836814 | etot = -15.7815945755833 +805000 ekin = 1.79915640284781 | erot = 2.71685844764875 | epot = -20.8858433761952 | etot = -16.3698285256987 +806000 ekin = 1.74992507845556 | erot = 2.08517047523252 | epot = -20.8503301901419 | etot = -17.0152346364538 +807000 ekin = 1.57172452594494 | erot = 1.70422569898767 | epot = -20.9092333967053 | etot = -17.6332831717727 +808000 ekin = 2.08106901002531 | erot = 2.4036706521883 | epot = -20.9858691795981 | etot = -16.5011295173845 +809000 ekin = 2.61736488835992 | erot = 1.51251405170843 | epot = -20.9790910298502 | etot = -16.8492120897819 +810000 ekin = 3.07344763503492 | erot = 2.65428122600395 | epot = -20.896297890317 | etot = -15.1685690292781 +811000 ekin = 3.028899831017 | erot = 3.61686315729187 | epot = -20.939661602879 | etot = -14.2938986145701 +812000 ekin = 2.13832655324419 | erot = 2.7919099294265 | epot = -21.0260005012597 | etot = -16.095764018589 +813000 ekin = 2.19077235410927 | erot = 3.16158040032406 | epot = -21.2169108164964 | etot = -15.8645580620631 +814000 ekin = 1.70775111413747 | erot = 2.98436840501864 | epot = -21.3089511890131 | etot = -16.6168316698569 +815000 ekin = 2.14630779714624 | erot = 2.27335416843263 | epot = -21.3099230783927 | etot = -16.8902611128138 +816000 ekin = 2.70331501775258 | erot = 1.53093796189124 | epot = -21.3384418834226 | etot = -17.1041889037788 +817000 ekin = 2.55738086811903 | erot = 2.58558173150041 | epot = -21.4691891608916 | etot = -16.3262265612722 +818000 ekin = 2.27829786328906 | erot = 2.26089725682103 | epot = -21.5162183667694 | etot = -16.9770232466593 +819000 ekin = 2.10478260130361 | erot = 3.02380855832961 | epot = -21.5292309310153 | etot = -16.4006397713821 +820000 ekin = 2.50608188233135 | erot = 2.71783485224719 | epot = -21.5036816055507 | etot = -16.2797648709722 +821000 ekin = 2.62609848062629 | erot = 2.55164634943844 | epot = -21.478766185164 | etot = -16.3010213550993 +822000 ekin = 3.63941681915299 | erot = 2.20246894917129 | epot = -21.4688230156577 | etot = -15.6269372473334 +823000 ekin = 3.58953515450024 | erot = 2.73556206545619 | epot = -21.4650227341943 | etot = -15.1399255142378 +824000 ekin = 4.11304720722591 | erot = 3.2917459513548 | epot = -21.4062011377905 | etot = -14.0014079792098 +825000 ekin = 2.90620097853796 | erot = 3.46409084826251 | epot = -21.2436944546109 | etot = -14.8734026278105 +826000 ekin = 1.72188438195169 | erot = 1.97028277378148 | epot = -21.0473904580338 | etot = -17.3552233023007 +827000 ekin = 1.9124069409458 | erot = 2.55760488338657 | epot = -20.9206700763425 | etot = -16.4506582520101 +828000 ekin = 2.38145056979363 | erot = 2.55544957149182 | epot = -20.8204865756543 | etot = -15.8835864343689 +829000 ekin = 2.24733826946605 | erot = 1.78474837345228 | epot = -20.7084449579388 | etot = -16.6763583150204 +830000 ekin = 2.52795893691035 | erot = 2.34146724282711 | epot = -20.5883731027638 | etot = -15.7189469230264 +831000 ekin = 2.68310001004752 | erot = 2.07407005901145 | epot = -20.4364451382899 | etot = -15.679275069231 +832000 ekin = 2.6732342426401 | erot = 2.02167788192499 | epot = -20.3691783993746 | etot = -15.6742662748095 +833000 ekin = 2.55071664949192 | erot = 2.59972899624767 | epot = -20.3036213925319 | etot = -15.1531757467923 +834000 ekin = 2.87089088359563 | erot = 2.32463192225235 | epot = -20.2984653371648 | etot = -15.1029425313168 +835000 ekin = 2.77558903596269 | erot = 2.73757154391999 | epot = -20.4022293845421 | etot = -14.8890688046595 +836000 ekin = 2.57713146919653 | erot = 2.85322310545496 | epot = -20.5403137141641 | etot = -15.1099591395126 +837000 ekin = 1.78075406754283 | erot = 1.97503243561096 | epot = -20.5889142070484 | etot = -16.8331277038946 +838000 ekin = 1.98032617531701 | erot = 2.7982946707394 | epot = -20.6049667376349 | etot = -15.8263458915785 +839000 ekin = 2.0003179521848 | erot = 2.70198331564815 | epot = -20.5921495833285 | etot = -15.8898483154955 +840000 ekin = 1.70031236242703 | erot = 2.95685689490568 | epot = -20.6678372916037 | etot = -16.010668034271 +841000 ekin = 2.77705100359315 | erot = 2.84742847205069 | epot = -20.7929304121763 | etot = -15.1684509365325 +842000 ekin = 2.54393458307436 | erot = 2.87172695192627 | epot = -20.8173418291016 | etot = -15.401680294101 +843000 ekin = 2.00273625390939 | erot = 2.63437491598434 | epot = -20.8053999188197 | etot = -16.1682887489259 +844000 ekin = 1.52900749569349 | erot = 1.92882434140971 | epot = -20.8427655387949 | etot = -17.3849337016917 +845000 ekin = 2.27176799938834 | erot = 2.308436365406 | epot = -20.9384881501645 | etot = -16.3582837853702 +846000 ekin = 2.06718804989496 | erot = 2.33108662324981 | epot = -21.008503215967 | etot = -16.6102285428222 +847000 ekin = 2.457310325364 | erot = 2.64112097293887 | epot = -20.9624761048838 | etot = -15.8640448065809 +848000 ekin = 2.13894899278459 | erot = 1.46487099434192 | epot = -20.9909626022984 | etot = -17.3871426151719 +849000 ekin = 2.0007946308419 | erot = 2.48568109050424 | epot = -20.9995492646628 | etot = -16.5130735433167 +850000 ekin = 2.54186297995285 | erot = 2.66929613872204 | epot = -20.9906717645298 | etot = -15.7795126458549 +851000 ekin = 2.16443404123472 | erot = 2.92830981454153 | epot = -20.9932718794597 | etot = -15.9005280236835 +852000 ekin = 2.48255398040851 | erot = 2.46238001266592 | epot = -21.018749118108 | etot = -16.0738151250336 +853000 ekin = 2.41541467016921 | erot = 2.97520224443385 | epot = -20.9598722543997 | etot = -15.5692553397966 +854000 ekin = 2.35150751079563 | erot = 2.85453387569363 | epot = -20.8693696367608 | etot = -15.6633282502715 +855000 ekin = 2.36749640703667 | erot = 2.0675340835823 | epot = -20.8980197782034 | etot = -16.4629892875844 +856000 ekin = 2.52164598863741 | erot = 2.75265020302047 | epot = -20.800830948998 | etot = -15.5265347573401 +857000 ekin = 2.55862872070476 | erot = 3.03030828592914 | epot = -20.6910887919773 | etot = -15.1021517853434 +858000 ekin = 3.12628251408762 | erot = 2.1455460426107 | epot = -20.6394579492303 | etot = -15.367629392532 +859000 ekin = 2.91259413572113 | erot = 2.23773675238284 | epot = -20.6611486479508 | etot = -15.5108177598468 +860000 ekin = 2.88318377110752 | erot = 1.51972062646443 | epot = -20.6828066069552 | etot = -16.2799022093833 +861000 ekin = 2.33529167415754 | erot = 2.85116617791259 | epot = -20.6796212139896 | etot = -15.4931633619195 +862000 ekin = 3.06091745354043 | erot = 1.86960550588563 | epot = -20.7257485328209 | etot = -15.7952255733949 +863000 ekin = 2.88295223464283 | erot = 1.77743902656171 | epot = -20.8340328987095 | etot = -16.173641637505 +864000 ekin = 2.95602292127633 | erot = 2.6505641071531 | epot = -21.016295456145 | etot = -15.4097084277156 +865000 ekin = 3.3172549369506 | erot = 2.24347319046513 | epot = -21.1441095096619 | etot = -15.5833813822461 +866000 ekin = 2.8446879555804 | erot = 3.16802464112883 | epot = -21.2275167371632 | etot = -15.214804140454 +867000 ekin = 2.74149808612435 | erot = 3.09628634794253 | epot = -21.2140642048229 | etot = -15.376279770756 +868000 ekin = 2.19141484864809 | erot = 2.23765996064101 | epot = -21.1661691183494 | etot = -16.7370943090603 +869000 ekin = 2.92726848075923 | erot = 2.49663936074752 | epot = -21.1109612585256 | etot = -15.6870534170189 +870000 ekin = 2.47986538741064 | erot = 2.11907230969515 | epot = -21.0900293946685 | etot = -16.4910916975627 +871000 ekin = 2.18342640526418 | erot = 2.37474045896628 | epot = -20.9804914418025 | etot = -16.422324577572 +872000 ekin = 1.52873571215978 | erot = 2.08908078804674 | epot = -20.9343176993392 | etot = -17.3165011991327 +873000 ekin = 1.39281578471524 | erot = 2.29034780878957 | epot = -21.0007866828842 | etot = -17.3176230893794 +874000 ekin = 1.40786554880768 | erot = 2.77007970032348 | epot = -21.160084274243 | etot = -16.9821390251118 +875000 ekin = 1.18320018517441 | erot = 2.7305884288351 | epot = -21.2959059488291 | etot = -17.3821173348196 +876000 ekin = 1.8300189393038 | erot = 2.99586941144887 | epot = -21.3298635968753 | etot = -16.5039752461226 +877000 ekin = 2.38032906471076 | erot = 2.03722695211227 | epot = -21.4152790752831 | etot = -16.99772305846 +878000 ekin = 2.1293851684127 | erot = 1.75666654131943 | epot = -21.412657760354 | etot = -17.5266060506219 +879000 ekin = 2.23837299177368 | erot = 2.71307243504657 | epot = -21.4006541150457 | etot = -16.4492086882254 +880000 ekin = 2.68032631557358 | erot = 2.78439945590096 | epot = -21.4462782448912 | etot = -15.9815524734167 +881000 ekin = 2.86810525851389 | erot = 2.35959915589952 | epot = -21.4314549447334 | etot = -16.20375053032 +882000 ekin = 2.33172283615115 | erot = 2.17176020371467 | epot = -21.369535469283 | etot = -16.8660524294172 +883000 ekin = 2.36331150998289 | erot = 1.97634374053966 | epot = -21.1748990104138 | etot = -16.8352437598913 +884000 ekin = 2.53782271833829 | erot = 2.25243670168427 | epot = -21.0795767771653 | etot = -16.2893173571427 +885000 ekin = 2.86057103069745 | erot = 2.27462544190307 | epot = -21.0782171958267 | etot = -15.9430207232262 +886000 ekin = 3.17034195996096 | erot = 1.74832646729409 | epot = -21.1280719510453 | etot = -16.2094035237903 +887000 ekin = 2.66023408534638 | erot = 2.49426802108016 | epot = -21.1909579488462 | etot = -16.0364558424197 +888000 ekin = 2.14156056158802 | erot = 2.83065920295552 | epot = -21.2749898508176 | etot = -16.302770086274 +889000 ekin = 2.13776380125426 | erot = 2.19994227158624 | epot = -21.1902576201104 | etot = -16.8525515472699 +890000 ekin = 1.76446650263826 | erot = 2.97354753014624 | epot = -21.2518724314555 | etot = -16.513858398671 +891000 ekin = 1.64433607192947 | erot = 2.28044235221045 | epot = -21.3759471910581 | etot = -17.4511687669181 +892000 ekin = 1.97381907006142 | erot = 2.35969977765342 | epot = -21.5200869372681 | etot = -17.1865680895533 +893000 ekin = 1.77998159671209 | erot = 1.83959134574388 | epot = -21.5960425863495 | etot = -17.9764696438935 +894000 ekin = 2.8098996128374 | erot = 2.80337844303785 | epot = -21.6896955865519 | etot = -16.0764175306767 +895000 ekin = 2.03570642281182 | erot = 2.73641442629084 | epot = -21.77632807541 | etot = -17.0042072263074 +896000 ekin = 1.6670401968188 | erot = 2.55842313387756 | epot = -21.9079691828366 | etot = -17.6825058521403 +897000 ekin = 1.79364820755772 | erot = 2.35937074837063 | epot = -22.0466195733302 | etot = -17.8936006174018 +898000 ekin = 1.84103348909591 | erot = 2.4159698011209 | epot = -22.0792153246985 | etot = -17.8222120344817 +899000 ekin = 1.6644807831865 | erot = 3.06295573986192 | epot = -22.0050930291629 | etot = -17.2776565061145 +900000 ekin = 2.15301263014261 | erot = 2.62503812958044 | epot = -21.9769631774149 | etot = -17.1989124176918 +901000 ekin = 2.43323525076021 | erot = 2.69661561775585 | epot = -22.0455467285607 | etot = -16.9156958600446 +902000 ekin = 2.57983518470479 | erot = 2.40634661051271 | epot = -22.0504126836938 | etot = -17.0642308884763 +903000 ekin = 2.38804084084236 | erot = 2.40369143268286 | epot = -22.0548572254258 | etot = -17.2631249519006 +904000 ekin = 1.9975679938241 | erot = 3.15736733739655 | epot = -22.0783783499621 | etot = -16.9234430187414 +905000 ekin = 2.28042135995781 | erot = 2.20746001153526 | epot = -22.092475444409 | etot = -17.604594072916 +906000 ekin = 2.49914497220395 | erot = 1.67106173041057 | epot = -22.0649292741971 | etot = -17.8947225715826 +907000 ekin = 2.34170753461351 | erot = 2.16830189815579 | epot = -21.9182395193391 | etot = -17.4082300865698 +908000 ekin = 2.83101675354561 | erot = 2.39226452568031 | epot = -21.9393923471479 | etot = -16.7161110679219 +909000 ekin = 3.13519044247878 | erot = 2.07053636961478 | epot = -22.044039894957 | etot = -16.8383130828634 +910000 ekin = 2.91492350277448 | erot = 3.54269221448408 | epot = -22.1774209001616 | etot = -15.719805182903 +911000 ekin = 1.86299522014884 | erot = 2.75425299355676 | epot = -22.2318842654016 | etot = -17.614636051696 +912000 ekin = 2.64270620869814 | erot = 1.86916034984858 | epot = -22.2816929482531 | etot = -17.7698263897064 +913000 ekin = 2.45835259040075 | erot = 2.03343540339216 | epot = -22.4051980318983 | etot = -17.9134100381054 +914000 ekin = 2.01630257583653 | erot = 3.01931541129968 | epot = -22.505580829989 | etot = -17.4699628428528 +915000 ekin = 2.73550820750709 | erot = 2.14051989379169 | epot = -22.5067223019054 | etot = -17.6306942006067 +916000 ekin = 2.38833694849903 | erot = 3.26236542376325 | epot = -22.5299732656691 | etot = -16.8792708934068 +917000 ekin = 2.21211072529667 | erot = 2.24425221182159 | epot = -22.5175498112378 | etot = -18.0611868741195 +918000 ekin = 2.11721632678553 | erot = 2.05681940825278 | epot = -22.4485798442659 | etot = -18.2745441092275 +919000 ekin = 2.6606540164524 | erot = 2.41853759346262 | epot = -22.4819256778217 | etot = -17.4027340679066 +920000 ekin = 3.26471044916532 | erot = 2.75531911342505 | epot = -22.5858600689149 | etot = -16.5658305063245 +921000 ekin = 2.72028388628927 | erot = 1.9696059637128 | epot = -22.639440275186 | etot = -17.949550425184 +922000 ekin = 1.43428549123066 | erot = 1.52428475569853 | epot = -22.6914991306332 | etot = -19.732928883704 +923000 ekin = 1.67603986848274 | erot = 1.86522020655464 | epot = -22.7510571233686 | etot = -19.2097970483313 +924000 ekin = 2.15000311118185 | erot = 1.53327070095755 | epot = -22.722341324193 | etot = -19.0390675120536 +925000 ekin = 2.27769316315993 | erot = 1.3558291477729 | epot = -22.6317669747038 | etot = -18.9982446637709 +926000 ekin = 2.0037075380337 | erot = 2.07123237010034 | epot = -22.5811533157097 | etot = -18.5062134075756 +927000 ekin = 2.5163142824884 | erot = 1.98711239136866 | epot = -22.6957752134474 | etot = -18.1923485395904 +928000 ekin = 2.57502157703452 | erot = 2.51449316644151 | epot = -22.8486668477058 | etot = -17.7591521042298 +929000 ekin = 2.66015175923782 | erot = 1.82991995656989 | epot = -22.8894816710891 | etot = -18.3994099552814 +930000 ekin = 2.41758548277495 | erot = 2.00977019739402 | epot = -22.9023129289068 | etot = -18.4749572487378 +931000 ekin = 3.01936517399357 | erot = 2.11115283295647 | epot = -22.8598478032752 | etot = -17.7293297963252 +932000 ekin = 2.34904883629147 | erot = 1.87134929534042 | epot = -22.900230384769 | etot = -18.6798322531371 +933000 ekin = 2.16775611540091 | erot = 2.83796264813669 | epot = -22.9075292968864 | etot = -17.9018105333488 +934000 ekin = 2.17428610858913 | erot = 2.11891276299501 | epot = -22.9275911153101 | etot = -18.634392243726 +935000 ekin = 2.35380058127247 | erot = 2.22719757040085 | epot = -22.9178791070039 | etot = -18.3368809553306 +936000 ekin = 2.29398857252167 | erot = 2.52122883801967 | epot = -23.0254587453496 | etot = -18.2102413348082 +937000 ekin = 2.32405492839276 | erot = 2.82571975062453 | epot = -23.1134869099967 | etot = -17.9637122309794 +938000 ekin = 2.46190818228192 | erot = 1.99586541720566 | epot = -23.1690855883853 | etot = -18.7113119888978 +939000 ekin = 2.99494633358444 | erot = 2.1120057997909 | epot = -23.1621265982256 | etot = -18.0551744648503 +940000 ekin = 3.76773061527755 | erot = 2.67954167018356 | epot = -23.1020260319689 | etot = -16.6547537465078 +941000 ekin = 3.15108874053801 | erot = 2.26610050109568 | epot = -23.0042404655517 | etot = -17.587051223918 +942000 ekin = 3.50311245643907 | erot = 1.88373602143018 | epot = -22.9671180112669 | etot = -17.5802695333976 +943000 ekin = 3.82043792465856 | erot = 2.71285823250348 | epot = -22.9404059827705 | etot = -16.4071098256085 +944000 ekin = 2.68278476017665 | erot = 2.75585489458161 | epot = -22.919058077481 | etot = -17.4804184227228 +945000 ekin = 2.55880828345198 | erot = 2.02741981318914 | epot = -22.8232630911495 | etot = -18.2370349945083 +946000 ekin = 2.47548691870273 | erot = 1.66864059361738 | epot = -22.6586979544826 | etot = -18.5145704421625 +947000 ekin = 2.41867478100658 | erot = 1.99274780926995 | epot = -22.5542133657 | etot = -18.1427907754235 +948000 ekin = 3.54970439277899 | erot = 2.57756240201333 | epot = -22.4104376157296 | etot = -16.2831708209373 +949000 ekin = 2.98589976166071 | erot = 2.44208964275302 | epot = -22.1971411230011 | etot = -16.7691517185873 +950000 ekin = 1.82147308870195 | erot = 3.05083899379338 | epot = -22.0435130221227 | etot = -17.1712009396274 +951000 ekin = 2.20031505253436 | erot = 2.38004890424644 | epot = -22.0174402075992 | etot = -17.4370762508184 +952000 ekin = 2.14165422682636 | erot = 1.67045420750585 | epot = -21.9875031647927 | etot = -18.1753947304605 +953000 ekin = 2.2983346942831 | erot = 1.97349532600851 | epot = -21.9532851584681 | etot = -17.6814551381765 +954000 ekin = 1.48835290094507 | erot = 3.35692451991831 | epot = -21.8812774176255 | etot = -17.0359999967621 +955000 ekin = 1.87513794155827 | erot = 2.65898918540887 | epot = -21.7919528937348 | etot = -17.2578257667677 +956000 ekin = 1.6947359470094 | erot = 2.15427252360414 | epot = -21.7268035908356 | etot = -17.877795120222 +957000 ekin = 1.75579814865835 | erot = 1.63901039608816 | epot = -21.700727032202 | etot = -18.3059184874555 +958000 ekin = 1.59869777656518 | erot = 2.20104985114387 | epot = -21.7023937250484 | etot = -17.9026460973393 +959000 ekin = 2.58438881562724 | erot = 2.4897790743314 | epot = -21.7153511733982 | etot = -16.6411832834396 +960000 ekin = 2.53916903929276 | erot = 2.05995138561213 | epot = -21.7134163297425 | etot = -17.1142959048376 +961000 ekin = 2.28282707786747 | erot = 2.18347157951504 | epot = -21.7152390799838 | etot = -17.2489404226013 +962000 ekin = 1.65520100959905 | erot = 3.51416445242775 | epot = -21.7329558565076 | etot = -16.5635903944808 +963000 ekin = 1.99568689924178 | erot = 1.50126173817713 | epot = -21.6847527677603 | etot = -18.1878041303413 +964000 ekin = 2.18616111169191 | erot = 2.27601428306196 | epot = -21.621271673579 | etot = -17.1590962788252 +965000 ekin = 2.12688674785305 | erot = 2.31141713690626 | epot = -21.6018715374842 | etot = -17.1635676527249 +966000 ekin = 3.18043989665769 | erot = 3.42455452205085 | epot = -21.638305203769 | etot = -15.0333107850605 +967000 ekin = 3.07300409154252 | erot = 2.17511749698304 | epot = -21.5951488445701 | etot = -16.3470272560445 +968000 ekin = 2.08663150655529 | erot = 2.13997027735021 | epot = -21.5232721871232 | etot = -17.2966704032177 +969000 ekin = 2.26951411936363 | erot = 2.21822796004341 | epot = -21.4611553284775 | etot = -16.9734132490705 +970000 ekin = 2.49167396599781 | erot = 2.62083774678039 | epot = -21.4077353682587 | etot = -16.2952236554805 +971000 ekin = 2.497450596106 | erot = 2.64553775005007 | epot = -21.3712924820092 | etot = -16.2283041358532 +972000 ekin = 3.2069302084461 | erot = 2.4701129448845 | epot = -21.3144344371103 | etot = -15.6373912837797 +973000 ekin = 3.35935448087941 | erot = 2.62917582888825 | epot = -21.2433830591837 | etot = -15.254852749416 +974000 ekin = 2.71069552226069 | erot = 2.13944446989067 | epot = -21.1404268855179 | etot = -16.2902868933666 +975000 ekin = 1.81165819781674 | erot = 2.10218924092727 | epot = -21.0499905566304 | etot = -17.1361431178864 +976000 ekin = 2.36984742020937 | erot = 1.38488988265325 | epot = -20.9803229653515 | etot = -17.2255856624889 +977000 ekin = 2.83728662155799 | erot = 3.02976542728586 | epot = -21.086860961914 | etot = -15.2198089130701 +978000 ekin = 3.14169266917128 | erot = 3.0279981203262 | epot = -21.1408187166748 | etot = -14.9711279271773 +979000 ekin = 3.63725915757345 | erot = 2.47075910077982 | epot = -21.0348329782418 | etot = -14.9268147198885 +980000 ekin = 3.42622785415583 | erot = 3.24164435781272 | epot = -20.9604411583362 | etot = -14.2925689463677 +981000 ekin = 2.9282364939793 | erot = 2.44516658563954 | epot = -20.999389015838 | etot = -15.6259859362192 +982000 ekin = 2.0455891107008 | erot = 2.21302288881361 | epot = -21.0172581853275 | etot = -16.7586461858131 +983000 ekin = 2.56053983213181 | erot = 1.98406283304104 | epot = -21.0054554868711 | etot = -16.4608528216982 +984000 ekin = 2.31455025377678 | erot = 2.58584391470351 | epot = -21.0528748947299 | etot = -16.1524807262496 +985000 ekin = 2.31703817263368 | erot = 2.99965025262552 | epot = -21.1270579315131 | etot = -15.8103695062539 +986000 ekin = 2.05103854432386 | erot = 2.1535155091137 | epot = -21.2182405597612 | etot = -17.0136865063236 +987000 ekin = 2.41899263793244 | erot = 1.58416150281503 | epot = -21.1906087726859 | etot = -17.1874546319384 +988000 ekin = 2.75135283132848 | erot = 2.70498731016258 | epot = -21.09026978368 | etot = -15.633929642189 +989000 ekin = 2.29408577956131 | erot = 2.85656205344493 | epot = -21.0178170251465 | etot = -15.8671691921403 +990000 ekin = 2.23414139649767 | erot = 2.58987928207187 | epot = -20.9412338597721 | etot = -16.1172131812026 +991000 ekin = 2.20140095465642 | erot = 2.53421928109187 | epot = -20.8284298905317 | etot = -16.0928096547834 +992000 ekin = 1.73516341340694 | erot = 2.49726908126814 | epot = -20.8981414535471 | etot = -16.665708958872 +993000 ekin = 1.38883779880922 | erot = 1.96818984395137 | epot = -20.9939445972527 | etot = -17.6369169544921 +994000 ekin = 1.48978908674571 | erot = 2.95636513336706 | epot = -21.0608370227912 | etot = -16.6146828026784 +995000 ekin = 2.31404204513712 | erot = 1.67482961392509 | epot = -21.1264761824825 | etot = -17.1376045234203 +996000 ekin = 2.89776504847011 | erot = 2.85063328331353 | epot = -21.0879631716189 | etot = -15.3395648398353 +997000 ekin = 3.12980664910277 | erot = 2.14994147346883 | epot = -21.0789162715404 | etot = -15.7991681489688 +998000 ekin = 2.21592279552962 | erot = 3.03017611615784 | epot = -20.9989402817529 | etot = -15.7528413700654 +999000 ekin = 2.60947995309596 | erot = 1.73829419308785 | epot = -20.9136108602423 | etot = -16.5658367140585 +1000000 ekin = 2.32269547490306 | erot = 2.87794942105203 | epot = -20.9071852604882 | etot = -15.7065403645331 + 1000000 0.10323091 -1.356822 0.050122912 -1.1615306 0.00013791576 +Loop time of 52.0267 on 4 procs for 1000000 steps with 16 atoms + +Performance: 16606.850 tau/day, 19220.892 timesteps/s +96.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.92946 | 16.932 | 31.787 | 338.2 | 32.55 +Bond | 0.12904 | 0.54878 | 0.89134 | 46.8 | 1.05 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 4.2008 | 5.1678 | 6.1197 | 36.6 | 9.93 +Output | 2.1e-05 | 3.15e-05 | 3.6e-05 | 0.0 | 0.00 +Modify | 0.32128 | 3.4221 | 6.4024 | 143.6 | 6.58 +Other | | 25.96 | | | 49.89 + +Nlocal: 4 ave 8 max 0 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 9 ave 10 max 8 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 34.5 ave 67 max 0 min +Histogram: 1 1 0 0 0 0 0 0 0 2 + +Total # of neighbors = 138 +Ave neighs/atom = 8.625 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:52 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 deleted file mode 100644 index 56f1b72277..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.1 +++ /dev/null @@ -1,172 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 2.861 | 2.861 | 2.861 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5402493 0.0070469125 -1.5332024 -8.5641987e-05 -1000 ekin = 1.54234964773389 | erot = 1.71563526070267 | epot = -24.5477045187653 | etot = -21.2897196103287 -2000 ekin = 1.85988866919215 | erot = 1.9424302796508 | epot = -24.4843044999595 | etot = -20.6819855511165 -3000 ekin = 2.68354339452998 | erot = 2.14216528317607 | epot = -24.4019350693561 | etot = -19.57622639165 -4000 ekin = 2.04461800191989 | erot = 1.49015219763162 | epot = -24.2959428773347 | etot = -20.7611726777832 -5000 ekin = 1.76794859210155 | erot = 2.54289684465818 | epot = -24.2337587736863 | etot = -19.9229133369266 -6000 ekin = 3.1106424806079 | erot = 2.04409805200892 | epot = -24.1585729744133 | etot = -19.0038324417964 -7000 ekin = 3.21360097519306 | erot = 2.71941303605722 | epot = -24.0566262531609 | etot = -18.1236122419107 -8000 ekin = 2.82489935901743 | erot = 2.66790555575696 | epot = -24.0194805097633 | etot = -18.526675594989 -9000 ekin = 2.69381302856378 | erot = 2.59107820129446 | epot = -23.9216126050554 | etot = -18.6367213751972 -10000 ekin = 2.65765007662471 | erot = 1.95562671446597 | epot = -23.7978334881241 | etot = -19.1845566970334 - 10000 0.11811778 -1.4992295 0.011864944 -1.3212615 -0.00013416809 -Loop time of 0.295538 on 1 procs for 10000 steps with 16 atoms - -Performance: 29234.801 tau/day, 33836.575 timesteps/s -99.7% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.20959 | 0.20959 | 0.20959 | 0.0 | 70.92 -Bond | 0.0073669 | 0.0073669 | 0.0073669 | 0.0 | 2.49 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0016472 | 0.0016472 | 0.0016472 | 0.0 | 0.56 -Output | 5.0068e-06 | 5.0068e-06 | 5.0068e-06 | 0.0 | 0.00 -Modify | 0.073117 | 0.073117 | 0.073117 | 0.0 | 24.74 -Other | | 0.003813 | | | 1.29 - -Nlocal: 16 ave 16 max 16 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 88 ave 88 max 88 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 88 -Ave neighs/atom = 5.5 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 deleted file mode 100644 index 5cb953cd8c..0000000000 --- a/examples/USER/cgdna/examples/oxDNA/duplex2/log.27Nov18.duplex2.g++.4 +++ /dev/null @@ -1,172 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna/fene -bond_coeff * 2.0 0.25 0.7525 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna/excv oxdna/stk oxdna/hbond oxdna/xstk oxdna/coaxstk -pair_coeff * * oxdna/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna/hbond seqav 1.077 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna/coaxstk 46.0 0.4 0.6 0.22 0.58 2.0 2.541592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 -0.65 2.0 -0.65 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.92828 - ghost atom cutoff = 1.92828 - binsize = 0.964142, bins = 42 42 42 - 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair oxdna/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.466 | 7.648 | 7.83 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5402493 0.0070469125 -1.5332024 -8.5641987e-05 -1000 ekin = 1.34565986428024 | erot = 2.31051421234078 | epot = -24.5061991591502 | etot = -20.8500250825292 -2000 ekin = 2.15911766687235 | erot = 2.16031365874707 | epot = -24.4723177103698 | etot = -20.1528863847504 -3000 ekin = 3.26561948796015 | erot = 2.75651822936604 | epot = -24.412573068346 | etot = -18.3904353510198 -4000 ekin = 1.92438809241066 | erot = 2.12016940074985 | epot = -24.3496233970111 | etot = -20.3050659038506 -5000 ekin = 1.35986357015476 | erot = 1.99413493074226 | epot = -24.2789445616949 | etot = -20.9249460607979 -6000 ekin = 2.19432475124593 | erot = 1.74281260409078 | epot = -24.2128064295788 | etot = -20.2756690742421 -7000 ekin = 2.65619274477635 | erot = 1.74094257048458 | epot = -24.1673462333493 | etot = -19.7702109180883 -8000 ekin = 2.51333548501168 | erot = 2.34649854571051 | epot = -24.0812769481836 | etot = -19.2214429174614 -9000 ekin = 2.24506493169711 | erot = 2.0652555461504 | epot = -23.9906736063989 | etot = -19.6803531285514 -10000 ekin = 2.36632635249862 | erot = 1.7959247176153 | epot = -23.9002627850602 | etot = -19.7380117149463 - 10000 0.10517006 -1.5057137 0.011947302 -1.345871 -9.5924016e-05 -Loop time of 0.251867 on 4 procs for 10000 steps with 16 atoms - -Performance: 34303.820 tau/day, 39703.495 timesteps/s -97.8% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0035377 | 0.092047 | 0.17435 | 26.0 | 36.55 -Bond | 0.00065637 | 0.0031857 | 0.0053554 | 3.8 | 1.26 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013929 | 0.01497 | 0.015733 | 0.6 | 5.94 -Output | 5.0783e-05 | 5.2691e-05 | 5.3883e-05 | 0.0 | 0.02 -Modify | 0.0013576 | 0.020825 | 0.040231 | 11.8 | 8.27 -Other | | 0.1208 | | | 47.96 - -Nlocal: 4 ave 8 max 0 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 9 ave 10 max 8 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 34.5 ave 67 max 0 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 138 -Ave neighs/atom = 8.625 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/data.duplex1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/data.duplex1 index 6aee3233dd..0ef671c603 100644 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/data.duplex1 +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/data.duplex1 @@ -32,7 +32,7 @@ Atoms 9 3 4.860249842674775e-01 3.518234140414733e-01 3.897628551303121e-01 2 1 1 10 4 5.999999999999996e-01 -1.332267629550188e-16 -1.110223024625157e-16 2 1 1 -# Atom-ID, translational, rotational velocity +# Atom-ID, translational velocity, angular momentum Velocities 1 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 index 5260e51330..9ff9d3c4db 100644 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/in.duplex1 @@ -1,6 +1,7 @@ variable number equal 1 variable ofreq equal 1000 variable efreq equal 1000 +variable T equal 0.1 units lj @@ -30,19 +31,19 @@ bond_coeff * 2.0 0.25 0.7564 # oxDNA pair interactions pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqav ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 # NVE ensemble fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 #fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 timestep 1e-5 @@ -73,6 +74,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 10000 +run 1000000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.18Jun19.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.18Jun19.duplex1.g++.1 new file mode 100644 index 0000000000..a699d8726d --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.18Jun19.duplex1.g++.1 @@ -0,0 +1,1172 @@ +LAMMPS (18 Jun 2019) +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + special bonds CPU = 0.000102 secs + read_data CPU = 0.002436 secs + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqav 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.023 | 3.023 | 3.023 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4712768 0.009525411 -1.4617514 4.663076e-06 +1000 ekin = 0.00113086229080528 | erot = 0.0043101016040658 | epot = -14.6229549982368 | etot = -14.617514034342 +2000 ekin = 0.0044853322434243 | erot = 0.0171407706505008 | epot = -14.6391401372615 | etot = -14.6175140343675 +3000 ekin = 0.00995035259649285 | erot = 0.0381961780846484 | epot = -14.6656605650904 | etot = -14.6175140344093 +4000 ekin = 0.0173418024862054 | erot = 0.0669935184860634 | epot = -14.7018493554381 | etot = -14.6175140344659 +5000 ekin = 0.0264109356286075 | erot = 0.102878288094517 | epot = -14.7468032582586 | etot = -14.6175140345355 +6000 ekin = 0.0368533113591442 | erot = 0.14504542056987 | epot = -14.7994127665447 | etot = -14.6175140346157 +7000 ekin = 0.0483200640564843 | erot = 0.192565862515508 | epot = -14.8583999612756 | etot = -14.6175140347036 +8000 ekin = 0.0604312317605998 | erot = 0.244417870131508 | epot = -14.9223631366883 | etot = -14.6175140347962 +9000 ekin = 0.0727907119671751 | erot = 0.299521949931839 | epot = -14.989826696789 | etot = -14.6175140348899 +10000 ekin = 0.0850022498875221 | erot = 0.356777997217902 | epot = -15.0592942820869 | etot = -14.6175140349815 +11000 ekin = 0.0966857134041704 | erot = 0.415102860829614 | epot = -15.1293026093013 | etot = -14.6175140350675 +12000 ekin = 0.107492790688446 | erot = 0.473466334178045 | epot = -15.1984731600115 | etot = -14.617514035145 +13000 ekin = 0.117121180381715 | erot = 0.530923485009724 | epot = -15.2655587006029 | etot = -14.6175140352115 +14000 ekin = 0.125326348459166 | erot = 0.586641324447693 | epot = -15.329481708172 | etot = -14.6175140352651 +15000 ekin = 0.131930017119452 | erot = 0.639918104234695 | epot = -15.389362156659 | etot = -14.6175140353048 +16000 ekin = 0.136824741331535 | erot = 0.690194029501056 | epot = -15.4445328061632 | etot = -14.6175140353306 +17000 ekin = 0.139974218116303 | erot = 0.73705286614779 | epot = -15.4945411196072 | etot = -14.6175140353432 +18000 ekin = 0.141409342139924 | erot = 0.780214750583505 | epot = -15.5391381280674 | etot = -14.617514035344 +19000 ekin = 0.14122042490348 | erot = 0.819521373491594 | epot = -15.5782558337303 | etot = -14.6175140353352 +20000 ekin = 0.139546371890615 | erot = 0.854915474127934 | epot = -15.6119758813378 | etot = -14.6175140353193 +21000 ekin = 0.136561897558623 | erot = 0.886417110947779 | epot = -15.6404930438051 | etot = -14.6175140352987 +22000 ekin = 0.132464002543739 | erot = 0.914099368829953 | epot = -15.6640774066495 | etot = -14.6175140352758 +23000 ekin = 0.127458921012922 | erot = 0.938065991541773 | epot = -15.6830389478072 | etot = -14.6175140352525 +24000 ekin = 0.121750582423385 | erot = 0.958432936326242 | epot = -15.6976975539802 | etot = -14.6175140352305 +25000 ekin = 0.115531361418989 | erot = 0.97531514293118 | epot = -15.7083605395609 | etot = -14.6175140352107 +26000 ekin = 0.108975565586104 | erot = 0.988819027952036 | epot = -15.7153086287315 | etot = -14.6175140351934 +27000 ekin = 0.102235785319049 | erot = 0.999040485514132 | epot = -15.7187903060115 | etot = -14.6175140351783 +28000 ekin = 0.095441943431881 | erot = 1.00606759140964 | epot = -15.7190235700066 | etot = -14.6175140351651 +29000 ekin = 0.0887026587343887 | erot = 1.00998681843601 | epot = -15.7162035123233 | etot = -14.6175140351529 +30000 ekin = 0.0821083868014372 | erot = 1.01089138149893 | epot = -15.7105138034411 | etot = -14.6175140351407 +31000 ekin = 0.0757357206087773 | erot = 1.00889031641317 | epot = -15.7021400721498 | etot = -14.6175140351278 +32000 ekin = 0.0696522149388972 | erot = 1.00411701389994 | epot = -15.691283263952 | etot = -14.6175140351132 +33000 ekin = 0.0639211300028632 | erot = 0.996736133735177 | epot = -15.6781712988344 | etot = -14.6175140350964 +34000 ekin = 0.0586055597939536 | erot = 0.986948071943124 | epot = -15.6630676668141 | etot = -14.617514035077 +35000 ekin = 0.0537715085519321 | erot = 0.97499041461744 | epot = -15.6462759582244 | etot = -14.617514035055 +36000 ekin = 0.0494895953264297 | erot = 0.961136064967259 | epot = -15.6281396953245 | etot = -14.6175140350308 +37000 ekin = 0.0458351949405726 | erot = 0.945687966086967 | epot = -15.6090371960325 | etot = -14.617514035005 +38000 ekin = 0.0428869588016531 | erot = 0.928970560852795 | epot = -15.5893715546332 | etot = -14.6175140349787 +39000 ekin = 0.0407237982122988 | erot = 0.9113183396798 | epot = -15.5695561728451 | etot = -14.617514034953 +40000 ekin = 0.0394205547754457 | erot = 0.893062038097747 | epot = -15.5499966278026 | etot = -14.6175140349294 +41000 ekin = 0.0390427256107104 | erot = 0.874513269990878 | epot = -15.5310700305109 | etot = -14.6175140349093 +42000 ekin = 0.0396407506458402 | erot = 0.855948622306271 | epot = -15.5131034078461 | etot = -14.617514034894 +43000 ekin = 0.0412444930542154 | erot = 0.837594480923697 | epot = -15.4963530088628 | etot = -14.6175140348849 +44000 ekin = 0.0438586280730372 | erot = 0.819614069272971 | epot = -15.4809867322287 | etot = -14.6175140348826 +45000 ekin = 0.0474596621516281 | erot = 0.802098297010783 | epot = -15.4670719940501 | etot = -14.6175140348877 +46000 ekin = 0.0519951857192148 | erot = 0.785061947877571 | epot = -15.4545711684965 | etot = -14.6175140348997 +47000 ekin = 0.0573856747191636 | erot = 0.76844639238657 | epot = -15.4433461020232 | etot = -14.6175140349174 +48000 ekin = 0.0635286843632004 | erot = 0.75212933501618 | epot = -15.433172054319 | etot = -14.6175140349396 +49000 ekin = 0.070304673538874 | erot = 0.735941123250837 | epot = -15.4237598317539 | etot = -14.6175140349642 +50000 ekin = 0.0775831019857076 | erot = 0.719686007781425 | epot = -15.4147831447563 | etot = -14.6175140349892 +51000 ekin = 0.0852270843845694 | erot = 0.703165726695028 | epot = -15.4059068460928 | etot = -14.6175140350132 +52000 ekin = 0.0930950223451647 | erot = 0.686202231166125 | epot = -15.396811288546 | etot = -14.6175140350347 +53000 ekin = 0.101038429252995 | erot = 0.668656546988927 | epot = -15.3872090112954 | etot = -14.6175140350535 +54000 ekin = 0.10889654098061 | erot = 0.650441726174306 | epot = -15.3768523022246 | etot = -14.6175140350697 +55000 ekin = 0.116489881626234 | erot = 0.631529329348001 | epot = -15.3655332460579 | etot = -14.6175140350836 +56000 ekin = 0.12361610349192 | erot = 0.611950383382611 | epot = -15.35308052197 | etot = -14.6175140350954 +57000 ekin = 0.130051530401153 | erot = 0.591792721317295 | epot = -15.3393582868232 | etot = -14.6175140351048 +58000 ekin = 0.135560625193501 | erot = 0.571196690673292 | epot = -15.3242713509773 | etot = -14.6175140351105 +59000 ekin = 0.139913350827135 | erot = 0.550350463180279 | epot = -15.307777849119 | etot = -14.6175140351115 +60000 ekin = 0.142907875045794 | erot = 0.529485019662529 | epot = -15.2899069298147 | etot = -14.6175140351063 +61000 ekin = 0.144394224777542 | erot = 0.508867904998907 | epot = -15.2707761648706 | etot = -14.6175140350941 +62000 ekin = 0.144294003785763 | erot = 0.488794507592477 | epot = -15.2506025464531 | etot = -14.6175140350748 +63000 ekin = 0.142612256998146 | erot = 0.469576039421557 | epot = -15.2297023314688 | etot = -14.6175140350491 +64000 ekin = 0.139439544726902 | erot = 0.45152434495459 | epot = -15.2084779247003 | etot = -14.6175140350188 +65000 ekin = 0.134944526553566 | erot = 0.434934714913839 | epot = -15.1873932764535 | etot = -14.6175140349861 +66000 ekin = 0.129359146358223 | erot = 0.420068607767106 | epot = -15.1669417890788 | etot = -14.6175140349535 +67000 ekin = 0.122959458764236 | erot = 0.407138362059705 | epot = -15.1476118557469 | etot = -14.617514034923 +68000 ekin = 0.116045210525559 | erot = 0.396295631876262 | epot = -15.1298548772986 | etot = -14.6175140348968 +69000 ekin = 0.108920722072365 | erot = 0.38762458997195 | epot = -15.1140593469202 | etot = -14.6175140348758 +70000 ekin = 0.101878740729572 | erot = 0.381140173640836 | epot = -15.1005329492313 | etot = -14.6175140348609 +71000 ekin = 0.0951880561484016 | erot = 0.376791007701538 | epot = -15.0894930987019 | etot = -14.617514034852 +72000 ekin = 0.0890849677261927 | erot = 0.374466237250371 | epot = -15.0810652398255 | etot = -14.6175140348489 +73000 ekin = 0.0837682427021612 | erot = 0.374005347599889 | epot = -15.0752876251531 | etot = -14.617514034851 +74000 ekin = 0.0793969849744096 | erot = 0.375210076750601 | epot = -15.0721210965825 | etot = -14.6175140348575 +75000 ekin = 0.0760907865069267 | erot = 0.377857644572265 | epot = -15.0714624659463 | etot = -14.6175140348671 +76000 ekin = 0.0739315834908328 | erot = 0.381714646755152 | epot = -15.0731602651247 | etot = -14.6175140348788 +77000 ekin = 0.0729667273608161 | erot = 0.386551032956121 | epot = -15.0770317952083 | etot = -14.6175140348914 +78000 ekin = 0.073212865507933 | erot = 0.392153586683229 | epot = -15.0828804870951 | etot = -14.617514034904 +79000 ekin = 0.074660287835072 | erot = 0.398338263929461 | epot = -15.09051258668 | etot = -14.6175140349155 +80000 ekin = 0.0772774298944847 | erot = 0.404960669863083 | epot = -15.0997521346826 | etot = -14.6175140349251 +81000 ekin = 0.0810152396746107 | erot = 0.411923913359048 | epot = -15.1104531879657 | etot = -14.617514034932 +82000 ekin = 0.0858111278279411 | erot = 0.419183131304986 | epot = -15.1225082940691 | etot = -14.6175140349362 +83000 ekin = 0.0915922459205373 | erot = 0.426746154030553 | epot = -15.1358524348887 | etot = -14.6175140349376 +84000 ekin = 0.0982778862653023 | erot = 0.434670094582779 | epot = -15.1504620157846 | etot = -14.6175140349365 +85000 ekin = 0.105780875252123 | erot = 0.443054055542032 | epot = -15.1663489657278 | etot = -14.6175140349337 +86000 ekin = 0.114007936320491 | erot = 0.452028591870552 | epot = -15.183550563121 | etot = -14.6175140349299 +87000 ekin = 0.122859117093021 | erot = 0.461742961599068 | epot = -15.2021161136185 | etot = -14.6175140349264 +88000 ekin = 0.132226490250365 | erot = 0.472351454260961 | epot = -15.2220919794351 | etot = -14.6175140349238 +89000 ekin = 0.14199243043518 | erot = 0.484000150228927 | epot = -15.2435066155872 | etot = -14.6175140349231 +90000 ekin = 0.152027823848745 | erot = 0.49681531383988 | epot = -15.2663571726137 | etot = -14.6175140349251 +91000 ekin = 0.162190574344125 | erot = 0.510894287760631 | epot = -15.2905988970349 | etot = -14.6175140349302 +92000 ekin = 0.172324730223241 | erot = 0.526299304076712 | epot = -15.3161380692387 | etot = -14.6175140349387 +93000 ekin = 0.182260479602514 | erot = 0.543054150883983 | epot = -15.342828665437 | etot = -14.6175140349505 +94000 ekin = 0.191815166424497 | erot = 0.561143224560487 | epot = -15.3704724259505 | etot = -14.6175140349655 +95000 ekin = 0.200795384589871 | erot = 0.580512230413669 | epot = -15.398821649987 | etot = -14.6175140349834 +96000 ekin = 0.209000133284301 | erot = 0.601069706845445 | epot = -15.4275838751336 | etot = -14.6175140350039 +97000 ekin = 0.216224974983076 | erot = 0.622688639933065 | epot = -15.4564276499427 | etot = -14.6175140350266 +98000 ekin = 0.222267131485452 | erot = 0.645207670246426 | epot = -15.4849888367829 | etot = -14.617514035051 +99000 ekin = 0.226931474008822 | erot = 0.668431711040234 | epot = -15.5128772201258 | etot = -14.6175140350768 +100000 ekin = 0.230037392185194 | erot = 0.692132125756912 | epot = -15.5396835530455 | etot = -14.6175140351034 +101000 ekin = 0.231426538774339 | erot = 0.716046886549487 | epot = -15.5649874604541 | etot = -14.6175140351302 +102000 ekin = 0.230971416186116 | erot = 0.739881303910906 | epot = -15.5883667552535 | etot = -14.6175140351565 +103000 ekin = 0.228584676860968 | erot = 0.763309953365433 | epot = -15.6094086654079 | etot = -14.6175140351815 +104000 ekin = 0.224228843046698 | erot = 0.785980326921886 | epot = -15.6277232051725 | etot = -14.6175140352039 +105000 ekin = 0.217925953180593 | erot = 0.807518535460022 | epot = -15.6429585238635 | etot = -14.6175140352229 +106000 ekin = 0.209766205881976 | erot = 0.827537066837565 | epot = -15.6548173079567 | etot = -14.6175140352372 +107000 ekin = 0.19991466311948 | erot = 0.845644346598459 | epot = -15.6630730449638 | etot = -14.6175140352459 +108000 ekin = 0.188614735691129 | erot = 0.861455562303715 | epot = -15.6675843332431 | etot = -14.6175140352483 +109000 ekin = 0.176187061061687 | erot = 0.874603999194433 | epot = -15.6683050955002 | etot = -14.6175140352441 +110000 ekin = 0.163022626611995 | erot = 0.88475208463374 | epot = -15.6652887464792 | etot = -14.6175140352335 +111000 ekin = 0.14956938211077 | erot = 0.89160140093568 | epot = -15.6586848182637 | etot = -14.6175140352173 +112000 ekin = 0.136312261124986 | erot = 0.8949011206007 | epot = -15.6487274169225 | etot = -14.6175140351968 +113000 ekin = 0.123747404857758 | erot = 0.894454602033368 | epot = -15.6357160420648 | etot = -14.6175140351736 +114000 ekin = 0.112352324429831 | erot = 0.890124196452667 | epot = -15.6199905560322 | etot = -14.6175140351497 +115000 ekin = 0.102554569787556 | erot = 0.881834585426713 | epot = -15.6019031903412 | etot = -14.6175140351269 +116000 ekin = 0.0947020047096738 | erot = 0.869575126614186 | epot = -15.5817911664307 | etot = -14.6175140351068 +117000 ekin = 0.0890378681937318 | erot = 0.853401690493949 | epot = -15.559953593778 | etot = -14.6175140350903 +118000 ekin = 0.0856833736308548 | erot = 0.833438318818926 | epot = -15.5366357275277 | etot = -14.6175140350779 +119000 ekin = 0.0846297171118248 | erot = 0.809878764032089 | epot = -15.5120225162133 | etot = -14.6175140350694 +120000 ekin = 0.0857402026936468 | erot = 0.782987649501416 | epot = -15.4862418872589 | etot = -14.6175140350638 +121000 ekin = 0.088761978164944 | erot = 0.753100709615785 | epot = -15.4593767228408 | etot = -14.61751403506 +122000 ekin = 0.0933458418336512 | erot = 0.720623403982127 | epot = -15.4314832808722 | etot = -14.6175140350564 +123000 ekin = 0.0990718975139699 | erot = 0.68602719834959 | epot = -15.4026131309152 | etot = -14.6175140350516 +124000 ekin = 0.105478567535099 | erot = 0.649842971567299 | epot = -15.3728355741467 | etot = -14.6175140350443 +125000 ekin = 0.112092583657528 | erot = 0.61265130691034 | epot = -15.3422579256011 | etot = -14.6175140350332 +126000 ekin = 0.118457948670349 | erot = 0.575069793125981 | epot = -15.3110417768144 | etot = -14.617514035018 +127000 ekin = 0.124162352097832 | erot = 0.537737821903371 | epot = -15.2794142089993 | etot = -14.6175140349981 +128000 ekin = 0.128860000475183 | erot = 0.501299660072983 | epot = -15.2476736955218 | etot = -14.6175140349736 +129000 ekin = 0.132290197681538 | erot = 0.466386755141783 | epot = -15.2161909877681 | etot = -14.6175140349448 +130000 ekin = 0.134291248323408 | erot = 0.433600287194685 | epot = -15.1854055704302 | etot = -14.6175140349121 +131000 ekin = 0.134809368079367 | erot = 0.403494917851113 | epot = -15.1558183208069 | etot = -14.6175140348764 +132000 ekin = 0.133902311413259 | erot = 0.376564532721602 | epot = -15.1279808789733 | etot = -14.6175140348385 +133000 ekin = 0.131737425950174 | erot = 0.353230559449875 | epot = -15.1024820201993 | etot = -14.6175140347993 +134000 ekin = 0.128583872250139 | erot = 0.333833200745338 | epot = -15.0799311077557 | etot = -14.6175140347602 +135000 ekin = 0.124798858319487 | erot = 0.31862567876175 | epot = -15.0609385718037 | etot = -14.6175140347224 +136000 ekin = 0.12080796695122 | erot = 0.307771366705934 | epot = -15.0460933683448 | etot = -14.6175140346877 +137000 ekin = 0.117080018573556 | erot = 0.301343503849859 | epot = -15.0359375570811 | etot = -14.6175140346577 +138000 ekin = 0.114097404451637 | erot = 0.299327064918768 | epot = -15.0309385040046 | etot = -14.6175140346342 +139000 ekin = 0.112323403877397 | erot = 0.301622293047273 | epot = -15.0314597315437 | etot = -14.6175140346191 +140000 ekin = 0.112168587317134 | erot = 0.308049410073558 | epot = -15.0377320320047 | etot = -14.617514034614 +141000 ekin = 0.113958896787483 | erot = 0.318354084563277 | epot = -15.0498270159712 | etot = -14.6175140346204 +142000 ekin = 0.117908250110044 | erot = 0.332213334114174 | epot = -15.0676356188633 | etot = -14.6175140346391 +143000 ekin = 0.124098500240116 | erot = 0.349241744868859 | epot = -15.0908542797794 | etot = -14.6175140346704 +144000 ekin = 0.132469049162244 | erot = 0.36899804234383 | epot = -15.1189811262199 | etot = -14.6175140347138 +145000 ekin = 0.142817534773294 | erot = 0.390992018433025 | epot = -15.1513235879745 | etot = -14.6175140347682 +146000 ekin = 0.154812002594044 | erot = 0.414692148538822 | epot = -15.1870181859643 | etot = -14.6175140348315 +147000 ekin = 0.168013608208165 | erot = 0.43953414756317 | epot = -15.2250617906724 | etot = -14.6175140349011 +148000 ekin = 0.181907755044192 | erot = 0.46493071599216 | epot = -15.2643525060103 | etot = -14.617514034974 +149000 ekin = 0.195940689918404 | erot = 0.490282644230507 | epot = -15.3037373691959 | etot = -14.6175140350469 +150000 ekin = 0.209558115498161 | erot = 0.514991307802203 | epot = -15.3420634584171 | etot = -14.6175140351168 +151000 ekin = 0.222242375358722 | erot = 0.538472447669863 | epot = -15.3782288582089 | etot = -14.6175140351803 +152000 ekin = 0.233545181100895 | erot = 0.560170967504241 | epot = -15.4112301838403 | etot = -14.6175140352351 +153000 ekin = 0.243113638171897 | erot = 0.579575715963473 | epot = -15.4402033894145 | etot = -14.6175140352791 +154000 ekin = 0.250708030719563 | erot = 0.596234520730074 | epot = -15.4644565867606 | etot = -14.617514035311 +155000 ekin = 0.256210874594961 | erot = 0.609768185048496 | epot = -15.4834930949732 | etot = -14.6175140353298 +156000 ekin = 0.259627463842806 | erot = 0.619882772314079 | epot = -15.4970242714923 | etot = -14.6175140353354 +157000 ekin = 0.26107875673392 | erot = 0.626379517381585 | epot = -15.5049723094438 | etot = -14.6175140353283 +158000 ekin = 0.260787877594978 | erot = 0.629161788909624 | epot = -15.5074637018139 | etot = -14.6175140353093 +159000 ekin = 0.259061752299553 | erot = 0.628238692725195 | epot = -15.5048144803046 | etot = -14.6175140352799 +160000 ekin = 0.256269476948141 | erot = 0.623725097357881 | epot = -15.4975086095477 | etot = -14.6175140352417 +161000 ekin = 0.252818974262866 | erot = 0.615838055765116 | epot = -15.4861710652245 | etot = -14.6175140351965 +162000 ekin = 0.249133354781009 | erot = 0.604889772114047 | epot = -15.4715371620415 | etot = -14.6175140351465 +163000 ekin = 0.245628201594233 | erot = 0.591277407066157 | epot = -15.4544196437542 | etot = -14.6175140350938 +164000 ekin = 0.242690765770646 | erot = 0.5754701254003 | epot = -15.4356749262112 | etot = -14.6175140350402 +165000 ekin = 0.240661818237773 | erot = 0.557993868664013 | epot = -15.4161697218898 | etot = -14.617514034988 +166000 ekin = 0.239820672159938 | erot = 0.539414388849556 | epot = -15.3967490959484 | etot = -14.6175140349389 +167000 ekin = 0.24037368261711 | erot = 0.520319112884873 | epot = -15.3782068303964 | etot = -14.6175140348944 +168000 ekin = 0.24244635767351 | erot = 0.501298426047331 | epot = -15.3612588185771 | etot = -14.6175140348562 +169000 ekin = 0.246079081489649 | erot = 0.482926967022199 | epot = -15.3465200833372 | etot = -14.6175140348253 +170000 ekin = 0.2512263556708 | erot = 0.465745518941327 | epot = -15.334485909415 | etot = -14.6175140348028 +171000 ekin = 0.257759407502687 | erot = 0.450244072412507 | epot = -15.3255175147045 | etot = -14.6175140347893 +172000 ekin = 0.265471962315305 | erot = 0.436846557572436 | epot = -15.3198325546728 | etot = -14.617514034785 +173000 ekin = 0.274088992052948 | erot = 0.425897760801831 | epot = -15.3175007876449 | etot = -14.6175140347901 +174000 ekin = 0.283278228108448 | erot = 0.417652965987037 | epot = -15.3184452288997 | etot = -14.6175140348042 +175000 ekin = 0.292664164217591 | erot = 0.412270652066437 | epot = -15.3224488511105 | etot = -14.6175140348264 +176000 ekin = 0.301844276744599 | erot = 0.409808663992694 | epot = -15.3291669755931 | etot = -14.6175140348558 +177000 ekin = 0.310407103278429 | erot = 0.410224178772685 | epot = -15.3381453169418 | etot = -14.6175140348907 +178000 ekin = 0.317951707449239 | erot = 0.413377690532346 | epot = -15.3488434329111 | etot = -14.6175140349295 +179000 ekin = 0.324107901132174 | erot = 0.419041092198358 | epot = -15.3606630283006 | etot = -14.6175140349701 +180000 ekin = 0.328556397749118 | erot = 0.426909726006353 | epot = -15.3729801587658 | etot = -14.6175140350103 +181000 ekin = 0.331047834154798 | erot = 0.436618006901549 | epot = -15.3851798761042 | etot = -14.6175140350478 +182000 ekin = 0.331419420115411 | erot = 0.447757936313848 | epot = -15.3966913915096 | etot = -14.6175140350804 +183000 ekin = 0.329607792338432 | erot = 0.459899520064776 | epot = -15.4070213475094 | etot = -14.6175140351062 +184000 ekin = 0.325656516855951 | erot = 0.472611792132538 | epot = -15.4157823441122 | etot = -14.6175140351237 +185000 ekin = 0.319716934488103 | erot = 0.485483030926984 | epot = -15.4227140005474 | etot = -14.6175140351323 +186000 ekin = 0.312041347783061 | erot = 0.498138700397667 | epot = -15.4276940833127 | etot = -14.6175140351319 +187000 ekin = 0.302968200961952 | erot = 0.510255791848641 | epot = -15.4307380279341 | etot = -14.6175140351235 +188000 ekin = 0.292899787357099 | erot = 0.521572552051206 | epot = -15.4319863745165 | etot = -14.6175140351082 +189000 ekin = 0.282274048056294 | erot = 0.531893031493142 | epot = -15.4316811146379 | etot = -14.6175140350885 +190000 ekin = 0.271533034589587 | erot = 0.541086413296707 | epot = -15.4301334829529 | etot = -14.6175140350666 +191000 ekin = 0.261091384545769 | erot = 0.54908161018572 | epot = -15.4276870297764 | etot = -14.6175140350449 +192000 ekin = 0.251308489708551 | erot = 0.555858063434352 | epot = -15.4246805881686 | etot = -14.6175140350257 +193000 ekin = 0.242467771120031 | erot = 0.561433978654736 | epot = -15.4214157847852 | etot = -14.6175140350104 +194000 ekin = 0.2347655816246 | erot = 0.565853352187793 | epot = -15.4181329688123 | etot = -14.6175140349999 +195000 ekin = 0.228310848061445 | erot = 0.569173077812631 | epot = -15.4149979608682 | etot = -14.6175140349941 +196000 ekin = 0.223134890550306 | erot = 0.57145120860725 | epot = -15.4121001341502 | etot = -14.6175140349926 +197000 ekin = 0.219209242156003 | erot = 0.572737138233763 | epot = -15.409460415384 | etot = -14.6175140349943 +198000 ekin = 0.216468062809104 | erot = 0.573064123808166 | epot = -15.4070462216152 | etot = -14.6175140349979 +199000 ekin = 0.214831137522652 | erot = 0.572444258403913 | epot = -15.4047894309289 | etot = -14.6175140350023 +200000 ekin = 0.214223573902254 | erot = 0.57086576066316 | epot = -15.4026033695722 | etot = -14.6175140350067 +201000 ekin = 0.214589119166907 | erot = 0.568292309386801 | epot = -15.4003954635645 | etot = -14.6175140350107 +202000 ekin = 0.215895325602457 | erot = 0.564664121433424 | epot = -15.3980734820503 | etot = -14.6175140350145 +203000 ekin = 0.218130347570136 | erot = 0.559900543318492 | epot = -15.395544925907 | etot = -14.6175140350184 +204000 ekin = 0.221292667473869 | erot = 0.553904074217835 | epot = -15.3927107767149 | etot = -14.6175140350232 +205000 ekin = 0.225376258610798 | erot = 0.546565915588112 | epot = -15.3894562092286 | etot = -14.6175140350297 +206000 ekin = 0.230354397529151 | erot = 0.537773288683187 | epot = -15.3856417212507 | etot = -14.6175140350384 +207000 ekin = 0.236165428414771 | erot = 0.527418806929786 | epot = -15.3810982703936 | etot = -14.617514035049 +208000 ekin = 0.242703261860427 | erot = 0.515412077175151 | epot = -15.3756293740966 | etot = -14.617514035061 +209000 ekin = 0.249814382550021 | erot = 0.501693407691568 | epot = -15.3690218253148 | etot = -14.6175140350732 +210000 ekin = 0.257301864855649 | erot = 0.486249049965564 | epot = -15.361064949905 | etot = -14.6175140350838 +211000 ekin = 0.264935635394273 | erot = 0.469126912720557 | epot = -15.3515765832057 | etot = -14.6175140350909 +212000 ekin = 0.272467183646406 | erot = 0.450451153648061 | epot = -15.3404323723872 | etot = -14.6175140350927 +213000 ekin = 0.279646306736793 | erot = 0.430433702677846 | epot = -15.3275940445023 | etot = -14.6175140350876 +214000 ekin = 0.286237611276688 | erot = 0.409381288017783 | epot = -15.3131329343691 | etot = -14.6175140350746 +215000 ekin = 0.292034643872632 | erot = 0.387696263734527 | epot = -15.2972449426606 | etot = -14.6175140350534 +216000 ekin = 0.296870258152624 | erot = 0.365870567411729 | epot = -15.2802548605889 | etot = -14.6175140350245 +217000 ekin = 0.300622666324868 | erot = 0.344472695102956 | epot = -15.2626093964168 | etot = -14.617514034989 +218000 ekin = 0.303217269541043 | erot = 0.324128407398458 | epot = -15.2448597118882 | etot = -14.6175140349487 +219000 ekin = 0.304624843911682 | erot = 0.305496496152239 | epot = -15.2276353749694 | etot = -14.6175140349055 +220000 ekin = 0.304856982073792 | erot = 0.289241221676068 | epot = -15.2116122386118 | etot = -14.6175140348619 +221000 ekin = 0.303959749544065 | erot = 0.276003133762455 | epot = -15.1974769181266 | etot = -14.61751403482 +222000 ekin = 0.302006434070655 | erot = 0.266369862265548 | epot = -15.1858903311184 | etot = -14.6175140347822 +223000 ekin = 0.299090105490396 | erot = 0.260848208954625 | epot = -15.1774523491954 | etot = -14.6175140347503 +224000 ekin = 0.29531650374511 | erot = 0.259838588557332 | epot = -15.1726691270288 | etot = -14.6175140347264 +225000 ekin = 0.290797600317434 | erot = 0.263612591735795 | epot = -15.1719242267649 | etot = -14.6175140347117 +226000 ekin = 0.285646103232653 | erot = 0.272294318080247 | epot = -15.1754544560203 | etot = -14.6175140347074 +227000 ekin = 0.279971018689074 | erot = 0.285846075011501 | epot = -15.1833311284151 | etot = -14.6175140347145 +228000 ekin = 0.273874374727583 | erot = 0.304059069119542 | epot = -15.1954474785804 | etot = -14.6175140347333 +229000 ekin = 0.267449174159942 | erot = 0.326549807965912 | epot = -15.2115130168895 | etot = -14.6175140347636 +230000 ekin = 0.260778614118952 | erot = 0.352763004039877 | epot = -15.2310556529637 | etot = -14.6175140348048 +231000 ekin = 0.253936564976955 | erot = 0.381981763344646 | epot = -15.2534323631772 | etot = -14.6175140348556 +232000 ekin = 0.24698923084228 | erot = 0.413345683736504 | epot = -15.2778489494931 | etot = -14.6175140349143 +233000 ekin = 0.239997814735683 | erot = 0.445877135783545 | epot = -15.3033889854978 | etot = -14.6175140349785 +234000 ekin = 0.233021891669698 | erot = 0.478515439398703 | epot = -15.3290513661138 | etot = -14.6175140350454 +235000 ekin = 0.226123071286244 | erot = 0.510157919201248 | epot = -15.3537950255994 | etot = -14.6175140351119 +236000 ekin = 0.219368436952614 | erot = 0.539706010633753 | epot = -15.3765884827609 | etot = -14.6175140351745 +237000 ekin = 0.212833212708479 | erot = 0.566113832023268 | epot = -15.3964610799618 | etot = -14.6175140352301 +238000 ekin = 0.206602165162757 | erot = 0.588436180449468 | epot = -15.412552380888 | etot = -14.6175140352757 +239000 ekin = 0.200769360307635 | erot = 0.605872583258753 | epot = -15.4241559788757 | etot = -14.6175140353093 +240000 ekin = 0.195436190928488 | erot = 0.617803458378408 | epot = -15.4307536846362 | etot = -14.6175140353293 +241000 ekin = 0.190707920284559 | erot = 0.623817360381655 | epot = -15.4320393160013 | etot = -14.6175140353351 +242000 ekin = 0.186689132523883 | erot = 0.623726737660644 | epot = -15.4279299055112 | etot = -14.6175140353267 +243000 ekin = 0.18347888087463 | erot = 0.61757185737741 | epot = -15.418564773557 | etot = -14.617514035305 +244000 ekin = 0.181166166759762 | erot = 0.60561292371356 | epot = -15.4042931257446 | etot = -14.6175140352713 +245000 ekin = 0.179826690515581 | erot = 0.588311983398978 | epot = -15.3856527091421 | etot = -14.6175140352276 +246000 ekin = 0.179521473344392 | erot = 0.566306329740652 | epot = -15.3633418382609 | etot = -14.6175140351758 +247000 ekin = 0.180297726608685 | erot = 0.54037552872489 | epot = -15.3381872904519 | etot = -14.6175140351184 +248000 ekin = 0.182192022180427 | erot = 0.511404282992934 | epot = -15.3111103402306 | etot = -14.6175140350572 +249000 ekin = 0.185235475058219 | erot = 0.480343275338998 | epot = -15.2830927853917 | etot = -14.6175140349945 +250000 ekin = 0.18946032457762 | erot = 0.448169956263045 | epot = -15.2551443157728 | etot = -14.6175140349321 +251000 ekin = 0.194907020011059 | erot = 0.415851007133659 | epot = -15.2282720620165 | etot = -14.6175140348718 +252000 ekin = 0.201630699422451 | erot = 0.384307951122869 | epot = -15.2034526853603 | etot = -14.617514034815 +253000 ekin = 0.209705815254746 | erot = 0.354387113740477 | epot = -15.1816069637584 | etot = -14.6175140347632 +254000 ekin = 0.219227629545986 | erot = 0.326834860919931 | epot = -15.1635765251836 | etot = -14.6175140347177 +255000 ekin = 0.230309407956005 | erot = 0.302278768995696 | epot = -15.1501022116313 | etot = -14.6175140346796 +256000 ekin = 0.243074422920893 | erot = 0.281215109558497 | epot = -15.1418035671295 | etot = -14.6175140346501 +257000 ekin = 0.257642364628865 | erot = 0.264002762945737 | epot = -15.139159162205 | etot = -14.6175140346304 +258000 ekin = 0.274110461102935 | erot = 0.250863404057276 | epot = -15.1424878997817 | etot = -14.6175140346215 +259000 ekin = 0.292530483428745 | erot = 0.241887528332562 | epot = -15.1519320463858 | etot = -14.6175140346245 +260000 ekin = 0.312883750214262 | erot = 0.237045600990929 | epot = -15.167443385845 | etot = -14.6175140346398 +261000 ekin = 0.335057071665646 | erot = 0.23620332462488 | epot = -15.1887744309582 | etot = -14.6175140346677 +262000 ekin = 0.358823075932977 | erot = 0.239139750883904 | epot = -15.2154768615246 | etot = -14.6175140347077 +263000 ekin = 0.383828346058697 | erot = 0.24556675356939 | epot = -15.2469091343868 | etot = -14.6175140347588 +264000 ekin = 0.409592161639846 | erot = 0.25514829095879 | epot = -15.2822544874178 | etot = -14.6175140348192 +265000 ekin = 0.435517425641053 | erot = 0.267517972446926 | epot = -15.3205494329745 | etot = -14.6175140348865 +266000 ekin = 0.460913759434934 | erot = 0.28229374222826 | epot = -15.3607215366211 | etot = -14.6175140349579 +267000 ekin = 0.485031075314244 | erot = 0.299088986461549 | epot = -15.4016340968062 | etot = -14.6175140350304 +268000 ekin = 0.507100517474285 | erot = 0.317519986657596 | epot = -15.4421345392328 | etot = -14.6175140351009 +269000 ekin = 0.526378761164296 | erot = 0.337210258004039 | epot = -15.4811030543346 | etot = -14.6175140351662 +270000 ekin = 0.542191399558024 | erot = 0.357792786171182 | epot = -15.5174982209533 | etot = -14.6175140352241 +271000 ekin = 0.55397150127625 | erot = 0.378911394713957 | epot = -15.5503969312626 | etot = -14.6175140352724 +272000 ekin = 0.561290243477908 | erot = 0.400222387434508 | epot = -15.579026666222 | etot = -14.6175140353095 +273000 ekin = 0.563877614618956 | erot = 0.421397250044594 | epot = -15.6027888999983 | etot = -14.6175140353347 +274000 ekin = 0.561632338448697 | erot = 0.442126671656052 | epot = -15.6212730454525 | etot = -14.6175140353478 +275000 ekin = 0.554621238225524 | erot = 0.462125606775959 | epot = -15.6342608803503 | etot = -14.6175140353488 +276000 ekin = 0.543069132888247 | erot = 0.481138682332307 | epot = -15.6417218505594 | etot = -14.6175140353389 +277000 ekin = 0.527340979966703 | erot = 0.498945052082944 | epot = -15.6438000673687 | etot = -14.617514035319 +278000 ekin = 0.507918337218215 | erot = 0.515361832412993 | epot = -15.6407942049222 | etot = -14.617514035291 +279000 ekin = 0.485372319602766 | erot = 0.53024547360125 | epot = -15.6331318284605 | etot = -14.6175140352565 +280000 ekin = 0.460335116507262 | erot = 0.543490744710295 | epot = -15.6213398964351 | etot = -14.6175140352175 +281000 ekin = 0.433471859961099 | erot = 0.555027349455695 | epot = -15.606013244593 | etot = -14.6175140351762 +282000 ekin = 0.405454262481042 | erot = 0.564814480005611 | epot = -15.5877827776215 | etot = -14.6175140351348 +283000 ekin = 0.376937038993841 | erot = 0.572833827991569 | epot = -15.56728490208 | etot = -14.6175140350946 +284000 ekin = 0.348537747962758 | erot = 0.579081711929156 | epot = -15.5451334949486 | etot = -14.6175140350567 +285000 ekin = 0.320820372083395 | erot = 0.583561068644996 | epot = -15.5218954757513 | etot = -14.6175140350229 +286000 ekin = 0.294282726921591 | erot = 0.586274110944376 | epot = -15.49807087286 | etot = -14.617514034994 +287000 ekin = 0.269347634013421 | erot = 0.58721647590847 | epot = -15.4740781448926 | etot = -14.6175140349707 +288000 ekin = 0.246357704467551 | erot = 0.586373659771232 | epot = -15.450245399192 | etot = -14.6175140349532 +289000 ekin = 0.22557352214567 | erot = 0.583720426230562 | epot = -15.4268079833179 | etot = -14.6175140349417 +290000 ekin = 0.207174962818393 | erot = 0.57922365744791 | epot = -15.4039126552014 | etot = -14.6175140349351 +291000 ekin = 0.191265313940187 | erot = 0.572848780862473 | epot = -15.3816281297352 | etot = -14.6175140349326 +292000 ekin = 0.177877757396419 | erot = 0.564569470031942 | epot = -15.3599612623613 | etot = -14.617514034933 +293000 ekin = 0.166983649288418 | erot = 0.554379837681261 | epot = -15.3388775219044 | etot = -14.6175140349348 +294000 ekin = 0.158501898150678 | erot = 0.542307895558042 | epot = -15.3183238286452 | etot = -14.6175140349364 +295000 ekin = 0.152308641379645 | erot = 0.528428741575596 | epot = -15.298251417892 | etot = -14.6175140349367 +296000 ekin = 0.148246390134139 | erot = 0.512875830575803 | epot = -15.2786362556445 | etot = -14.6175140349346 +297000 ekin = 0.146131889948737 | erot = 0.495848833634457 | epot = -15.2594947585125 | etot = -14.6175140349293 +298000 ekin = 0.145762142540829 | erot = 0.477616979344766 | epot = -15.2408931568064 | etot = -14.6175140349208 +299000 ekin = 0.146918339842591 | erot = 0.458517327975552 | epot = -15.2229497027275 | etot = -14.6175140349094 +300000 ekin = 0.149367830717969 | erot = 0.438948042713275 | epot = -15.205829908327 | etot = -14.6175140348958 +301000 ekin = 0.152864610233931 | erot = 0.419357266834875 | epot = -15.1897359119496 | etot = -14.6175140348808 +302000 ekin = 0.157149122640062 | erot = 0.400228590599294 | epot = -15.1748917481051 | etot = -14.6175140348658 +303000 ekin = 0.16194834771892 | erot = 0.382064246008704 | epot = -15.1615266285792 | etot = -14.6175140348516 +304000 ekin = 0.166977167327322 | erot = 0.365367110080369 | epot = -15.1498583122469 | etot = -14.6175140348392 +305000 ekin = 0.171941885875759 | erot = 0.350622387002877 | epot = -15.1400783077083 | etot = -14.6175140348297 +306000 ekin = 0.176546522696758 | erot = 0.338279561365245 | epot = -15.1323401188853 | etot = -14.6175140348233 +307000 ekin = 0.180502080572099 | erot = 0.328734935092634 | epot = -15.1267510504853 | etot = -14.6175140348206 +308000 ekin = 0.183539117579173 | erot = 0.32231506851894 | epot = -15.1233682209196 | etot = -14.6175140348214 +309000 ekin = 0.185422589168761 | erot = 0.31926113518105 | epot = -15.1221977591756 | etot = -14.6175140348258 +310000 ekin = 0.18596838252546 | erot = 0.319714556778101 | epot = -15.1231969741369 | etot = -14.6175140348333 +311000 ekin = 0.185060444471766 | erot = 0.323704474533048 | epot = -15.1262789538485 | etot = -14.6175140348436 +312000 ekin = 0.18266705569995 | erot = 0.331137883754578 | epot = -15.1313189743107 | etot = -14.6175140348562 +313000 ekin = 0.178854671448202 | erot = 0.341793554574001 | epot = -15.1381622608926 | etot = -14.6175140348704 +314000 ekin = 0.173797674113419 | erot = 0.355321045101389 | epot = -15.1466327541005 | etot = -14.6175140348857 +315000 ekin = 0.167782440686126 | erot = 0.371246117949507 | epot = -15.1565425935371 | etot = -14.6175140349014 +316000 ekin = 0.161204347699483 | erot = 0.388983636697569 | epot = -15.1677020193138 | etot = -14.6175140349167 +317000 ekin = 0.154556738723145 | erot = 0.407858516720337 | epot = -15.1799292903744 | etot = -14.6175140349309 +318000 ekin = 0.148411457828143 | erot = 0.427134549770667 | epot = -15.1930600425422 | etot = -14.6175140349434 +319000 ekin = 0.143391260343367 | erot = 0.446049980955804 | epot = -15.2069552762529 | etot = -14.6175140349537 +320000 ekin = 0.140135163879429 | erot = 0.463857713006082 | epot = -15.2215069118471 | etot = -14.6175140349616 +321000 ekin = 0.139258496830789 | erot = 0.479867117343116 | epot = -15.2366396491412 | etot = -14.6175140349673 +322000 ekin = 0.141309963686665 | erot = 0.493483840953484 | epot = -15.2523078396112 | etot = -14.6175140349711 +323000 ekin = 0.146728465401823 | erot = 0.504243890594755 | epot = -15.2684863909706 | etot = -14.6175140349741 +324000 ekin = 0.155802740978128 | erot = 0.511838753068286 | epot = -15.285155529024 | etot = -14.6175140349776 +325000 ekin = 0.168637192339279 | erot = 0.516129344219886 | epot = -15.3022805715426 | etot = -14.6175140349834 +326000 ekin = 0.185127492740314 | erot = 0.517147991937071 | epot = -15.31978951967 | etot = -14.6175140349926 +327000 ekin = 0.204949583924698 | erot = 0.515089155112464 | epot = -15.3375527740434 | etot = -14.6175140350062 +328000 ekin = 0.227565145375698 | erot = 0.510290835145397 | epot = -15.3553700155455 | etot = -14.6175140350244 +329000 ekin = 0.252245305620947 | erot = 0.503209396461946 | epot = -15.3729687371292 | etot = -14.6175140350463 +330000 ekin = 0.278112223737838 | erot = 0.494390678508285 | epot = -15.3900169373164 | etot = -14.6175140350703 +331000 ekin = 0.304195517643728 | erot = 0.484439927615862 | epot = -15.4061494803532 | etot = -14.6175140350936 +332000 ekin = 0.329497983391289 | erot = 0.473992405220338 | epot = -15.4210044237253 | etot = -14.6175140351137 +333000 ekin = 0.353063353197021 | erot = 0.463685785197061 | epot = -15.4342631735221 | etot = -14.617514035128 +334000 ekin = 0.374038491014966 | erot = 0.454134842084351 | epot = -15.4456873682339 | etot = -14.6175140351346 +335000 ekin = 0.391723520498624 | erot = 0.44590856262641 | epot = -15.4551461182577 | etot = -14.6175140351327 +336000 ekin = 0.405605581596876 | erot = 0.439509690041266 | epot = -15.4626293067607 | etot = -14.6175140351225 +337000 ekin = 0.415374601836511 | erot = 0.435356764652945 | epot = -15.4682454015947 | etot = -14.6175140351053 +338000 ekin = 0.420921997008494 | erot = 0.4337688621957 | epot = -15.4722048942871 | etot = -14.6175140350829 +339000 ekin = 0.422325110445994 | erot = 0.434953376212245 | epot = -15.4747925217162 | etot = -14.6175140350579 +340000 ekin = 0.419821259879065 | erot = 0.438997304560045 | epot = -15.4763325994719 | etot = -14.6175140350328 +341000 ekin = 0.413775534579932 | erot = 0.445862573585468 | epot = -15.4771521431752 | etot = -14.6175140350098 +342000 ekin = 0.404646174019828 | erot = 0.455385967573506 | epot = -15.4775461765844 | etot = -14.617514034991 +343000 ekin = 0.392950705832007 | erot = 0.467284215126369 | epot = -15.4777489559361 | etot = -14.6175140349777 +344000 ekin = 0.379235231728315 | erot = 0.481164689425287 | epot = -15.4779139561242 | etot = -14.6175140349706 +345000 ekin = 0.364048459932831 | erot = 0.49654196729344 | epot = -15.4781044621959 | etot = -14.6175140349696 +346000 ekin = 0.347921358320248 | erot = 0.512860132814242 | epot = -15.4782955261082 | etot = -14.6175140349738 +347000 ekin = 0.331352665808313 | erot = 0.529520204052381 | epot = -15.4783869048424 | etot = -14.6175140349817 +348000 ekin = 0.314799955037007 | erot = 0.545911447468509 | epot = -15.478225437497 | etot = -14.6175140349915 +349000 ekin = 0.298675493175969 | erot = 0.561444708833552 | epot = -15.4776342370106 | etot = -14.6175140350011 +350000 ekin = 0.28334581552179 | erot = 0.575585348315622 | epot = -15.4764451988457 | etot = -14.6175140350083 +351000 ekin = 0.269133730328657 | erot = 0.587883045338955 | epot = -15.474530810679 | etot = -14.6175140350114 +352000 ekin = 0.256321431306528 | erot = 0.597995738138102 | epot = -15.4718312044538 | etot = -14.6175140350092 +353000 ekin = 0.245153509655857 | erot = 0.605705335206491 | epot = -15.4683728798634 | etot = -14.617514035001 +354000 ekin = 0.235838910987786 | erot = 0.610923562934953 | epot = -15.4642765089099 | etot = -14.6175140349872 +355000 ekin = 0.228551231301984 | erot = 0.613687305426088 | epot = -15.4597525716969 | etot = -14.6175140349688 +356000 ekin = 0.223427131308619 | erot = 0.61414390282533 | epot = -15.4550850690815 | etot = -14.6175140349475 +357000 ekin = 0.220563006919496 | erot = 0.612527933402533 | epot = -15.4506049752473 | etot = -14.6175140349253 +358000 ekin = 0.220010333199303 | erot = 0.609131855544879 | epot = -15.4466562236489 | etot = -14.6175140349047 +359000 ekin = 0.221770268741646 | erot = 0.604273418958276 | epot = -15.443557722588 | etot = -14.6175140348881 +360000 ekin = 0.225788163654918 | erot = 0.598262925571842 | epot = -15.4415651241044 | etot = -14.6175140348777 +361000 ekin = 0.231948578438913 | erot = 0.59137325198523 | epot = -15.4408358652996 | etot = -14.6175140348754 +362000 ekin = 0.240071331019464 | erot = 0.583815109039738 | epot = -15.4414004749418 | etot = -14.6175140348826 +363000 ekin = 0.249908988059078 | erot = 0.575719406612622 | epot = -15.4431424295716 | etot = -14.6175140348999 +364000 ekin = 0.261146140583132 | erot = 0.56712790648618 | epot = -15.4457880819966 | etot = -14.6175140349273 +365000 ekin = 0.273400773646818 | erot = 0.557992653604894 | epot = -15.4489074622159 | etot = -14.6175140349642 +366000 ekin = 0.286228056504663 | erot = 0.548184015757871 | epot = -15.4519261072718 | etot = -14.6175140350093 +367000 ekin = 0.299126926926786 | erot = 0.537506547610907 | epot = -15.4541475095983 | etot = -14.6175140350606 +368000 ekin = 0.311549892639084 | erot = 0.525721330951755 | epot = -15.4547852587065 | etot = -14.6175140351156 +369000 ekin = 0.322916493342769 | erot = 0.512572942753926 | epot = -15.4530034712682 | etot = -14.6175140351715 +370000 ekin = 0.332630833324557 | erot = 0.497818805481132 | epot = -15.4479636740308 | etot = -14.6175140352251 +371000 ekin = 0.340103492446634 | erot = 0.481258447415918 | epot = -15.4388759751356 | etot = -14.6175140352731 +372000 ekin = 0.344777943664193 | erot = 0.462760223983496 | epot = -15.4250522029596 | etot = -14.6175140353119 +373000 ekin = 0.346161332162081 | erot = 0.442283380417406 | epot = -15.405958747918 | etot = -14.6175140353385 +374000 ekin = 0.343859062980667 | erot = 0.419893962766177 | epot = -15.3812670610967 | etot = -14.6175140353498 +375000 ekin = 0.337612023151491 | erot = 0.395773904235502 | epot = -15.35089996273 | etot = -14.617514035343 +376000 ekin = 0.327334336193659 | erot = 0.370223433835828 | epot = -15.3150718053453 | etot = -14.6175140353159 +377000 ekin = 0.313148263712968 | erot = 0.3436575453366 | epot = -15.2743198443167 | etot = -14.6175140352671 +378000 ekin = 0.295411338277735 | erot = 0.316597454537734 | epot = -15.2295228280119 | etot = -14.6175140351964 +379000 ekin = 0.274729408510529 | erot = 0.289657740939432 | epot = -15.1819011845551 | etot = -14.6175140351051 +380000 ekin = 0.251948675267414 | erot = 0.263529414055011 | epot = -15.1329921243187 | etot = -14.6175140349963 +381000 ekin = 0.228120837035203 | erot = 0.238958749468097 | epot = -15.0845936213794 | etot = -14.6175140348761 +382000 ekin = 0.204438854506746 | erot = 0.216721270519329 | epot = -15.0386741597779 | etot = -14.6175140347518 +383000 ekin = 0.182146263755385 | erot = 0.19759188098445 | epot = -14.9972521793722 | etot = -14.6175140346323 +384000 ekin = 0.162429780679522 | erot = 0.182311896924387 | epot = -14.9622557121308 | etot = -14.6175140345269 +385000 ekin = 0.146310622123822 | erot = 0.171555128911536 | epot = -14.9353797854792 | etot = -14.6175140344439 +386000 ekin = 0.134552389652403 | erot = 0.165895597224741 | epot = -14.9179620212657 | etot = -14.6175140343886 +387000 ekin = 0.127600986328395 | erot = 0.165779213534325 | epot = -14.9108942342266 | etot = -14.6175140343639 +388000 ekin = 0.125565151523028 | erot = 0.171500950984996 | epot = -14.9145801368772 | etot = -14.6175140343691 +389000 ekin = 0.128237001096973 | erot = 0.183188026636525 | epot = -14.9289390621349 | etot = -14.6175140344014 +390000 ekin = 0.135143637923168 | erot = 0.200788930663413 | epot = -14.9534466030433 | etot = -14.6175140344567 +391000 ekin = 0.145616156499953 | erot = 0.224068074688611 | epot = -14.9871982657191 | etot = -14.6175140345306 +392000 ekin = 0.158862235246809 | erot = 0.252606362171908 | epot = -15.0289826320371 | etot = -14.6175140346184 +393000 ekin = 0.174032087603698 | erot = 0.285808726839658 | epot = -15.0773548491589 | etot = -14.6175140347155 +394000 ekin = 0.190272707003915 | erot = 0.322920107512839 | epot = -15.1307068493349 | etot = -14.6175140348181 +395000 ekin = 0.206769905102427 | erot = 0.363051013228117 | epot = -15.1873349532527 | etot = -14.6175140349221 +396000 ekin = 0.222780272470673 | erot = 0.405212687947373 | epot = -15.2455069954414 | etot = -14.6175140350234 +397000 ekin = 0.23765569871957 | erot = 0.448360183482314 | epot = -15.3035299173199 | etot = -14.6175140351181 +398000 ekin = 0.250862154070766 | erot = 0.491439914329229 | epot = -15.3598161036022 | etot = -14.6175140352022 +399000 ekin = 0.261993055954332 | erot = 0.533437059170124 | epot = -15.4129441503972 | etot = -14.6175140352727 +400000 ekin = 0.270776550507805 | erot = 0.573417887949055 | epot = -15.4617084737844 | etot = -14.6175140353276 +401000 ekin = 0.277075831016468 | erot = 0.610562842823512 | epot = -15.505152709206 | etot = -14.617514035366 +402000 ekin = 0.280882158892238 | erot = 0.644187798759056 | epot = -15.5425839930397 | etot = -14.6175140353884 +403000 ekin = 0.282301228579434 | erot = 0.673752968641712 | epot = -15.5735682326173 | etot = -14.6175140353962 +404000 ekin = 0.281534519812515 | erot = 0.698860907481931 | epot = -15.5979094626858 | etot = -14.6175140353913 +405000 ekin = 0.278857975737129 | erot = 0.719246574878154 | epot = -15.6156185859915 | etot = -14.6175140353763 +406000 ekin = 0.274600555759475 | erot = 0.73476315739679 | epot = -15.6268777485094 | etot = -14.6175140353531 +407000 ekin = 0.269124923358509 | erot = 0.745367259285065 | epot = -15.6320062179673 | etot = -14.6175140353237 +408000 ekin = 0.262811853165719 | erot = 0.751106276665231 | epot = -15.63143216512 | etot = -14.6175140352891 +409000 ekin = 0.256049112192117 | erot = 0.752109968276187 | epot = -15.6256731157185 | etot = -14.6175140352502 +410000 ekin = 0.249224269809732 | erot = 0.74858433225965 | epot = -15.6153226372768 | etot = -14.6175140352074 +411000 ekin = 0.242720888553437 | erot = 0.740809103918433 | epot = -15.6010440276326 | etot = -14.6175140351607 +412000 ekin = 0.236916379506095 | erot = 0.729136085380854 | epot = -15.5835664999974 | etot = -14.6175140351104 +413000 ekin = 0.232179735243653 | erot = 0.713985498456999 | epot = -15.5636792687578 | etot = -14.6175140350572 +414000 ekin = 0.228867632642243 | erot = 0.695838652585891 | epot = -15.5422203202302 | etot = -14.6175140350021 +415000 ekin = 0.227317772307856 | erot = 0.675225695396218 | epot = -15.5200575026509 | etot = -14.6175140349469 +416000 ekin = 0.227838940777607 | erot = 0.652708261105161 | epot = -15.4980612367764 | etot = -14.6175140348937 +417000 ekin = 0.230697970866891 | erot = 0.628857925336047 | epot = -15.4770699310479 | etot = -14.617514034845 +418000 ekin = 0.236104416120681 | erot = 0.604232291329749 | epot = -15.4578507422538 | etot = -14.6175140348034 +419000 ekin = 0.244194252200401 | erot = 0.579351108945114 | epot = -15.4410593959166 | etot = -14.6175140347711 +420000 ekin = 0.255014214168464 | erot = 0.554674986841152 | epot = -15.4272032357598 | etot = -14.6175140347502 +421000 ekin = 0.268508458340295 | erot = 0.530589008736334 | epot = -15.4166115018185 | etot = -14.6175140347418 +422000 ekin = 0.284509119560496 | erot = 0.507392982380571 | epot = -15.4094161366875 | etot = -14.6175140347464 +423000 ekin = 0.302732060426934 | erot = 0.485299248118979 | epot = -15.4055453433093 | etot = -14.6175140347634 +424000 ekin = 0.322778728051398 | erot = 0.464438075670481 | epot = -15.4047308385137 | etot = -14.6175140347918 +425000 ekin = 0.344144594922637 | erot = 0.444869796712131 | epot = -15.4065284264641 | etot = -14.6175140348293 +426000 ekin = 0.366234204300038 | erot = 0.426602052983704 | epot = -15.4103502921573 | etot = -14.6175140348735 +427000 ekin = 0.388382398339816 | erot = 0.409609962240036 | epot = -15.4155063955013 | etot = -14.6175140349214 +428000 ekin = 0.409880900047524 | erot = 0.393856678091899 | epot = -15.4212516131094 | etot = -14.6175140349699 +429000 ekin = 0.430009061106479 | erot = 0.379311788381591 | epot = -15.4268348845041 | etot = -14.617514035016 +430000 ekin = 0.448067283636575 | erot = 0.3659652824005 | epot = -15.4315466010941 | etot = -14.617514035057 +431000 ekin = 0.463411378723588 | erot = 0.353835411175161 | epot = -15.4347608249895 | etot = -14.6175140350907 +432000 ekin = 0.475485941535269 | erot = 0.342969616703674 | epot = -15.4359695933546 | etot = -14.6175140351156 +433000 ekin = 0.483854704021334 | erot = 0.333438714396283 | epot = -15.4348074535483 | etot = -14.6175140351307 +434000 ekin = 0.488225698519521 | erot = 0.325325491782385 | epot = -15.4310652254377 | etot = -14.6175140351358 +435000 ekin = 0.48846961521868 | erot = 0.318709988965965 | epot = -15.4246936393157 | etot = -14.6175140351311 +436000 ekin = 0.484629100798397 | erot = 0.313653867974891 | epot = -15.4157970038909 | etot = -14.6175140351176 +437000 ekin = 0.476917712285193 | erot = 0.310186654191006 | epot = -15.4046184015729 | etot = -14.6175140350967 +438000 ekin = 0.465707830236428 | erot = 0.308296241623089 | epot = -15.3915181069294 | etot = -14.6175140350699 +439000 ekin = 0.45150753680146 | erot = 0.30792515377069 | epot = -15.3769467256113 | etot = -14.6175140350391 +440000 ekin = 0.434927659014138 | erot = 0.308973010492868 | epot = -15.3614147045135 | etot = -14.6175140350065 +441000 ekin = 0.416641657349937 | erot = 0.311304747383582 | epot = -15.3454604397074 | etot = -14.6175140349739 +442000 ekin = 0.397341542601571 | erot = 0.314762618736297 | epot = -15.3296181962812 | etot = -14.6175140349433 +443000 ekin = 0.377694362715545 | erot = 0.319179725729324 | epot = -15.314388123361 | etot = -14.6175140349161 +444000 ekin = 0.358304425136817 | erot = 0.32439329819003 | epot = -15.3002117582203 | etot = -14.6175140348934 +445000 ekin = 0.339684383335156 | erot = 0.330254911559461 | epot = -15.2874533297707 | etot = -14.6175140348761 +446000 ekin = 0.322237701351822 | erot = 0.336636009508 | epot = -15.2763877457241 | etot = -14.6175140348643 +447000 ekin = 0.30625308658371 | erot = 0.34342824275766 | epot = -15.2671953641993 | etot = -14.6175140348579 +448000 ekin = 0.291909091343975 | erot = 0.350538602019967 | epot = -15.2599617282208 | etot = -14.6175140348568 +449000 ekin = 0.279285717664377 | erot = 0.357880263087886 | epot = -15.254680015613 | etot = -14.6175140348608 +450000 ekin = 0.268379332693754 | erot = 0.365360767815974 | epot = -15.2512541353793 | etot = -14.6175140348696 +451000 ekin = 0.259117719163031 | erot = 0.372869677558793 | epot = -15.2495014316051 | etot = -14.6175140348833 +452000 ekin = 0.251373384973835 | erot = 0.380268095669032 | epot = -15.2491555155445 | etot = -14.6175140349017 +453000 ekin = 0.24497482412797 | erot = 0.387382402362676 | epot = -15.2498712614149 | etot = -14.6175140349243 +454000 ekin = 0.239716691076598 | erot = 0.394004131859313 | epot = -15.251234857886 | etot = -14.6175140349501 +455000 ekin = 0.235370413814522 | erot = 0.399897145639913 | epot = -15.252781594432 | etot = -14.6175140349776 +456000 ekin = 0.231696513790871 | erot = 0.404812188422525 | epot = -15.254022737218 | etot = -14.6175140350046 +457000 ekin = 0.22845901443235 | erot = 0.408507709512969 | epot = -15.2544807589739 | etot = -14.6175140350285 +458000 ekin = 0.225441196082656 | erot = 0.41077470562198 | epot = -15.2537299367515 | etot = -14.6175140350469 +459000 ekin = 0.22246101894078 | erot = 0.411462514810095 | epot = -15.251437568808 | etot = -14.6175140350572 +460000 ekin = 0.219384094438714 | erot = 0.410502136527495 | epot = -15.2474002660241 | etot = -14.6175140350579 +461000 ekin = 0.21613224524022 | erot = 0.40792384413126 | epot = -15.2415701244196 | etot = -14.6175140350481 +462000 ekin = 0.212686361973382 | erot = 0.403866554422734 | epot = -15.2340669514243 | etot = -14.6175140350282 +463000 ekin = 0.209083218482854 | erot = 0.398577486489151 | epot = -15.2251747399712 | etot = -14.6175140349992 +464000 ekin = 0.20540688826373 | erot = 0.392401883856613 | epot = -15.2153228070836 | etot = -14.6175140349633 +465000 ekin = 0.201776197881068 | erot = 0.385763783461919 | epot = -15.2050540162659 | etot = -14.6175140349229 +466000 ekin = 0.198330130961181 | erot = 0.379139817336986 | epot = -15.1949839831793 | etot = -14.6175140348811 +467000 ekin = 0.195213224017124 | erot = 0.373028711257475 | epot = -15.1857559701151 | etot = -14.6175140348405 +468000 ekin = 0.192562810062158 | erot = 0.367919448414916 | epot = -15.1779962932808 | etot = -14.6175140348037 +469000 ekin = 0.190499545154769 | erot = 0.364261004085612 | epot = -15.1722745840131 | etot = -14.6175140347727 +470000 ekin = 0.18912208603274 | erot = 0.362436180586983 | epot = -15.1690723013684 | etot = -14.6175140347487 +471000 ekin = 0.188506156938867 | erot = 0.362741456207278 | epot = -15.1687616478786 | etot = -14.6175140347325 +472000 ekin = 0.188707621222394 | erot = 0.365373993438347 | epot = -15.1715956493845 | etot = -14.6175140347238 +473000 ekin = 0.189768618622282 | erot = 0.370426120543888 | epot = -15.1777087738883 | etot = -14.6175140347222 +474000 ekin = 0.191725397341772 | erot = 0.377886798112635 | epot = -15.1871262301808 | etot = -14.6175140347264 +475000 ekin = 0.194616213071371 | erot = 0.387648901412467 | epot = -15.1997791492193 | etot = -14.6175140347354 +476000 ekin = 0.19848763616133 | erot = 0.399520678155556 | epot = -15.2155223490651 | etot = -14.6175140347483 +477000 ekin = 0.203397790430575 | erot = 0.413239540254448 | epot = -15.234151365449 | etot = -14.617514034764 +478000 ekin = 0.209415519783994 | erot = 0.428486466926518 | epot = -15.2554160214928 | etot = -14.6175140347823 +479000 ekin = 0.216615156595488 | erot = 0.444899686771521 | epot = -15.2790288781697 | etot = -14.6175140348027 +480000 ekin = 0.225067223158495 | erot = 0.462086880017487 | epot = -15.3046681380014 | etot = -14.6175140348255 +481000 ekin = 0.234826185148526 | erot = 0.479635803738694 | epot = -15.3319760237382 | etot = -14.6175140348509 +482000 ekin = 0.24591693935593 | erot = 0.497123799837189 | epot = -15.3605547740723 | etot = -14.6175140348792 +483000 ekin = 0.258322039581471 | erot = 0.514126984880484 | epot = -15.3899630593723 | etot = -14.6175140349103 +484000 ekin = 0.271971667055458 | erot = 0.530229960568097 | epot = -15.4197156625675 | etot = -14.617514034944 +485000 ekin = 0.286738030810237 | erot = 0.545036619609161 | epot = -15.4492886853988 | etot = -14.6175140349794 +486000 ekin = 0.302435294442602 | erot = 0.558182125190157 | epot = -15.4781314546481 | etot = -14.6175140350154 +487000 ekin = 0.318825369858635 | erot = 0.569345540302413 | epot = -15.5056849452114 | etot = -14.6175140350504 +488000 ekin = 0.335629120856599 | erot = 0.578262027782435 | epot = -15.5314051837218 | etot = -14.6175140350827 +489000 ekin = 0.352541803825719 | erot = 0.584733173542254 | epot = -15.5547890124787 | etot = -14.6175140351108 +490000 ekin = 0.369251041133798 | erot = 0.58863390237619 | epot = -15.5753989786432 | etot = -14.6175140351332 +491000 ekin = 0.385455339944008 | erot = 0.589914693970058 | epot = -15.5928840690631 | etot = -14.6175140351491 +492000 ekin = 0.40088115647899 | erot = 0.588598334680754 | epot = -15.6069935263179 | etot = -14.6175140351581 +493000 ekin = 0.415296746377553 | erot = 0.584771169137649 | epot = -15.6175819506758 | etot = -14.6175140351606 +494000 ekin = 0.428521503102931 | erot = 0.578569614095801 | epot = -15.6246051523561 | etot = -14.6175140351573 +495000 ekin = 0.440430011858771 | erot = 0.570163426568569 | epot = -15.6281074735768 | etot = -14.6175140351495 +496000 ekin = 0.450950706316734 | erot = 0.559737766477586 | epot = -15.628202507933 | etot = -14.6175140351387 +497000 ekin = 0.460059581798191 | erot = 0.547476355485745 | epot = -15.6250499724103 | etot = -14.6175140351264 +498000 ekin = 0.467769906492318 | erot = 0.533547985555278 | epot = -15.6188319271617 | etot = -14.6175140351141 +499000 ekin = 0.474119221073082 | erot = 0.518098277332704 | epot = -15.6097315335085 | etot = -14.6175140351027 +500000 ekin = 0.47915510663518 | erot = 0.501247978937513 | epot = -15.5979171206656 | etot = -14.6175140350929 +501000 ekin = 0.482921233338969 | erot = 0.483098304082662 | epot = -15.5835335725064 | etot = -14.6175140350848 +502000 ekin = 0.485445093649088 | erot = 0.463742920559554 | epot = -15.5667020492864 | etot = -14.6175140350777 +503000 ekin = 0.486728599209648 | erot = 0.443285305605623 | epot = -15.5475279398862 | etot = -14.6175140350709 +504000 ekin = 0.486742408087926 | erot = 0.421859374631785 | epot = -15.5261158177828 | etot = -14.6175140350631 +505000 ekin = 0.485424480827694 | erot = 0.399650657768087 | epot = -15.5025891736488 | etot = -14.617514035053 +506000 ekin = 0.48268297341187 | erot = 0.376914939267219 | epot = -15.4771119477182 | etot = -14.6175140350392 +507000 ekin = 0.478403198154612 | erot = 0.353991273961029 | epot = -15.4499085071364 | etot = -14.6175140350208 +508000 ekin = 0.472458052935441 | erot = 0.331306710133916 | epot = -15.4212787980666 | etot = -14.6175140349972 +509000 ekin = 0.46472106285539 | erot = 0.309370883447747 | epot = -15.3916059812718 | etot = -14.6175140349687 +510000 ekin = 0.455081004104095 | erot = 0.288759823578743 | epot = -15.3613548626186 | etot = -14.6175140349358 +511000 ekin = 0.443456979180403 | erot = 0.270089690707411 | epot = -15.3310607047875 | etot = -14.6175140348996 +512000 ekin = 0.429812848219575 | erot = 0.25398253489869 | epot = -15.3013094179802 | etot = -14.6175140348619 +513000 ekin = 0.414169942618988 | erot = 0.241027258547328 | epot = -15.2727112359908 | etot = -14.6175140348245 +514000 ekin = 0.396617122319459 | erot = 0.231739657368316 | epot = -15.245870814477 | etot = -14.6175140347893 +515000 ekin = 0.377317407138787 | erot = 0.226525548757195 | epot = -15.2213569906539 | etot = -14.6175140347579 +516000 ekin = 0.356510629533613 | erot = 0.225650587239684 | epot = -15.1996752515051 | etot = -14.6175140347318 +517000 ekin = 0.334511811731556 | erot = 0.229219509886492 | epot = -15.1812453563299 | etot = -14.6175140347118 +518000 ekin = 0.311705249160021 | erot = 0.23716641592675 | epot = -15.1663856997854 | etot = -14.6175140346987 +519000 ekin = 0.288534562405509 | erot = 0.249256456193826 | epot = -15.1553050532917 | etot = -14.6175140346923 +520000 ekin = 0.265489234982404 | erot = 0.265098165451267 | epot = -15.1481014351262 | etot = -14.6175140346925 +521000 ekin = 0.243088358087729 | erot = 0.284164745160129 | epot = -15.1447671379464 | etot = -14.6175140346986 +522000 ekin = 0.221862437060792 | erot = 0.305821970140486 | epot = -15.1451984419111 | etot = -14.6175140347098 +523000 ekin = 0.202334169776215 | erot = 0.329360070797338 | epot = -15.149208275299 | etot = -14.6175140347255 +524000 ekin = 0.184999091076189 | erot = 0.354026911471086 | epot = -15.1565400372918 | etot = -14.6175140347445 +525000 ekin = 0.170306912739355 | erot = 0.379059948771691 | epot = -15.1668808962774 | etot = -14.6175140347664 +526000 ekin = 0.158644243148445 | erot = 0.403715126925631 | epot = -15.1798734048646 | etot = -14.6175140347905 +527000 ekin = 0.150319367666608 | erot = 0.427291025812717 | epot = -15.1951244282958 | etot = -14.6175140348165 +528000 ekin = 0.145549592055318 | erot = 0.449147424933815 | epot = -15.2122110518333 | etot = -14.6175140348441 +529000 ekin = 0.144451603984815 | erot = 0.46871812185095 | epot = -15.2306837607091 | etot = -14.6175140348734 +530000 ekin = 0.147035267138349 | erot = 0.485518371011605 | epot = -15.2500676730542 | etot = -14.6175140349042 +531000 ekin = 0.153201203684292 | erot = 0.499147835497304 | epot = -15.2698630741182 | etot = -14.6175140349366 +532000 ekin = 0.162742448479717 | erot = 0.509290301682708 | epot = -15.2895467851327 | etot = -14.6175140349702 +533000 ekin = 0.175350354881916 | erot = 0.515711587206721 | epot = -15.3085759770934 | etot = -14.6175140350047 +534000 ekin = 0.190624856013519 | erot = 0.518257146630614 | epot = -15.3263960376834 | etot = -14.6175140350393 +535000 ekin = 0.208088493536824 | erot = 0.516850140104756 | epot = -15.3424526687142 | etot = -14.6175140350726 +536000 ekin = 0.227204325842689 | erot = 0.511491240065728 | epot = -15.3562096010119 | etot = -14.6175140351035 +537000 ekin = 0.247396768812984 | erot = 0.502260311074185 | epot = -15.3671711150173 | etot = -14.6175140351302 +538000 ekin = 0.268074342413392 | erot = 0.489319600961478 | epot = -15.3749079785256 | etot = -14.6175140351508 +539000 ekin = 0.288653182933449 | erot = 0.4729176796722 | epot = -15.3790848977693 | etot = -14.6175140351637 +540000 ekin = 0.308579985825782 | erot = 0.453392904739592 | epot = -15.3794869257329 | etot = -14.6175140351675 +541000 ekin = 0.327353008191246 | erot = 0.431174973010967 | epot = -15.3760420163633 | etot = -14.6175140351611 +542000 ekin = 0.344539853506965 | erot = 0.406783142889028 | epot = -15.3688370315399 | etot = -14.6175140351439 +543000 ekin = 0.359790986513993 | erot = 0.380819988063805 | epot = -15.3581250096939 | etot = -14.6175140351161 +544000 ekin = 0.37284826309085 | erot = 0.353960030672464 | epot = -15.344322328842 | etot = -14.6175140350787 +545000 ekin = 0.383548167009815 | erot = 0.326933212481791 | epot = -15.3279954145248 | etot = -14.6175140350332 +546000 ekin = 0.391819867385749 | erot = 0.300503784237994 | epot = -15.3098376866053 | etot = -14.6175140349815 +547000 ekin = 0.397678590182396 | erot = 0.275445713887096 | epot = -15.2906383389958 | etot = -14.6175140349263 +548000 ekin = 0.401215088504832 | erot = 0.252516050366015 | epot = -15.2712451737408 | etot = -14.6175140348699 +549000 ekin = 0.402582175512791 | erot = 0.232427794767637 | epot = -15.2525240050959 | etot = -14.6175140348155 +550000 ekin = 0.401979352687969 | erot = 0.215823740833009 | epot = -15.2353171282862 | etot = -14.6175140347652 +551000 ekin = 0.399636550193996 | erot = 0.203252510909739 | epot = -15.220403095825 | etot = -14.6175140347213 +552000 ekin = 0.395797934840894 | erot = 0.195147714573778 | epot = -15.2084596841007 | etot = -14.617514034686 +553000 ekin = 0.390706676476196 | erot = 0.191810879117336 | epot = -15.2000315902546 | etot = -14.6175140346611 +554000 ekin = 0.384591526958096 | erot = 0.19339860945437 | epot = -15.1955041710601 | etot = -14.6175140346476 +555000 ekin = 0.377656068332676 | erot = 0.199914362894006 | epot = -15.1950844658734 | etot = -14.6175140346467 +556000 ekin = 0.370071512615683 | erot = 0.211205266307111 | epot = -15.1987908135806 | etot = -14.6175140346578 +557000 ekin = 0.361973939272813 | erot = 0.226964515102972 | epot = -15.2064524890562 | etot = -14.6175140346805 +558000 ekin = 0.353466765020817 | erot = 0.246739996102199 | epot = -15.2177207958362 | etot = -14.6175140347132 +559000 ekin = 0.344628961765223 | erot = 0.269949765670651 | epot = -15.2320927621895 | etot = -14.6175140347536 +560000 ekin = 0.335528980568065 | erot = 0.295904778796298 | epot = -15.248947794163 | etot = -14.6175140347986 +561000 ekin = 0.326243446081694 | erot = 0.32383871490908 | epot = -15.2675961958353 | etot = -14.6175140348445 +562000 ekin = 0.316878486813705 | erot = 0.352943857553535 | epot = -15.2873363792542 | etot = -14.617514034887 +563000 ekin = 0.307590234581993 | erot = 0.382410843957943 | epot = -15.3075151134627 | etot = -14.6175140349227 +564000 ekin = 0.298599911427723 | erot = 0.411468934029848 | epot = -15.3275828804063 | etot = -14.6175140349488 +565000 ekin = 0.290198521501613 | erot = 0.439422606477982 | epot = -15.3471351629436 | etot = -14.617514034964 +566000 ekin = 0.282736992095915 | erot = 0.465680158920146 | epot = -15.3659311859852 | etot = -14.6175140349691 +567000 ekin = 0.276599956454237 | erot = 0.489770841523137 | epot = -15.3838848329439 | etot = -14.6175140349665 +568000 ekin = 0.272165052790849 | erot = 0.51134888782089 | epot = -15.4010279755719 | etot = -14.6175140349602 +569000 ekin = 0.269753809413351 | erot = 0.530185258477429 | epot = -15.4174531028455 | etot = -14.6175140349547 +570000 ekin = 0.269583567607364 | erot = 0.546150320474836 | epot = -15.4332479230362 | etot = -14.617514034954 +571000 ekin = 0.271731068577875 | erot = 0.559192265325752 | epot = -15.4484373688642 | etot = -14.6175140349606 +572000 ekin = 0.276116495687091 | erot = 0.569316321634121 | epot = -15.4629468522959 | etot = -14.6175140349747 +573000 ekin = 0.282512256444534 | erot = 0.576569321998237 | epot = -15.4765956134374 | etot = -14.6175140349946 +574000 ekin = 0.290574483947443 | erot = 0.58103049076154 | epot = -15.4891190097262 | etot = -14.6175140350172 +575000 ekin = 0.299890113326593 | erot = 0.582808418137594 | epot = -15.5002125665028 | etot = -14.6175140350386 +576000 ekin = 0.310029076130859 | erot = 0.582041678954832 | epot = -15.5095847901412 | etot = -14.6175140350555 +577000 ekin = 0.320591144135675 | erot = 0.578899817193377 | epot = -15.5170049963946 | etot = -14.6175140350655 +578000 ekin = 0.331239680817734 | erot = 0.573581904321388 | epot = -15.5223356202072 | etot = -14.6175140350681 +579000 ekin = 0.341718767395713 | erot = 0.566311213814816 | epot = -15.5255440162742 | etot = -14.6175140350637 +580000 ekin = 0.351854361646192 | erot = 0.557326170820746 | epot = -15.5266945675209 | etot = -14.617514035054 +581000 ekin = 0.361543170719959 | erot = 0.546869043111512 | epot = -15.5259262488727 | etot = -14.6175140350412 +582000 ekin = 0.370734291431731 | erot = 0.535174473618127 | epot = -15.5234228000774 | etot = -14.6175140350275 +583000 ekin = 0.37940854514636 | erot = 0.522459863754317 | epot = -15.5193824439152 | etot = -14.6175140350145 +584000 ekin = 0.387559338332064 | erot = 0.50891899993969 | epot = -15.5139923732753 | etot = -14.6175140350036 +585000 ekin = 0.395177418309436 | erot = 0.494719483694829 | epot = -15.5074109369994 | etot = -14.6175140349952 +586000 ekin = 0.402240533516594 | erot = 0.480003760424791 | epot = -15.4997583289309 | etot = -14.6175140349895 +587000 ekin = 0.408707997145263 | erot = 0.464893014294175 | epot = -15.4911150464257 | etot = -14.6175140349862 +588000 ekin = 0.41451954577295 | erot = 0.449492951760516 | epot = -15.4815265325182 | etot = -14.6175140349847 +589000 ekin = 0.419597612555334 | erot = 0.43390048790532 | epot = -15.4710121354448 | etot = -14.6175140349841 +590000 ekin = 0.423852083806567 | erot = 0.418210489542958 | epot = -15.4595766083332 | etot = -14.6175140349837 +591000 ekin = 0.427186671517479 | erot = 0.402521929657892 | epot = -15.447222636158 | etot = -14.6175140349826 +592000 ekin = 0.429506137373686 | erot = 0.386943005728737 | epot = -15.4339631780827 | etot = -14.6175140349802 +593000 ekin = 0.430723706116615 | erot = 0.371594936609099 | epot = -15.4198326777017 | etot = -14.617514034976 +594000 ekin = 0.430768094953839 | erot = 0.356614269836478 | epot = -15.4048963997596 | etot = -14.6175140349693 +595000 ekin = 0.42958966483036 | erot = 0.34215360916983 | epot = -15.3892573089602 | etot = -14.61751403496 +596000 ekin = 0.427165296133674 | erot = 0.328380718540701 | epot = -15.3730600496226 | etot = -14.6175140349482 +597000 ekin = 0.423501658500188 | erot = 0.315475989401846 | epot = -15.3564916828361 | etot = -14.617514034934 +598000 ekin = 0.418636501255824 | erot = 0.30362835958022 | epot = -15.3397788957539 | etot = -14.6175140349178 +599000 ekin = 0.412638207582771 | erot = 0.293029673722298 | epot = -15.3231819162053 | etot = -14.6175140349002 +600000 ekin = 0.405603414753992 | erot = 0.283867637225037 | epot = -15.306985086861 | etot = -14.6175140348819 +601000 ekin = 0.397652939448924 | erot = 0.27631757335997 | epot = -15.2914845476729 | etot = -14.617514034864 +602000 ekin = 0.388926339151977 | erot = 0.270533300127966 | epot = -15.2769736741272 | etot = -14.6175140348472 +603000 ekin = 0.379575547711323 | erot = 0.266637582798157 | epot = -15.2637271653422 | etot = -14.6175140348327 +604000 ekin = 0.369758112224678 | erot = 0.264712769809213 | epot = -15.2519849168553 | etot = -14.6175140348214 +605000 ekin = 0.359630614964776 | erot = 0.264792359550131 | epot = -15.241937009329 | etot = -14.617514034814 +606000 ekin = 0.349342882571482 | erot = 0.266854337886994 | epot = -15.2337112552696 | etot = -14.6175140348111 +607000 ekin = 0.339033558751721 | erot = 0.270817131627805 | epot = -15.2273647251923 | etot = -14.6175140348128 +608000 ekin = 0.328827538259558 | erot = 0.276538908097645 | epot = -15.2228804811762 | etot = -14.617514034819 +609000 ekin = 0.318835621087791 | erot = 0.283820700144912 | epot = -15.2201703560617 | etot = -14.617514034829 +610000 ekin = 0.309156542568471 | erot = 0.292413461056483 | epot = -15.2190840384669 | etot = -14.617514034842 +611000 ekin = 0.29988127210835 | erot = 0.302028697870677 | epot = -15.2194240048356 | etot = -14.6175140348566 +612000 ekin = 0.291099167856382 | erot = 0.312351863790435 | epot = -15.2209650665183 | etot = -14.6175140348715 +613000 ekin = 0.282905257831731 | erot = 0.323057294042835 | epot = -15.2234765867597 | etot = -14.6175140348851 +614000 ekin = 0.275407632339994 | erot = 0.333823223653581 | epot = -15.2267448908899 | etot = -14.6175140348963 +615000 ekin = 0.268733725567278 | erot = 0.344345386321387 | epot = -15.2305931467927 | etot = -14.617514034904 +616000 ekin = 0.263034181136557 | erot = 0.35434787992739 | epot = -15.2348960959719 | etot = -14.6175140349079 +617000 ekin = 0.258483071857821 | erot = 0.363590372787447 | epot = -15.2395874795532 | etot = -14.6175140349079 +618000 ekin = 0.255273496413574 | erot = 0.371871254538827 | epot = -15.2446587858571 | etot = -14.6175140349047 +619000 ekin = 0.253608004174632 | erot = 0.37902692128715 | epot = -15.2501489603613 | etot = -14.6175140348995 +620000 ekin = 0.253683881421992 | erot = 0.384927934513618 | epot = -15.2561258508295 | etot = -14.6175140348939 +621000 ekin = 0.255674023709804 | erot = 0.389473226071993 | epot = -15.2626612846714 | etot = -14.6175140348896 +622000 ekin = 0.25970485336757 | erot = 0.392583779639758 | epot = -15.2698026678959 | etot = -14.6175140348885 +623000 ekin = 0.265833429999403 | erot = 0.394197274405735 | epot = -15.2775447392974 | etot = -14.6175140348923 +624000 ekin = 0.274026439188228 | erot = 0.394265031624551 | epot = -15.2858055057147 | etot = -14.6175140349019 +625000 ekin = 0.284144015738384 | erot = 0.392752285176118 | epot = -15.2944103358322 | etot = -14.6175140349177 +626000 ekin = 0.295931256226139 | erot = 0.389642344380343 | epot = -15.3030876355457 | etot = -14.6175140349392 +627000 ekin = 0.309019727829663 | erot = 0.38494467650416 | epot = -15.3114784392987 | etot = -14.6175140349649 +628000 ekin = 0.322940275279064 | erot = 0.378706350959343 | epot = -15.3191606612307 | etot = -14.6175140349923 +629000 ekin = 0.337147043698277 | erot = 0.37102569897414 | epot = -15.3256867776908 | etot = -14.6175140350184 +630000 ekin = 0.351051052994981 | erot = 0.362066500826367 | epot = -15.3306315888613 | etot = -14.6175140350399 +631000 ekin = 0.364060148819096 | erot = 0.352070586245494 | epot = -15.333644770118 | etot = -14.6175140350534 +632000 ekin = 0.375621025661737 | erot = 0.341366514680777 | epot = -15.3345015753988 | etot = -14.6175140350563 +633000 ekin = 0.385258541224816 | erot = 0.33037209230534 | epot = -15.3331446685769 | etot = -14.6175140350467 +634000 ekin = 0.392607865616762 | erot = 0.31958895649352 | epot = -15.3297108571345 | etot = -14.6175140350242 +635000 ekin = 0.39743609727868 | erot = 0.309588318033271 | epot = -15.3245384503017 | etot = -14.6175140349897 +636000 ekin = 0.399651602685353 | erot = 0.30098809437835 | epot = -15.318153732009 | etot = -14.6175140349453 +637000 ekin = 0.399301141333129 | erot = 0.294422893568983 | epot = -15.3112380697961 | etot = -14.617514034894 +638000 ekin = 0.396556439147407 | erot = 0.290509369489655 | epot = -15.3045798434767 | etot = -14.6175140348397 +639000 ekin = 0.391692975513997 | erot = 0.289810143797434 | epot = -15.2990171540975 | etot = -14.617514034786 +640000 ekin = 0.385064212934161 | erot = 0.292799653113688 | epot = -15.2953779007847 | etot = -14.6175140347369 +641000 ekin = 0.377074355551302 | erot = 0.299834934663062 | epot = -15.2944233249094 | etot = -14.6175140346951 +642000 ekin = 0.368152133961515 | erot = 0.311133625026309 | epot = -15.2967997936509 | etot = -14.6175140346631 +643000 ekin = 0.358727298275111 | erot = 0.326760494743868 | epot = -15.3030018276614 | etot = -14.6175140346424 +644000 ekin = 0.349210670243499 | erot = 0.346622862554325 | epot = -15.3133475674317 | etot = -14.6175140346339 +645000 ekin = 0.339977915474886 | erot = 0.370474376280189 | epot = -15.3279663263927 | etot = -14.6175140346376 +646000 ekin = 0.331356734049287 | erot = 0.397926004729598 | epot = -15.3467967734319 | etot = -14.617514034653 +647000 ekin = 0.323616951062021 | erot = 0.428462692622343 | epot = -15.3695936783637 | etot = -14.6175140346794 +648000 ekin = 0.316962984679749 | erot = 0.461463981264525 | epot = -15.3959410006599 | etot = -14.6175140347156 +649000 ekin = 0.311528303721769 | erot = 0.496226945506609 | epot = -15.4252692839889 | etot = -14.6175140347605 +650000 ekin = 0.307371814502051 | erot = 0.53199011331203 | epot = -15.4568759626267 | etot = -14.6175140348127 +651000 ekin = 0.304476169211528 | erot = 0.567957247023637 | epot = -15.4899474511057 | etot = -14.6175140348705 +652000 ekin = 0.302748327843063 | erot = 0.603320352539344 | epot = -15.523582715315 | etot = -14.6175140349325 +653000 ekin = 0.302022769689561 | erot = 0.637281675063983 | epot = -15.5568184797505 | etot = -14.617514034997 +654000 ekin = 0.302067723594154 | erot = 0.669074745116258 | epot = -15.5886565037723 | etot = -14.6175140350619 +655000 ekin = 0.302594671774775 | erot = 0.697984728110365 | epot = -15.6180934350103 | etot = -14.6175140351252 +656000 ekin = 0.303271161273661 | erot = 0.723368330432067 | epot = -15.6441535268902 | etot = -14.6175140351845 +657000 ekin = 0.303736663270792 | erot = 0.744673311812443 | epot = -15.6659240103206 | etot = -14.6175140352373 +658000 ekin = 0.303620889262384 | erot = 0.761457272710392 | epot = -15.6825921972542 | etot = -14.6175140352814 +659000 ekin = 0.302563666907984 | erot = 0.773404945481054 | epot = -15.6934826477032 | etot = -14.6175140353142 +660000 ekin = 0.300235395695091 | erot = 0.780343280385843 | epot = -15.698092711415 | etot = -14.6175140353341 +661000 ekin = 0.296355710531902 | erot = 0.782250083093143 | epot = -15.6961198289647 | etot = -14.6175140353397 +662000 ekin = 0.290710478297184 | erot = 0.779257959177687 | epot = -15.6874824728051 | etot = -14.6175140353302 +663000 ekin = 0.283165147463639 | erot = 0.77165065199169 | epot = -15.6723298347614 | etot = -14.6175140353061 +664000 ekin = 0.273673427176448 | erot = 0.759850562455872 | epot = -15.6510380249006 | etot = -14.6175140352683 +665000 ekin = 0.262280913452385 | erot = 0.744397727319057 | epot = -15.6241926759903 | etot = -14.6175140352189 +666000 ekin = 0.249123647022483 | erot = 0.7259212317447 | epot = -15.5925589139278 | etot = -14.6175140351606 +667000 ekin = 0.234422061210147 | erot = 0.705104954965032 | epot = -15.5570410512716 | etot = -14.6175140350964 +668000 ekin = 0.218471158369324 | erot = 0.682650243124776 | epot = -15.5186354365237 | etot = -14.6175140350296 +669000 ekin = 0.201627981911843 | erot = 0.659238455806553 | epot = -15.4783804726815 | etot = -14.6175140349632 +670000 ekin = 0.184297501939065 | erot = 0.635496303880898 | epot = -15.43730784072 | etot = -14.6175140349001 +671000 ekin = 0.166917915805004 | erot = 0.611966525748027 | epot = -15.3963984763956 | etot = -14.6175140348426 +672000 ekin = 0.149946120674196 | erot = 0.589085832361493 | epot = -15.3565459878282 | etot = -14.6175140347926 +673000 ekin = 0.133843801904582 | erot = 0.567171306812613 | epot = -15.318529143468 | etot = -14.6175140347508 +674000 ekin = 0.119064262674576 | erot = 0.546415679820867 | epot = -15.2829939772136 | etot = -14.6175140347181 +675000 ekin = 0.106039855017085 | erot = 0.526891195482506 | epot = -15.250445085194 | etot = -14.6175140346944 +676000 ekin = 0.0951697078773878 | erot = 0.508561175678473 | epot = -15.2212449182352 | etot = -14.6175140346793 +677000 ekin = 0.086807451986192 | erot = 0.491297978909966 | epot = -15.1956194655683 | etot = -14.6175140346722 +678000 ekin = 0.0812485969712828 | erot = 0.474905301099178 | epot = -15.1736679327427 | etot = -14.6175140346722 +679000 ekin = 0.0787177619800211 | erot = 0.459143233464763 | epot = -15.1553750301234 | etot = -14.6175140346787 +680000 ekin = 0.0793562024648552 | erot = 0.443753980649329 | epot = -15.140624217805 | etot = -14.6175140346908 +681000 ekin = 0.0832104900789999 | erot = 0.428486254341784 | epot = -15.1292107791285 | etot = -14.6175140347077 +682000 ekin = 0.0902236865225188 | erot = 0.413116880933304 | epot = -15.1208546021847 | etot = -14.6175140347289 +683000 ekin = 0.100230543462408 | erot = 0.397468585264377 | epot = -15.11521316348 | etot = -14.6175140347533 +684000 ekin = 0.112958164258869 | erot = 0.381423459018597 | epot = -15.1118956580574 | etot = -14.6175140347799 +685000 ekin = 0.128033094046148 | erot = 0.364932120277307 | epot = -15.1104792491311 | etot = -14.6175140348076 +686000 ekin = 0.144995008361601 | erot = 0.348018922992647 | epot = -15.1105279661894 | etot = -14.6175140348351 +687000 ekin = 0.163316207854767 | erot = 0.330783730221022 | epot = -15.1116139729365 | etot = -14.6175140348607 +688000 ekin = 0.182425234215551 | erot = 0.313400732953855 | epot = -15.1133400020525 | etot = -14.6175140348831 +689000 ekin = 0.201732335852577 | erot = 0.296114640201443 | epot = -15.1153610109551 | etot = -14.6175140349011 +690000 ekin = 0.220654383891154 | erot = 0.279234374240434 | epot = -15.1174027930453 | etot = -14.6175140349137 +691000 ekin = 0.23863718992453 | erot = 0.263124260136862 | epot = -15.1192754849819 | etot = -14.6175140349205 +692000 ekin = 0.255173895596428 | erot = 0.248192653897472 | epot = -15.1208805844156 | etot = -14.6175140349217 +693000 ekin = 0.269818995118043 | erot = 0.234878024009109 | epot = -15.1222110540446 | etot = -14.6175140349175 +694000 ekin = 0.282198402189113 | erot = 0.223632668706427 | epot = -15.1233451058044 | etot = -14.6175140349089 +695000 ekin = 0.292016609393231 | erot = 0.214904477348993 | epot = -15.124435121639 | etot = -14.6175140348968 +696000 ekin = 0.299062308191112 | erot = 0.209117382947945 | epot = -15.1256937260212 | etot = -14.6175140348821 +697000 ekin = 0.30321380997214 | erot = 0.206651361568493 | epot = -15.1273792064064 | etot = -14.6175140348658 +698000 ekin = 0.30444525619219 | erot = 0.207822979229873 | epot = -15.1297822702705 | etot = -14.6175140348484 +699000 ekin = 0.302833983904948 | erot = 0.212867544425277 | epot = -15.1332155631607 | etot = -14.6175140348305 +700000 ekin = 0.29856859634332 | erot = 0.221923881123336 | epot = -15.1380065122785 | etot = -14.6175140348118 +701000 ekin = 0.291956369738242 | erot = 0.235022588976831 | epot = -15.1444929935074 | etot = -14.6175140347924 +702000 ekin = 0.283427734153835 | erot = 0.252078414121472 | epot = -15.153020183048 | etot = -14.6175140347727 +703000 ekin = 0.273534855576746 | erot = 0.272887068861365 | epot = -15.1639359591909 | etot = -14.6175140347528 +704000 ekin = 0.262941046164233 | erot = 0.297126498876432 | epot = -15.1775815797744 | etot = -14.6175140347337 +705000 ekin = 0.252398060444365 | erot = 0.324362359960393 | epot = -15.194274455122 | etot = -14.6175140347173 +706000 ekin = 0.242709489752073 | erot = 0.354057349893491 | epot = -15.2142808743513 | etot = -14.6175140347058 +707000 ekin = 0.234680465258637 | erot = 0.385584073394242 | epot = -15.2377785733552 | etot = -14.6175140347023 +708000 ekin = 0.229056562326157 | erot = 0.418241319394871 | epot = -15.264811916431 | etot = -14.61751403471 +709000 ekin = 0.226457657533258 | erot = 0.451273895783649 | epot = -15.2952455880485 | etot = -14.6175140347316 +710000 ekin = 0.227314828595311 | erot = 0.483896330830945 | epot = -15.3287251941949 | etot = -14.6175140347687 +711000 ekin = 0.231819479497128 | erot = 0.515320742171203 | epot = -15.3646542564898 | etot = -14.6175140348215 +712000 ekin = 0.239893150548963 | erot = 0.544788749312711 | epot = -15.4021959347498 | etot = -14.6175140348881 +713000 ekin = 0.251183758823288 | erot = 0.571606341188824 | epot = -15.4403041349766 | etot = -14.6175140349645 +714000 ekin = 0.265090036185525 | erot = 0.595179886372787 | epot = -15.4777839576035 | etot = -14.6175140350452 +715000 ekin = 0.280811306968559 | erot = 0.615050345044272 | epot = -15.5133756871366 | etot = -14.6175140351238 +716000 ekin = 0.297415784950407 | erot = 0.630922165703626 | epot = -15.5458519858478 | etot = -14.6175140351937 +717000 ekin = 0.313918116237917 | erot = 0.642683345316706 | epot = -15.5741154968041 | etot = -14.6175140352494 +718000 ekin = 0.329356373327112 | erot = 0.650413757300199 | epot = -15.597284165914 | etot = -14.6175140352867 +719000 ekin = 0.342860093484457 | erot = 0.654380316354483 | epot = -15.6147544451421 | etot = -14.6175140353032 +720000 ekin = 0.353703497403049 | erot = 0.655019233384572 | epot = -15.6262367660863 | etot = -14.6175140352987 +721000 ekin = 0.361340844905849 | erot = 0.652906431496321 | epot = -15.6317613116767 | etot = -14.6175140352745 +722000 ekin = 0.365423978941575 | erot = 0.648719378780931 | epot = -15.6316573929561 | etot = -14.6175140352336 +723000 ekin = 0.365803989072306 | erot = 0.643193727890481 | epot = -15.6265117521426 | etot = -14.6175140351798 +724000 ekin = 0.362520178745313 | erot = 0.637078359573022 | epot = -15.6171125734355 | etot = -14.6175140351172 +725000 ekin = 0.355779938480366 | erot = 0.631092082280502 | epot = -15.604386055811 | etot = -14.6175140350501 +726000 ekin = 0.345932952941823 | erot = 0.625884613514235 | epot = -15.5893316014386 | etot = -14.6175140349825 +727000 ekin = 0.333442641405672 | erot = 0.622003743386422 | epot = -15.5729604197101 | etot = -14.617514034918 +728000 ekin = 0.318857050497248 | erot = 0.619869891937897 | epot = -15.5562409772948 | etot = -14.6175140348596 +729000 ekin = 0.302780724957378 | erot = 0.619758691690217 | epot = -15.5400534514572 | etot = -14.6175140348096 +730000 ekin = 0.285848455041315 | erot = 0.621791770570811 | epot = -15.5251542603814 | etot = -14.6175140347693 +731000 ekin = 0.268701272205162 | erot = 0.625935552811657 | epot = -15.5121508597566 | etot = -14.6175140347398 +732000 ekin = 0.251964649664151 | erot = 0.632007594592174 | epot = -15.5014862789777 | etot = -14.6175140347214 +733000 ekin = 0.236228569496788 | erot = 0.639689689353094 | epot = -15.4934322935639 | etot = -14.617514034714 +734000 ekin = 0.222028960746823 | erot = 0.648546698715163 | epot = -15.4880896941794 | etot = -14.6175140347174 +735000 ekin = 0.209830023527925 | erot = 0.658049804517654 | epot = -15.4853938627761 | etot = -14.6175140347305 +736000 ekin = 0.200007166761159 | erot = 0.667602683399479 | epot = -15.4851238849135 | etot = -14.6175140347528 +737000 ekin = 0.192830719625055 | erot = 0.676569044421098 | epot = -15.4869137988298 | etot = -14.6175140347837 +738000 ekin = 0.188451200585547 | erot = 0.684300102137718 | epot = -15.4902653375453 | etot = -14.6175140348221 +739000 ekin = 0.186887639936592 | erot = 0.690160900651566 | epot = -15.4945625754552 | etot = -14.617514034867 +740000 ekin = 0.188021068410451 | erot = 0.693554915034906 | epot = -15.4990900183625 | etot = -14.6175140349172 +741000 ekin = 0.191595568995028 | erot = 0.693946922730537 | epot = -15.5030565266959 | etot = -14.6175140349703 +742000 ekin = 0.197228843628196 | erot = 0.690884208638673 | epot = -15.5056270872912 | etot = -14.6175140350243 +743000 ekin = 0.20443350363757 | erot = 0.684016821527744 | epot = -15.5059643602408 | etot = -14.6175140350755 +744000 ekin = 0.212648433381533 | erot = 0.673116668202852 | epot = -15.5032791367049 | etot = -14.6175140351205 +745000 ekin = 0.221277722248148 | erot = 0.658094727365387 | epot = -15.496886484769 | etot = -14.6175140351555 +746000 ekin = 0.229733012317517 | erot = 0.639014583781424 | epot = -15.4862616312763 | etot = -14.6175140351774 +747000 ekin = 0.2374740441444 | erot = 0.61610009667291 | epot = -15.4710881760011 | etot = -14.6175140351838 +748000 ekin = 0.244042266762953 | erot = 0.5897348727874 | epot = -15.4512911747243 | etot = -14.617514035174 +749000 ekin = 0.249083597953252 | erot = 0.56045151840338 | epot = -15.4270491515053 | etot = -14.6175140351487 +750000 ekin = 0.252358330147216 | erot = 0.528910066811307 | epot = -15.3987824320685 | etot = -14.61751403511 +751000 ekin = 0.253738423481735 | erot = 0.495866496254582 | epot = -15.3671189547979 | etot = -14.6175140350616 +752000 ekin = 0.253194394015788 | erot = 0.462133785333153 | epot = -15.3328422143563 | etot = -14.6175140350074 +753000 ekin = 0.250775308155868 | erot = 0.428539072350445 | epot = -15.2968284154581 | etot = -14.6175140349518 +754000 ekin = 0.246585878547032 | erot = 0.395880964578706 | epot = -15.2599808780244 | etot = -14.6175140348987 +755000 ekin = 0.240764398113293 | erot = 0.364890850085532 | epot = -15.2231692830501 | etot = -14.6175140348513 +756000 ekin = 0.23346447104344 | erot = 0.33620133003045 | epot = -15.1871798358857 | etot = -14.6175140348118 +757000 ekin = 0.224842467158388 | erot = 0.310323830730243 | epot = -15.1526803326699 | etot = -14.6175140347812 +758000 ekin = 0.215051562421428 | erot = 0.287636293952697 | epot = -15.120201891134 | etot = -14.6175140347599 +759000 ekin = 0.204242275876271 | erot = 0.268380753509857 | epot = -15.0901370641325 | etot = -14.6175140347464 +760000 ekin = 0.192568636065474 | erot = 0.252669695562842 | epot = -15.0627523663679 | etot = -14.6175140347396 +761000 ekin = 0.180198520175885 | erot = 0.240499428911651 | epot = -15.0382119838247 | etot = -14.6175140347371 +762000 ekin = 0.167326299029189 | erot = 0.231768292967787 | epot = -15.0166086267339 | etot = -14.6175140347369 +763000 ekin = 0.154185685901956 | erot = 0.226297425416186 | epot = -14.9979971460548 | etot = -14.6175140347367 +764000 ekin = 0.141060632748886 | erot = 0.22385200334864 | epot = -14.9824266708322 | etot = -14.6175140347347 +765000 ekin = 0.128292252296688 | erot = 0.224161332818126 | epot = -14.9699676198447 | etot = -14.6175140347299 +766000 ekin = 0.116280064488099 | erot = 0.226936813023238 | epot = -14.9607309122326 | etot = -14.6175140347212 +767000 ekin = 0.105476340626969 | erot = 0.23188750727037 | epot = -14.9548778826066 | etot = -14.6175140347093 +768000 ekin = 0.096372890945937 | erot = 0.238733641345087 | epot = -14.9526205669852 | etot = -14.6175140346942 +769000 ekin = 0.0894802427431669 | erot = 0.247218655409017 | epot = -14.9542129328294 | etot = -14.6175140346772 +770000 ekin = 0.0852997361093092 | erot = 0.257120353608164 | epot = -14.9599341243773 | etot = -14.6175140346598 +771000 ekin = 0.0842896183570599 | erot = 0.268261228608835 | epot = -14.9700648816096 | etot = -14.6175140346437 +772000 ekin = 0.0868267987477346 | erot = 0.280517313419992 | epot = -14.9848581467989 | etot = -14.6175140346312 +773000 ekin = 0.0931666172480206 | erot = 0.293824162660099 | epot = -15.0045048145328 | etot = -14.6175140346247 +774000 ekin = 0.103403843826671 | erot = 0.308178073397117 | epot = -15.0290959518505 | etot = -14.6175140346267 +775000 ekin = 0.117439110045757 | erot = 0.323630675217794 | epot = -15.0585838199034 | etot = -14.6175140346399 +776000 ekin = 0.134955835365974 | erot = 0.340275613675452 | epot = -15.0927454837074 | etot = -14.617514034666 +777000 ekin = 0.155413263635979 | erot = 0.358227842745911 | epot = -15.131155141088 | etot = -14.6175140347061 +778000 ekin = 0.178060391221893 | erot = 0.377596905889502 | epot = -15.1731713318714 | etot = -14.61751403476 +779000 ekin = 0.201973803865647 | erot = 0.398457850158065 | epot = -15.2179456888489 | etot = -14.6175140348252 +780000 ekin = 0.226119091214274 | erot = 0.420824480238275 | epot = -15.2644576063504 | etot = -14.6175140348978 +781000 ekin = 0.249431156626622 | erot = 0.444629585314847 | epot = -15.3115747769139 | etot = -14.6175140349725 +782000 ekin = 0.270904470269639 | erot = 0.469715692367583 | epot = -15.3581341976801 | etot = -14.6175140350429 +783000 ekin = 0.289681273783551 | erot = 0.495837747641305 | epot = -15.4030330565279 | etot = -14.617514035103 +784000 ekin = 0.305125009986927 | erot = 0.522676532161923 | epot = -15.445315577297 | etot = -14.6175140351482 +785000 ekin = 0.316868262923434 | erot = 0.549859353707342 | epot = -15.4842416518064 | etot = -14.6175140351756 +786000 ekin = 0.324828845889255 | erot = 0.576983310023016 | epot = -15.5193261910972 | etot = -14.6175140351849 +787000 ekin = 0.32919323387939 | erot = 0.603636505801527 | epot = -15.550343774859 | etot = -14.617514035178 +788000 ekin = 0.330371864852151 | erot = 0.629413875563716 | epot = -15.5772997755747 | etot = -14.6175140351588 +789000 ekin = 0.328934711355495 | erot = 0.653926193132344 | epot = -15.6003749396201 | etot = -14.6175140351322 +790000 ekin = 0.32553731947378 | erot = 0.676802790006292 | epot = -15.6198541445837 | etot = -14.6175140351036 +791000 ekin = 0.320847267933459 | erot = 0.697689943211487 | epot = -15.6360512462227 | etot = -14.6175140350777 +792000 ekin = 0.315479253539392 | erot = 0.716247584423973 | epot = -15.6492408730215 | etot = -14.6175140350582 +793000 ekin = 0.309944490982107 | erot = 0.732146955922051 | epot = -15.6596054819516 | etot = -14.6175140350474 +794000 ekin = 0.304617480925239 | erot = 0.745071299199412 | epot = -15.6672028151708 | etot = -14.6175140350461 +795000 ekin = 0.299720880976423 | erot = 0.754720862084592 | epot = -15.6719557781148 | etot = -14.6175140350538 +796000 ekin = 0.295327396180162 | erot = 0.760822658787278 | epot = -15.6736640900359 | etot = -14.6175140350685 +797000 ekin = 0.291376296851675 | erot = 0.763144639344914 | epot = -15.6720349712838 | etot = -14.6175140350872 +798000 ekin = 0.287701294703707 | erot = 0.761513269131401 | epot = -15.6667285989415 | etot = -14.6175140351064 +799000 ekin = 0.284065979572222 | erot = 0.755832991336602 | epot = -15.6574130060307 | etot = -14.6175140351219 +800000 ekin = 0.280202790631652 | erot = 0.746105645863969 | epot = -15.643822471626 | etot = -14.6175140351304 +801000 ekin = 0.275851560112653 | erot = 0.732447665813264 | epot = -15.6258132610543 | etot = -14.6175140351284 +802000 ekin = 0.270794034433592 | erot = 0.715102809072576 | epot = -15.6034108786199 | etot = -14.6175140351138 +803000 ekin = 0.264881442636465 | erot = 0.694448356025832 | epot = -15.5768438337476 | etot = -14.6175140350853 +804000 ekin = 0.258053167891105 | erot = 0.670993199746629 | epot = -15.5465604026808 | etot = -14.6175140350431 +805000 ekin = 0.250345604728483 | erot = 0.645366941436678 | epot = -15.5132265811537 | etot = -14.6175140349885 +806000 ekin = 0.241890533712104 | erot = 0.618299214644422 | epot = -15.4777037832803 | etot = -14.6175140349238 +807000 ekin = 0.232905655207387 | erot = 0.590591287736433 | epot = -15.4410109777962 | etot = -14.6175140348524 +808000 ekin = 0.223678061733381 | erot = 0.563080896688429 | epot = -15.4042729931999 | etot = -14.6175140347781 +809000 ekin = 0.21454303523099 | erot = 0.536602758842029 | epot = -15.3686598287782 | etot = -14.6175140347052 +810000 ekin = 0.205860488313568 | erot = 0.511947500023896 | epot = -15.3353220229752 | etot = -14.6175140346377 +811000 ekin = 0.197991117806005 | erot = 0.489821758278081 | epot = -15.3053269106636 | etot = -14.6175140345795 +812000 ekin = 0.191273941671524 | erot = 0.470812030934271 | epot = -15.2796000071394 | etot = -14.6175140345336 +813000 ekin = 0.186006404369985 | erot = 0.455354451062655 | epot = -15.2588748899354 | etot = -14.6175140345028 +814000 ekin = 0.18242775371236 | erot = 0.443712201374096 | epot = -15.243653989575 | etot = -14.6175140344885 +815000 ekin = 0.18070598633541 | erot = 0.435961774091635 | epot = -15.234181794919 | etot = -14.617514034492 +816000 ekin = 0.180928373605491 | erot = 0.431988814113314 | epot = -15.2304312222317 | etot = -14.6175140345129 +817000 ekin = 0.183095431234183 | erot = 0.431493858263631 | epot = -15.2321033240486 | etot = -14.6175140345508 +818000 ekin = 0.187118173911464 | erot = 0.434007895069526 | epot = -15.2386401035849 | etot = -14.6175140346039 +819000 ekin = 0.192818568053382 | erot = 0.43891728680681 | epot = -15.2492498895299 | etot = -14.6175140346697 +820000 ekin = 0.199933211814771 | erot = 0.445497181488374 | epot = -15.2629444280486 | etot = -14.6175140347454 +821000 ekin = 0.208120374081953 | erot = 0.452952069483821 | epot = -15.2785864783931 | etot = -14.6175140348273 +822000 ekin = 0.216970558498266 | erot = 0.460461605795678 | epot = -15.2949461992054 | etot = -14.6175140349114 +823000 ekin = 0.226020685629111 | erot = 0.467229260922827 | epot = -15.3107639815452 | etot = -14.6175140349933 +824000 ekin = 0.234771793851546 | erot = 0.47253085821668 | epot = -15.3248166871369 | etot = -14.6175140350687 +825000 ekin = 0.242709867661982 | erot = 0.475759712130438 | epot = -15.3359836149259 | etot = -14.6175140351335 +826000 ekin = 0.249329060857897 | erot = 0.476465014357233 | epot = -15.3433081103994 | etot = -14.6175140351843 +827000 ekin = 0.254156259485738 | erot = 0.474380409602743 | epot = -15.3460507043067 | etot = -14.6175140352182 +828000 ekin = 0.256775693170762 | erot = 0.46944038334452 | epot = -15.3437301117489 | etot = -14.6175140352336 +829000 ekin = 0.256852201216661 | erot = 0.461783092102077 | epot = -15.3361493285486 | etot = -14.6175140352298 +830000 ekin = 0.254151805816721 | erot = 0.451739467041208 | epot = -15.3234053080651 | etot = -14.6175140352072 +831000 ekin = 0.248558416433736 | erot = 0.439809632306583 | epot = -15.3058820839077 | etot = -14.6175140351674 +832000 ekin = 0.240085737091052 | erot = 0.426628719076076 | epot = -15.2842284912797 | etot = -14.6175140351126 +833000 ekin = 0.228883712687689 | erot = 0.412924890624274 | epot = -15.2593226383577 | etot = -14.6175140350458 +834000 ekin = 0.215239082681844 | erot = 0.399472764056086 | epot = -15.2322258817084 | etot = -14.6175140349705 +835000 ekin = 0.199569787294665 | erot = 0.387045440519586 | epot = -15.2041292627046 | etot = -14.6175140348904 +836000 ekin = 0.182413100763772 | erot = 0.376368114580803 | epot = -15.1762952501539 | etot = -14.6175140348093 +837000 ekin = 0.164407483062706 | erot = 0.36807582593139 | epot = -15.1499973437255 | etot = -14.6175140347314 +838000 ekin = 0.146268295773454 | erot = 0.362677435797712 | epot = -15.1264597662312 | etot = -14.61751403466 +839000 ekin = 0.128757768426402 | erot = 0.360527421580405 | epot = -15.1067992246056 | etot = -14.6175140345988 +840000 ekin = 0.112649960717984 | erot = 0.361806618656283 | epot = -15.091970613925 | etot = -14.6175140345507 +841000 ekin = 0.0986919456677054 | erot = 0.366512603929069 | epot = -15.0827185841153 | etot = -14.6175140345185 +842000 ekin = 0.0875630029234395 | erot = 0.374460003555771 | epot = -15.0795370409833 | etot = -14.6175140345041 +843000 ekin = 0.0798341847686366 | erot = 0.385290606532762 | epot = -15.08263882581 | etot = -14.6175140345086 +844000 ekin = 0.0759310929907395 | erot = 0.3984927697296 | epot = -15.0919378972525 | etot = -14.6175140345322 +845000 ekin = 0.076102961020352 | erot = 0.413429207168617 | epot = -15.107046202763 | etot = -14.617514034574 +846000 ekin = 0.0804010613290235 | erot = 0.429371869322532 | epot = -15.1272869652841 | etot = -14.6175140346325 +847000 ekin = 0.0886689809240873 | erot = 0.445542241998021 | epot = -15.1517252576265 | etot = -14.6175140347044 +848000 ekin = 0.100546421459775 | erot = 0.461155038711605 | epot = -15.179215494957 | etot = -14.6175140347856 +849000 ekin = 0.115486960010826 | erot = 0.475462945351677 | epot = -15.208463940234 | etot = -14.6175140348715 +850000 ekin = 0.132788806695669 | erot = 0.487799837752774 | epot = -15.2381026794056 | etot = -14.6175140349571 +851000 ekin = 0.15163622778631 | erot = 0.49761978557658 | epot = -15.2667700483999 | etot = -14.617514035037 +852000 ekin = 0.171148194576093 | erot = 0.5045292426275 | epot = -15.2931914723102 | etot = -14.6175140351066 +853000 ekin = 0.19043015939564 | erot = 0.508310157461229 | epot = -15.3162543520185 | etot = -14.6175140351617 +854000 ekin = 0.208624756899512 | erot = 0.508932337650922 | epot = -15.3350711297497 | etot = -14.6175140351993 +855000 ekin = 0.224957674812131 | erot = 0.506554231539335 | epot = -15.3490259415692 | etot = -14.6175140352178 +856000 ekin = 0.238775816538934 | erot = 0.501512259960027 | epot = -15.3578021117156 | etot = -14.6175140352166 +857000 ekin = 0.249575992233887 | erot = 0.494299801981668 | epot = -15.3613898294122 | etot = -14.6175140351967 +858000 ekin = 0.257023502073677 | erot = 0.485537766821904 | epot = -15.3600753040553 | etot = -14.6175140351598 +859000 ekin = 0.260960921285557 | erot = 0.47593924761589 | epot = -15.3544142040099 | etot = -14.6175140351084 +860000 ekin = 0.261408037072254 | erot = 0.466270984604724 | epot = -15.3451930567227 | etot = -14.6175140350457 +861000 ekin = 0.258554187538227 | erot = 0.457314264403266 | epot = -15.3333824869164 | etot = -14.6175140349749 +862000 ekin = 0.252744258033032 | erot = 0.449827506886351 | epot = -15.3200857998187 | etot = -14.6175140348993 +863000 ekin = 0.24445941779656 | erot = 0.444512141834286 | epot = -15.3064855944532 | etot = -14.6175140348224 +864000 ekin = 0.234293368840191 | erot = 0.441983030939893 | epot = -15.2937904345275 | etot = -14.6175140347474 +865000 ekin = 0.222924696624028 | erot = 0.442744308395087 | epot = -15.2831830396966 | etot = -14.6175140346775 +866000 ekin = 0.211086026109153 | erot = 0.447169652381141 | epot = -15.275769713106 | etot = -14.6175140346157 +867000 ekin = 0.199530465892741 | erot = 0.455487658924214 | epot = -15.2725321593816 | etot = -14.6175140345647 +868000 ekin = 0.188996288427104 | erot = 0.467771811643747 | epot = -15.2742821345979 | etot = -14.6175140345271 +869000 ekin = 0.180171161859106 | erot = 0.483934855626885 | epot = -15.2816200519912 | etot = -14.6175140345052 +870000 ekin = 0.17365741386822 | erot = 0.503727420429673 | epot = -15.2948988687985 | etot = -14.6175140345006 +871000 ekin = 0.169940429081846 | erot = 0.52674119313203 | epot = -15.3141956567285 | etot = -14.6175140345146 +872000 ekin = 0.169362274178155 | erot = 0.552417088945952 | epot = -15.3392933976716 | etot = -14.6175140345475 +873000 ekin = 0.172102391201285 | erot = 0.580058846014358 | epot = -15.3696752718142 | etot = -14.6175140345986 +874000 ekin = 0.17816700290151 | erot = 0.608852557307893 | epot = -15.4045335948759 | etot = -14.6175140346665 +875000 ekin = 0.187388233890407 | erot = 0.637892396630087 | epot = -15.4427946652692 | etot = -14.6175140347487 +876000 ekin = 0.19943318136702 | erot = 0.666212376945529 | epot = -15.4831595931541 | etot = -14.6175140348415 +877000 ekin = 0.213822249050307 | erot = 0.692823325238237 | epot = -15.5241596092293 | etot = -14.6175140349407 +878000 ekin = 0.229955728385699 | erot = 0.71675421264508 | epot = -15.5642239760723 | etot = -14.6175140350415 +879000 ekin = 0.24714610464469 | erot = 0.737095186135096 | epot = -15.6017553259188 | etot = -14.617514035139 +880000 ekin = 0.264653797001986 | erot = 0.753040153406107 | epot = -15.6352079856364 | etot = -14.6175140352283 +881000 ekin = 0.281723784261025 | erot = 0.763926241591362 | epot = -15.6631640611574 | etot = -14.617514035305 +882000 ekin = 0.297620641606497 | erot = 0.769267373447878 | epot = -15.6844020504201 | etot = -14.6175140353657 +883000 ekin = 0.31165996716591 | erot = 0.768779581882635 | epot = -15.6979535844562 | etot = -14.6175140354077 +884000 ekin = 0.32323477376766 | erot = 0.762396270684418 | epot = -15.7031450798815 | etot = -14.6175140354294 +885000 ekin = 0.331836099624976 | erot = 0.750272396067649 | epot = -15.6996225311232 | etot = -14.6175140354305 +886000 ekin = 0.33706775156376 | erot = 0.73277738526586 | epot = -15.6873591722413 | etot = -14.6175140354116 +887000 ekin = 0.33865564976609 | erot = 0.710477420750346 | epot = -15.6666471058906 | etot = -14.6175140353742 +888000 ekin = 0.336452632420724 | erot = 0.684108417156207 | epot = -15.6380750848973 | etot = -14.6175140353203 +889000 ekin = 0.330439768515565 | erot = 0.654541548240145 | epot = -15.6024953520085 | etot = -14.6175140352528 +890000 ekin = 0.320725208484774 | erot = 0.622743520027188 | epot = -15.5609827636863 | etot = -14.6175140351743 +891000 ekin = 0.30754138620901 | erot = 0.589733936087593 | epot = -15.5147893573847 | etot = -14.6175140350881 +892000 ekin = 0.291240998129824 | erot = 0.55654208039805 | epot = -15.4652971135248 | etot = -14.6175140349969 +893000 ekin = 0.272291667891339 | erot = 0.524165278720875 | epot = -15.413970981516 | etot = -14.6175140349038 +894000 ekin = 0.251268620703469 | erot = 0.493530718297772 | epot = -15.3623133738123 | etot = -14.617514034811 +895000 ekin = 0.228844131843647 | erot = 0.465462234286628 | epot = -15.3118204008517 | etot = -14.6175140347214 +896000 ekin = 0.205772103521931 | erot = 0.44065313730724 | epot = -15.2639392754666 | etot = -14.6175140346374 +897000 ekin = 0.182866017803037 | erot = 0.419645693758354 | epot = -15.2200257461231 | etot = -14.6175140345617 +898000 ekin = 0.160968870008541 | erot = 0.402817425242934 | epot = -15.1813003297485 | etot = -14.617514034497 +899000 ekin = 0.140914625128407 | erot = 0.390374024162942 | epot = -15.1488026837377 | etot = -14.6175140344464 +900000 ekin = 0.123482269337592 | erot = 0.382348451689143 | epot = -15.1233447554393 | etot = -14.6175140344126 +901000 ekin = 0.109345484385137 | erot = 0.3786057375543 | epot = -15.1054652563377 | etot = -14.6175140343982 +902000 ekin = 0.0990229789068443 | erot = 0.378853140166087 | epot = -15.0953901534781 | etot = -14.6175140344052 +903000 ekin = 0.0928360184564003 | erot = 0.382655585825594 | epot = -15.0930056387161 | etot = -14.6175140344341 +904000 ekin = 0.0908801123879861 | erot = 0.389456554773426 | epot = -15.0978507016452 | etot = -14.6175140344838 +905000 ekin = 0.0930167096525759 | erot = 0.398604648849945 | epot = -15.109135393054 | etot = -14.6175140345515 +906000 ekin = 0.0988880708462299 | erot = 0.409385812369135 | epot = -15.1257879178477 | etot = -14.6175140346323 +907000 ekin = 0.107954659147321 | erot = 0.421060528764021 | epot = -15.1465292226317 | etot = -14.6175140347203 +908000 ekin = 0.119550305154264 | erot = 0.432904367174404 | epot = -15.1699687071371 | etot = -14.6175140348085 +909000 ekin = 0.132947118364171 | erot = 0.44424923215812 | epot = -15.1947103854124 | etot = -14.6175140348901 +910000 ekin = 0.147420543333256 | erot = 0.454521879656354 | epot = -15.2194564579492 | etot = -14.6175140349595 +911000 ekin = 0.162305506309105 | erot = 0.463275978359162 | epot = -15.243095519681 | etot = -14.6175140350127 +912000 ekin = 0.177037050912775 | erot = 0.470214361754759 | epot = -15.264765447715 | etot = -14.6175140350475 +913000 ekin = 0.191172462463145 | erot = 0.47519909256641 | epot = -15.2838855900937 | etot = -14.6175140350641 +914000 ekin = 0.204395616840717 | erot = 0.478248345048037 | epot = -15.3001579969529 | etot = -14.6175140350642 +915000 ekin = 0.216507238695372 | erot = 0.479520616572283 | epot = -15.3135418903184 | etot = -14.6175140350507 +916000 ekin = 0.227406352399354 | erot = 0.479288139236181 | epot = -15.324208526663 | etot = -14.6175140350275 +917000 ekin = 0.237068358848421 | erot = 0.47790239272317 | epot = -15.3324847865699 | etot = -14.6175140349983 +918000 ekin = 0.245524170399261 | erot = 0.475755244752224 | epot = -15.3387934501184 | etot = -14.6175140349669 +919000 ekin = 0.252843202023974 | erot = 0.473239468155706 | epot = -15.343596705116 | etot = -14.6175140349363 +920000 ekin = 0.259121284815254 | erot = 0.470712244290015 | epot = -15.3473475640143 | etot = -14.617514034909 +921000 ekin = 0.264473144076574 | erot = 0.468464808092157 | epot = -15.3504519870554 | etot = -14.6175140348867 +922000 ekin = 0.269028180853983 | erot = 0.466700668341734 | epot = -15.3532428840659 | etot = -14.6175140348701 +923000 ekin = 0.272927944745736 | erot = 0.465523908452108 | epot = -15.3559658880573 | etot = -14.6175140348595 +924000 ekin = 0.276323793829006 | erot = 0.464938026324777 | epot = -15.3587758550082 | etot = -14.6175140348544 +925000 ekin = 0.279373649323259 | erot = 0.46485472138072 | epot = -15.361742405558 | etot = -14.617514034854 +926000 ekin = 0.282237300897742 | erot = 0.465111106681027 | epot = -15.3648624424358 | etot = -14.617514034857 +927000 ekin = 0.285070250341507 | erot = 0.465493135293317 | epot = -15.368077420497 | etot = -14.6175140348622 +928000 ekin = 0.288016501944515 | erot = 0.465762600718122 | epot = -15.3712931375312 | etot = -14.6175140348685 +929000 ekin = 0.291201026098165 | erot = 0.465684740678949 | epot = -15.3743998016517 | etot = -14.6175140348746 +930000 ekin = 0.294722459178849 | erot = 0.465054261989122 | epot = -15.3772907560474 | etot = -14.6175140348794 +931000 ekin = 0.298646764015069 | erot = 0.463717248452617 | epot = -15.37987804735 | etot = -14.6175140348823 +932000 ekin = 0.303002304639518 | erot = 0.461587311532337 | epot = -15.3821036510548 | etot = -14.6175140348829 +933000 ekin = 0.307776651094703 | erot = 0.458654945590446 | epot = -15.3839456315665 | etot = -14.6175140348813 +934000 ekin = 0.312915338271949 | erot = 0.454989722654232 | epot = -15.3854190958038 | etot = -14.6175140348776 +935000 ekin = 0.318322768321298 | erot = 0.450735625549576 | epot = -15.3865724287433 | etot = -14.6175140348724 +936000 ekin = 0.323865441581078 | erot = 0.4461003856938 | epot = -15.3874798621412 | etot = -14.6175140348663 +937000 ekin = 0.329377658420705 | erot = 0.441340069469478 | epot = -15.3882317627502 | etot = -14.61751403486 +938000 ekin = 0.334669609401419 | erot = 0.43674015463711 | epot = -15.3889237988925 | etot = -14.617514034854 +939000 ekin = 0.339538182698638 | erot = 0.43259572362611 | epot = -15.3896479411737 | etot = -14.6175140348489 +940000 ekin = 0.343779460435286 | erot = 0.429190561371808 | epot = -15.3904840566521 | etot = -14.617514034845 +941000 ekin = 0.347202304174038 | erot = 0.426777065358206 | epot = -15.3914934043749 | etot = -14.6175140348427 +942000 ekin = 0.349642062607923 | erot = 0.425558062624919 | epot = -15.3927141600748 | etot = -14.617514034842 +943000 ekin = 0.350973206935894 | erot = 0.425671371650785 | epot = -15.3941586134297 | etot = -14.617514034843 +944000 ekin = 0.351119786154916 | erot = 0.427178062459289 | epot = -15.3958118834598 | etot = -14.6175140348456 +945000 ekin = 0.350062816508881 | erot = 0.430055404933721 | epot = -15.3976322562924 | etot = -14.6175140348498 +946000 ekin = 0.347844068536826 | erot = 0.43419544779 | epot = -15.399553551182 | etot = -14.6175140348552 +947000 ekin = 0.344566017441624 | erot = 0.439410327984555 | epot = -15.4014903802875 | etot = -14.6175140348614 +948000 ekin = 0.340388212507466 | erot = 0.445444378277408 | epot = -15.4033466256523 | etot = -14.6175140348674 +949000 ekin = 0.335520427168573 | erot = 0.451992965714934 | epot = -15.405027427756 | etot = -14.6175140348725 +950000 ekin = 0.330213181196302 | erot = 0.458727107975965 | epot = -15.4064543240477 | etot = -14.6175140348755 +951000 ekin = 0.32474581655651 | erot = 0.465321341197607 | epot = -15.4075811926297 | etot = -14.6175140348755 +952000 ekin = 0.319412679962215 | erot = 0.471482169177628 | epot = -15.4084088840117 | etot = -14.6175140348718 +953000 ekin = 0.314508037100187 | erot = 0.476974139327395 | epot = -15.4089962112918 | etot = -14.6175140348642 +954000 ekin = 0.310309685024338 | erot = 0.48163943141798 | epot = -15.4094631512954 | etot = -14.6175140348531 +955000 ekin = 0.307061947765172 | erot = 0.485408201613879 | epot = -15.4099841842186 | etot = -14.6175140348396 +956000 ekin = 0.304958921288845 | erot = 0.488297803841432 | epot = -15.4107707599557 | etot = -14.6175140348254 +957000 ekin = 0.304129209168544 | erot = 0.490400499132465 | epot = -15.412043743114 | etot = -14.617514034813 +958000 ekin = 0.30462371461979 | erot = 0.491860923621405 | epot = -15.4139986730458 | etot = -14.6175140348046 +959000 ekin = 0.306408207891338 | erot = 0.492846142548894 | epot = -15.4167683852429 | etot = -14.6175140348027 +960000 ekin = 0.309362278812989 | erot = 0.493512316198202 | epot = -15.4203886298201 | etot = -14.6175140348089 +961000 ekin = 0.313285873784586 | erot = 0.493972653387296 | epot = -15.4247725619958 | etot = -14.6175140348239 +962000 ekin = 0.31791392478401 | erot = 0.494271324762717 | epot = -15.429699284394 | etot = -14.6175140348473 +963000 ekin = 0.322938673952677 | erot = 0.49436733773729 | epot = -15.4348200465674 | etot = -14.6175140348775 +964000 ekin = 0.328038281530642 | erot = 0.494131108238433 | epot = -15.4396834246807 | etot = -14.6175140349116 +965000 ekin = 0.332909295682699 | erot = 0.493354750676295 | epot = -15.4437780813051 | etot = -14.6175140349461 +966000 ekin = 0.33729968976251 | erot = 0.491775167781853 | epot = -15.4465888925212 | etot = -14.6175140349768 +967000 ekin = 0.341038574326505 | erot = 0.489107134739274 | epot = -15.4476597440655 | etot = -14.6175140349998 +968000 ekin = 0.344058508086205 | erot = 0.485082040988283 | epot = -15.446654584086 | etot = -14.6175140350116 +969000 ekin = 0.346406687226292 | erot = 0.479487053292162 | epot = -15.4434077755287 | etot = -14.6175140350102 +970000 ekin = 0.348242259950603 | erot = 0.472199376075359 | epot = -15.4379556710211 | etot = -14.6175140349951 +971000 ekin = 0.34981857790832 | erot = 0.46321104020783 | epot = -15.4305436530838 | etot = -14.6175140349677 +972000 ekin = 0.351451221504254 | erot = 0.452641107454446 | epot = -15.4216063638894 | etot = -14.6175140349307 +973000 ekin = 0.353474851841754 | erot = 0.440734047140903 | epot = -15.4117229338711 | etot = -14.6175140348884 +974000 ekin = 0.356193968986792 | erot = 0.42784496232361 | epot = -15.4015529661561 | etot = -14.6175140348457 +975000 ekin = 0.359834072253393 | erot = 0.414413971021987 | epot = -15.3917620780828 | etot = -14.6175140348074 +976000 ekin = 0.364500158165202 | erot = 0.400933139115816 | epot = -15.3829473320587 | etot = -14.6175140347777 +977000 ekin = 0.370148756532482 | erot = 0.387909813697021 | epot = -15.3755726049891 | etot = -14.6175140347596 +978000 ekin = 0.376577842833215 | erot = 0.375830059083025 | epot = -15.3699219366707 | etot = -14.6175140347545 +979000 ekin = 0.38343628910019 | erot = 0.365125297246779 | epot = -15.3660756211092 | etot = -14.6175140347622 +980000 ekin = 0.390251542223294 | erot = 0.35614439745949 | epot = -15.3639099744643 | etot = -14.6175140347816 +981000 ekin = 0.396471539317082 | erot = 0.349132547197932 | epot = -15.3631181213249 | etot = -14.6175140348099 +982000 ekin = 0.401514997593021 | erot = 0.344217435799683 | epot = -15.3632464682369 | etot = -14.6175140348442 +983000 ekin = 0.40482345877132 | erot = 0.341402706416172 | epot = -15.3637402000689 | etot = -14.6175140348814 +984000 ekin = 0.40590886668651 | erot = 0.340568324597744 | epot = -15.3639912262029 | etot = -14.6175140349187 +985000 ekin = 0.40439180306127 | erot = 0.341477444720355 | epot = -15.3633832827352 | etot = -14.6175140349536 +986000 ekin = 0.400027422801574 | erot = 0.34378943446128 | epot = -15.361330892247 | etot = -14.6175140349842 +987000 ekin = 0.392718180745197 | erot = 0.347078806738211 | epot = -15.3573110224925 | etot = -14.617514035009 +988000 ekin = 0.38251423921461 | erot = 0.35085976914659 | epot = -15.3508880433883 | etot = -14.6175140350271 +989000 ekin = 0.369603726654237 | erot = 0.354615837188711 | epot = -15.3417335988804 | etot = -14.6175140350375 +990000 ekin = 0.354295674461643 | erot = 0.357833454087933 | epot = -15.3296431635888 | etot = -14.6175140350392 +991000 ekin = 0.336998529351755 | erot = 0.360037895318059 | epot = -15.3145504597015 | etot = -14.6175140350317 +992000 ekin = 0.318196763890793 | erot = 0.360829065190808 | epot = -15.2965398640958 | etot = -14.6175140350142 +993000 ekin = 0.298427479538949 | erot = 0.359914303089432 | epot = -15.275855817615 | etot = -14.6175140349866 +994000 ekin = 0.278258203580391 | erot = 0.357135170965373 | epot = -15.2529074094948 | etot = -14.617514034949 +995000 ekin = 0.258266471895345 | erot = 0.352485480212691 | epot = -15.2282659870101 | etot = -14.617514034902 +996000 ekin = 0.239021351636229 | erot = 0.346118523027927 | epot = -15.2026539095112 | etot = -14.617514034847 +997000 ekin = 0.221066818081289 | erot = 0.338342492442898 | epot = -15.1769233453102 | etot = -14.617514034786 +998000 ekin = 0.204906835818331 | erot = 0.329604233509071 | epot = -15.1520251040488 | etot = -14.6175140347214 +999000 ekin = 0.190992053959174 | erot = 0.320462575795008 | epot = -15.1289686644104 | etot = -14.6175140346562 +1000000 ekin = 0.179708146665509 | erot = 0.311553394429298 | epot = -15.1087755756885 | etot = -14.6175140345937 + 1000000 0.013311715 -1.5443684 0.033490821 -1.4929067 -3.7544839e-05 +Loop time of 20.4903 on 1 procs for 1000000 steps with 10 atoms + +Performance: 42166.322 tau/day, 48803.614 timesteps/s +98.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 | 16.542 | 16.542 | 16.542 | 0.0 | 80.73 +Bond | 0.62224 | 0.62224 | 0.62224 | 0.0 | 3.04 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.21974 | 0.21974 | 0.21974 | 0.0 | 1.07 +Output | 7e-06 | 7e-06 | 7e-06 | 0.0 | 0.00 +Modify | 2.7798 | 2.7798 | 2.7798 | 0.0 | 13.57 +Other | | 0.3269 | | | 1.60 + +Nlocal: 10 ave 10 max 10 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 45 ave 45 max 45 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 45 +Ave neighs/atom = 4.5 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:20 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.18Jun19.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.18Jun19.duplex1.g++.4 new file mode 100644 index 0000000000..9856a9c95b --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.18Jun19.duplex1.g++.4 @@ -0,0 +1,1172 @@ +LAMMPS (18 Jun 2019) +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex1 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + special bonds CPU = 0.000196 secs + read_data CPU = 0.003266 secs + +set atom * mass 3.1575 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqav 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.652 | 7.834 | 8.016 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4712768 0.009525411 -1.4617514 4.663076e-06 +1000 ekin = 0.00113086229080478 | erot = 0.00431010160406708 | epot = -14.6229549982368 | etot = -14.617514034342 +2000 ekin = 0.00448533224342286 | erot = 0.0171407706505013 | epot = -14.6391401372615 | etot = -14.6175140343675 +3000 ekin = 0.0099503525964896 | erot = 0.0381961780846439 | epot = -14.6656605650904 | etot = -14.6175140344093 +4000 ekin = 0.0173418024861991 | erot = 0.0669935184860482 | epot = -14.7018493554381 | etot = -14.6175140344659 +5000 ekin = 0.0264109356285965 | erot = 0.102878288094483 | epot = -14.7468032582586 | etot = -14.6175140345355 +6000 ekin = 0.0368533113591267 | erot = 0.14504542056981 | epot = -14.7994127665446 | etot = -14.6175140346157 +7000 ekin = 0.0483200640564583 | erot = 0.192565862515414 | epot = -14.8583999612755 | etot = -14.6175140347036 +8000 ekin = 0.0604312317605635 | erot = 0.244417870131371 | epot = -14.9223631366881 | etot = -14.6175140347962 +9000 ekin = 0.072790711967127 | erot = 0.299521949931656 | epot = -14.9898266967887 | etot = -14.6175140348899 +10000 ekin = 0.0850022498874609 | erot = 0.356777997217668 | epot = -15.0592942820866 | etot = -14.6175140349815 +11000 ekin = 0.0966857134040954 | erot = 0.415102860829322 | epot = -15.1293026093009 | etot = -14.6175140350675 +12000 ekin = 0.107492790688356 | erot = 0.473466334177699 | epot = -15.1984731600111 | etot = -14.617514035145 +13000 ekin = 0.117121180381612 | erot = 0.530923485009329 | epot = -15.2655587006024 | etot = -14.6175140352115 +14000 ekin = 0.125326348459051 | erot = 0.586641324447251 | epot = -15.3294817081714 | etot = -14.6175140352651 +15000 ekin = 0.131930017119328 | erot = 0.63991810423422 | epot = -15.3893621566583 | etot = -14.6175140353048 +16000 ekin = 0.136824741331405 | erot = 0.690194029500566 | epot = -15.4445328061626 | etot = -14.6175140353306 +17000 ekin = 0.139974218116171 | erot = 0.737052866147306 | epot = -15.4945411196066 | etot = -14.6175140353432 +18000 ekin = 0.141409342139797 | erot = 0.780214750583043 | epot = -15.5391381280668 | etot = -14.617514035344 +19000 ekin = 0.141220424903361 | erot = 0.819521373491177 | epot = -15.5782558337298 | etot = -14.6175140353352 +20000 ekin = 0.139546371890511 | erot = 0.854915474127585 | epot = -15.6119758813374 | etot = -14.6175140353193 +21000 ekin = 0.136561897558541 | erot = 0.886417110947522 | epot = -15.6404930438047 | etot = -14.6175140352986 +22000 ekin = 0.132464002543684 | erot = 0.914099368829796 | epot = -15.6640774066492 | etot = -14.6175140352758 +23000 ekin = 0.127458921012898 | erot = 0.938065991541741 | epot = -15.6830389478072 | etot = -14.6175140352525 +24000 ekin = 0.121750582423396 | erot = 0.958432936326346 | epot = -15.6976975539803 | etot = -14.6175140352306 +25000 ekin = 0.115531361419039 | erot = 0.975315142931434 | epot = -15.7083605395612 | etot = -14.6175140352107 +26000 ekin = 0.108975565586195 | erot = 0.988819027952452 | epot = -15.715308628732 | etot = -14.6175140351934 +27000 ekin = 0.102235785319183 | erot = 0.999040485514706 | epot = -15.7187903060122 | etot = -14.6175140351783 +28000 ekin = 0.0954419434320554 | erot = 1.00606759141037 | epot = -15.7190235700075 | etot = -14.6175140351651 +29000 ekin = 0.0887026587346012 | erot = 1.00998681843686 | epot = -15.7162035123244 | etot = -14.6175140351529 +30000 ekin = 0.0821083868016836 | erot = 1.01089138149989 | epot = -15.7105138034423 | etot = -14.6175140351407 +31000 ekin = 0.0757357206090521 | erot = 1.00889031641421 | epot = -15.702140072151 | etot = -14.6175140351278 +32000 ekin = 0.0696522149391935 | erot = 1.00411701390103 | epot = -15.6912832639534 | etot = -14.6175140351132 +33000 ekin = 0.0639211300031737 | erot = 0.996736133736263 | epot = -15.6781712988358 | etot = -14.6175140350964 +34000 ekin = 0.0586055597942697 | erot = 0.986948071944207 | epot = -15.6630676668155 | etot = -14.617514035077 +35000 ekin = 0.0537715085522448 | erot = 0.974990414618501 | epot = -15.6462759582258 | etot = -14.617514035055 +36000 ekin = 0.0494895953267295 | erot = 0.961136064968264 | epot = -15.6281396953257 | etot = -14.6175140350307 +37000 ekin = 0.0458351949408502 | erot = 0.945687966087874 | epot = -15.6090371960337 | etot = -14.617514035005 +38000 ekin = 0.0428869588018996 | erot = 0.928970560853581 | epot = -15.5893715546342 | etot = -14.6175140349787 +39000 ekin = 0.0407237982125063 | erot = 0.911318339680438 | epot = -15.5695561728459 | etot = -14.617514034953 +40000 ekin = 0.0394205547756063 | erot = 0.893062038098217 | epot = -15.5499966278032 | etot = -14.6175140349294 +41000 ekin = 0.0390427256108178 | erot = 0.874513269991183 | epot = -15.5310700305113 | etot = -14.6175140349092 +42000 ekin = 0.0396407506458889 | erot = 0.855948622306388 | epot = -15.5131034078463 | etot = -14.617514034894 +43000 ekin = 0.0412444930542012 | erot = 0.837594480923648 | epot = -15.4963530088627 | etot = -14.6175140348848 +44000 ekin = 0.0438586280729573 | erot = 0.819614069272763 | epot = -15.4809867322283 | etot = -14.6175140348826 +45000 ekin = 0.0474596621514809 | erot = 0.802098297010425 | epot = -15.4670719940496 | etot = -14.6175140348876 +46000 ekin = 0.0519951857190001 | erot = 0.785061947877089 | epot = -15.4545711684958 | etot = -14.6175140348997 +47000 ekin = 0.0573856747188828 | erot = 0.768446392385995 | epot = -15.4433461020223 | etot = -14.6175140349174 +48000 ekin = 0.0635286843628562 | erot = 0.752129335015535 | epot = -15.433172054318 | etot = -14.6175140349396 +49000 ekin = 0.0703046735384702 | erot = 0.735941123250163 | epot = -15.4237598317528 | etot = -14.6175140349642 +50000 ekin = 0.0775831019852491 | erot = 0.719686007780774 | epot = -15.4147831447551 | etot = -14.6175140349891 +51000 ekin = 0.0852270843840623 | erot = 0.703165726694424 | epot = -15.4059068460916 | etot = -14.6175140350132 +52000 ekin = 0.0930950223446157 | erot = 0.686202231165621 | epot = -15.3968112885448 | etot = -14.6175140350346 +53000 ekin = 0.101038429252411 | erot = 0.668656546988554 | epot = -15.3872090112944 | etot = -14.6175140350534 +54000 ekin = 0.108896540979999 | erot = 0.65044172617409 | epot = -15.3768523022237 | etot = -14.6175140350696 +55000 ekin = 0.116489881625605 | erot = 0.631529329347953 | epot = -15.3655332460571 | etot = -14.6175140350836 +56000 ekin = 0.12361610349128 | erot = 0.611950383382754 | epot = -15.3530805219694 | etot = -14.6175140350954 +57000 ekin = 0.130051530400511 | erot = 0.591792721317636 | epot = -15.3393582868229 | etot = -14.6175140351047 +58000 ekin = 0.135560625192868 | erot = 0.571196690673809 | epot = -15.3242713509772 | etot = -14.6175140351105 +59000 ekin = 0.13991335082652 | erot = 0.550350463180971 | epot = -15.307777849119 | etot = -14.6175140351115 +60000 ekin = 0.142907875045205 | erot = 0.529485019663366 | epot = -15.2899069298149 | etot = -14.6175140351063 +61000 ekin = 0.144394224776987 | erot = 0.508867904999859 | epot = -15.2707761648709 | etot = -14.6175140350941 +62000 ekin = 0.14429400378525 | erot = 0.488794507593493 | epot = -15.2506025464535 | etot = -14.6175140350748 +63000 ekin = 0.142612256997681 | erot = 0.469576039422599 | epot = -15.2297023314693 | etot = -14.617514035049 +64000 ekin = 0.139439544726489 | erot = 0.451524344955609 | epot = -15.2084779247008 | etot = -14.6175140350187 +65000 ekin = 0.134944526553205 | erot = 0.434934714914789 | epot = -15.1873932764541 | etot = -14.6175140349861 +66000 ekin = 0.129359146357915 | erot = 0.42006860776795 | epot = -15.1669417890793 | etot = -14.6175140349534 +67000 ekin = 0.122959458763979 | erot = 0.407138362060406 | epot = -15.1476118557473 | etot = -14.6175140349229 +68000 ekin = 0.116045210525348 | erot = 0.396295631876791 | epot = -15.1298548772989 | etot = -14.6175140348967 +69000 ekin = 0.108920722072196 | erot = 0.387624589972286 | epot = -15.1140593469203 | etot = -14.6175140348758 +70000 ekin = 0.10187874072944 | erot = 0.381140173640969 | epot = -15.1005329492312 | etot = -14.6175140348608 +71000 ekin = 0.0951880561483024 | erot = 0.376791007701474 | epot = -15.0894930987017 | etot = -14.6175140348519 +72000 ekin = 0.0890849677261225 | erot = 0.374466237250124 | epot = -15.0810652398251 | etot = -14.6175140348489 +73000 ekin = 0.0837682427021172 | erot = 0.37400534759948 | epot = -15.0752876251526 | etot = -14.617514034851 +74000 ekin = 0.0793969849743902 | erot = 0.375210076750066 | epot = -15.0721210965819 | etot = -14.6175140348574 +75000 ekin = 0.0760907865069309 | erot = 0.377857644571635 | epot = -15.0714624659456 | etot = -14.617514034867 +76000 ekin = 0.073931583490861 | erot = 0.381714646754472 | epot = -15.073160265124 | etot = -14.6175140348787 +77000 ekin = 0.0729667273608691 | erot = 0.386551032955436 | epot = -15.0770317952076 | etot = -14.6175140348913 +78000 ekin = 0.0732128655080132 | erot = 0.392153586682573 | epot = -15.0828804870945 | etot = -14.6175140349039 +79000 ekin = 0.0746602878351816 | erot = 0.398338263928879 | epot = -15.0905125866795 | etot = -14.6175140349154 +80000 ekin = 0.0772774298946258 | erot = 0.404960669862598 | epot = -15.0997521346822 | etot = -14.617514034925 +81000 ekin = 0.0810152396747851 | erot = 0.411923913358685 | epot = -15.1104531879654 | etot = -14.617514034932 +82000 ekin = 0.0858111278281503 | erot = 0.419183131304765 | epot = -15.122508294069 | etot = -14.6175140349361 +83000 ekin = 0.0915922459207823 | erot = 0.426746154030485 | epot = -15.1358524348888 | etot = -14.6175140349375 +84000 ekin = 0.0982778862655832 | erot = 0.434670094582864 | epot = -15.1504620157849 | etot = -14.6175140349364 +85000 ekin = 0.105780875252437 | erot = 0.443054055542249 | epot = -15.1663489657283 | etot = -14.6175140349336 +86000 ekin = 0.114007936320836 | erot = 0.452028591870875 | epot = -15.1835505631216 | etot = -14.6175140349299 +87000 ekin = 0.122859117093393 | erot = 0.461742961599463 | epot = -15.2021161136192 | etot = -14.6175140349264 +88000 ekin = 0.132226490250757 | erot = 0.472351454261397 | epot = -15.2220919794359 | etot = -14.6175140349237 +89000 ekin = 0.141992430435586 | erot = 0.48400015022936 | epot = -15.243506615588 | etot = -14.6175140349231 +90000 ekin = 0.152027823849156 | erot = 0.496815313840275 | epot = -15.2663571726144 | etot = -14.617514034925 +91000 ekin = 0.162190574344531 | erot = 0.510894287760946 | epot = -15.2905988970356 | etot = -14.6175140349301 +92000 ekin = 0.172324730223634 | erot = 0.526299304076921 | epot = -15.3161380692392 | etot = -14.6175140349387 +93000 ekin = 0.182260479602882 | erot = 0.543054150884053 | epot = -15.3428286654374 | etot = -14.6175140349505 +94000 ekin = 0.19181516642483 | erot = 0.561143224560411 | epot = -15.3704724259507 | etot = -14.6175140349654 +95000 ekin = 0.200795384590157 | erot = 0.580512230413436 | epot = -15.398821649987 | etot = -14.6175140349834 +96000 ekin = 0.209000133284529 | erot = 0.601069706845066 | epot = -15.4275838751334 | etot = -14.6175140350038 +97000 ekin = 0.216224974983237 | erot = 0.62268863993255 | epot = -15.4564276499423 | etot = -14.6175140350265 +98000 ekin = 0.222267131485539 | erot = 0.6452076702458 | epot = -15.4849888367823 | etot = -14.617514035051 +99000 ekin = 0.226931474008825 | erot = 0.668431711039527 | epot = -15.5128772201251 | etot = -14.6175140350767 +100000 ekin = 0.230037392185109 | erot = 0.692132125756159 | epot = -15.5396835530446 | etot = -14.6175140351033 +101000 ekin = 0.231426538774162 | erot = 0.716046886548711 | epot = -15.5649874604531 | etot = -14.6175140351302 +102000 ekin = 0.230971416185847 | erot = 0.739881303910146 | epot = -15.5883667552525 | etot = -14.6175140351565 +103000 ekin = 0.228584676860608 | erot = 0.763309953364731 | epot = -15.6094086654068 | etot = -14.6175140351814 +104000 ekin = 0.224228843046253 | erot = 0.78598032692129 | epot = -15.6277232051714 | etot = -14.6175140352039 +105000 ekin = 0.217925953180068 | erot = 0.807518535459536 | epot = -15.6429585238624 | etot = -14.6175140352228 +106000 ekin = 0.209766205881383 | erot = 0.827537066837229 | epot = -15.6548173079557 | etot = -14.6175140352371 +107000 ekin = 0.199914663118832 | erot = 0.845644346598305 | epot = -15.6630730449629 | etot = -14.6175140352458 +108000 ekin = 0.188614735690438 | erot = 0.86145556230374 | epot = -15.6675843332424 | etot = -14.6175140352482 +109000 ekin = 0.176187061060969 | erot = 0.874603999194657 | epot = -15.6683050954996 | etot = -14.617514035244 +110000 ekin = 0.163022626611269 | erot = 0.884752084634178 | epot = -15.6652887464788 | etot = -14.6175140352334 +111000 ekin = 0.149569382110055 | erot = 0.891601400936344 | epot = -15.6586848182636 | etot = -14.6175140352172 +112000 ekin = 0.136312261124298 | erot = 0.894901120601569 | epot = -15.6487274169225 | etot = -14.6175140351967 +113000 ekin = 0.123747404857111 | erot = 0.894454602034433 | epot = -15.635716042065 | etot = -14.6175140351735 +114000 ekin = 0.112352324429236 | erot = 0.89012419645392 | epot = -15.6199905560327 | etot = -14.6175140351496 +115000 ekin = 0.102554569787019 | erot = 0.881834585428133 | epot = -15.601903190342 | etot = -14.6175140351268 +116000 ekin = 0.094702004709198 | erot = 0.869575126615747 | epot = -15.5817911664316 | etot = -14.6175140351067 +117000 ekin = 0.0890378681933156 | erot = 0.853401690495617 | epot = -15.5599535937792 | etot = -14.6175140350902 +118000 ekin = 0.0856833736304911 | erot = 0.833438318820653 | epot = -15.536635727529 | etot = -14.6175140350778 +119000 ekin = 0.0846297171115028 | erot = 0.809878764033866 | epot = -15.5120225162146 | etot = -14.6175140350693 +120000 ekin = 0.0857402026933537 | erot = 0.782987649503194 | epot = -15.4862418872603 | etot = -14.6175140350638 +121000 ekin = 0.0887619781646647 | erot = 0.753100709617513 | epot = -15.4593767228421 | etot = -14.61751403506 +122000 ekin = 0.0933458418333701 | erot = 0.720623403983765 | epot = -15.4314832808735 | etot = -14.6175140350564 +123000 ekin = 0.0990718975136712 | erot = 0.686027198351099 | epot = -15.4026131309163 | etot = -14.6175140350515 +124000 ekin = 0.10547856753477 | erot = 0.649842971568616 | epot = -15.3728355741476 | etot = -14.6175140350442 +125000 ekin = 0.112092583657157 | erot = 0.612651306911466 | epot = -15.3422579256018 | etot = -14.6175140350331 +126000 ekin = 0.118457948669929 | erot = 0.575069793126885 | epot = -15.3110417768148 | etot = -14.6175140350179 +127000 ekin = 0.12416235209736 | erot = 0.537737821904032 | epot = -15.2794142089994 | etot = -14.617514034998 +128000 ekin = 0.12886000047466 | erot = 0.50129966007338 | epot = -15.2476736955216 | etot = -14.6175140349735 +129000 ekin = 0.132290197680968 | erot = 0.466386755141928 | epot = -15.2161909877676 | etot = -14.6175140349447 +130000 ekin = 0.134291248322799 | erot = 0.433600287194598 | epot = -15.1854055704295 | etot = -14.6175140349121 +131000 ekin = 0.134809368078731 | erot = 0.403494917850824 | epot = -15.1558183208059 | etot = -14.6175140348763 +132000 ekin = 0.133902311412609 | erot = 0.376564532721137 | epot = -15.1279808789722 | etot = -14.6175140348384 +133000 ekin = 0.131737425949523 | erot = 0.35323055944927 | epot = -15.102482020198 | etot = -14.6175140347992 +134000 ekin = 0.128583872249503 | erot = 0.333833200744645 | epot = -15.0799311077543 | etot = -14.6175140347601 +135000 ekin = 0.124798858318881 | erot = 0.318625678761018 | epot = -15.0609385718023 | etot = -14.6175140347224 +136000 ekin = 0.120807966950657 | erot = 0.307771366705204 | epot = -15.0460933683435 | etot = -14.6175140346876 +137000 ekin = 0.117080018573046 | erot = 0.301343503849178 | epot = -15.0359375570798 | etot = -14.6175140346576 +138000 ekin = 0.11409740445119 | erot = 0.299327064918184 | epot = -15.0309385040035 | etot = -14.6175140346342 +139000 ekin = 0.112323403877017 | erot = 0.30162229304682 | epot = -15.0314597315429 | etot = -14.6175140346191 +140000 ekin = 0.112168587316825 | erot = 0.308049410073269 | epot = -15.0377320320041 | etot = -14.617514034614 +141000 ekin = 0.113958896787242 | erot = 0.318354084563179 | epot = -15.0498270159708 | etot = -14.6175140346204 +142000 ekin = 0.117908250109871 | erot = 0.332213334114279 | epot = -15.0676356188632 | etot = -14.6175140346391 +143000 ekin = 0.124098500240005 | erot = 0.349241744869171 | epot = -15.0908542797795 | etot = -14.6175140346704 +144000 ekin = 0.132469049162189 | erot = 0.368998042344344 | epot = -15.1189811262203 | etot = -14.6175140347138 +145000 ekin = 0.142817534773286 | erot = 0.390992018433719 | epot = -15.1513235879751 | etot = -14.6175140347681 +146000 ekin = 0.154812002594074 | erot = 0.414692148539669 | epot = -15.1870181859652 | etot = -14.6175140348314 +147000 ekin = 0.168013608208222 | erot = 0.439534147564146 | epot = -15.2250617906734 | etot = -14.617514034901 +148000 ekin = 0.181907755044263 | erot = 0.464930715993231 | epot = -15.2643525060114 | etot = -14.617514034974 +149000 ekin = 0.195940689918476 | erot = 0.490282644231627 | epot = -15.303737369197 | etot = -14.6175140350469 +150000 ekin = 0.209558115498224 | erot = 0.514991307803342 | epot = -15.3420634584183 | etot = -14.6175140351167 +151000 ekin = 0.222242375358764 | erot = 0.538472447670959 | epot = -15.37822885821 | etot = -14.6175140351803 +152000 ekin = 0.233545181100908 | erot = 0.560170967505261 | epot = -15.4112301838413 | etot = -14.6175140352351 +153000 ekin = 0.243113638171877 | erot = 0.579575715964384 | epot = -15.4402033894153 | etot = -14.6175140352791 +154000 ekin = 0.250708030719506 | erot = 0.596234520730852 | epot = -15.4644565867613 | etot = -14.617514035311 +155000 ekin = 0.256210874594867 | erot = 0.60976818504912 | epot = -15.4834930949737 | etot = -14.6175140353297 +156000 ekin = 0.259627463842678 | erot = 0.619882772314523 | epot = -15.4970242714926 | etot = -14.6175140353354 +157000 ekin = 0.261078756733762 | erot = 0.626379517381851 | epot = -15.5049723094439 | etot = -14.6175140353283 +158000 ekin = 0.260787877594799 | erot = 0.629161788909728 | epot = -15.5074637018138 | etot = -14.6175140353093 +159000 ekin = 0.259061752299363 | erot = 0.628238692725143 | epot = -15.5048144803044 | etot = -14.6175140352799 +160000 ekin = 0.256269476947947 | erot = 0.623725097357694 | epot = -15.4975086095473 | etot = -14.6175140352416 +161000 ekin = 0.252818974262676 | erot = 0.615838055764808 | epot = -15.486171065224 | etot = -14.6175140351965 +162000 ekin = 0.249133354780831 | erot = 0.604889772113657 | epot = -15.471537162041 | etot = -14.6175140351465 +163000 ekin = 0.245628201594069 | erot = 0.591277407065719 | epot = -15.4544196437535 | etot = -14.6175140350937 +164000 ekin = 0.242690765770497 | erot = 0.575470125399849 | epot = -15.4356749262106 | etot = -14.6175140350402 +165000 ekin = 0.240661818237638 | erot = 0.557993868663582 | epot = -15.4161697218892 | etot = -14.617514034988 +166000 ekin = 0.239820672159809 | erot = 0.53941438884916 | epot = -15.3967490959478 | etot = -14.6175140349388 +167000 ekin = 0.240373682616981 | erot = 0.520319112884548 | epot = -15.3782068303959 | etot = -14.6175140348944 +168000 ekin = 0.24244635767337 | erot = 0.501298426047094 | epot = -15.3612588185766 | etot = -14.6175140348562 +169000 ekin = 0.246079081489486 | erot = 0.482926967022081 | epot = -15.3465200833369 | etot = -14.6175140348253 +170000 ekin = 0.251226355670601 | erot = 0.465745518941346 | epot = -15.3344859094148 | etot = -14.6175140348028 +171000 ekin = 0.257759407502439 | erot = 0.450244072412675 | epot = -15.3255175147044 | etot = -14.6175140347893 +172000 ekin = 0.265471962314995 | erot = 0.43684655757276 | epot = -15.3198325546728 | etot = -14.617514034785 +173000 ekin = 0.274088992052566 | erot = 0.425897760802307 | epot = -15.317500787645 | etot = -14.6175140347901 +174000 ekin = 0.283278228107989 | erot = 0.417652965987653 | epot = -15.3184452288998 | etot = -14.6175140348041 +175000 ekin = 0.292664164217049 | erot = 0.41227065206718 | epot = -15.3224488511106 | etot = -14.6175140348264 +176000 ekin = 0.301844276743974 | erot = 0.409808663993543 | epot = -15.3291669755933 | etot = -14.6175140348558 +177000 ekin = 0.310407103277722 | erot = 0.410224178773613 | epot = -15.338145316942 | etot = -14.6175140348907 +178000 ekin = 0.317951707448459 | erot = 0.413377690533319 | epot = -15.3488434329112 | etot = -14.6175140349295 +179000 ekin = 0.324107901131331 | erot = 0.419041092199345 | epot = -15.3606630283007 | etot = -14.61751403497 +180000 ekin = 0.328556397748226 | erot = 0.426909726007329 | epot = -15.3729801587658 | etot = -14.6175140350103 +181000 ekin = 0.331047834153872 | erot = 0.436618006902467 | epot = -15.3851798761041 | etot = -14.6175140350478 +182000 ekin = 0.331419420114469 | erot = 0.447757936314679 | epot = -15.3966913915095 | etot = -14.6175140350803 +183000 ekin = 0.32960779233749 | erot = 0.459899520065503 | epot = -15.4070213475091 | etot = -14.6175140351061 +184000 ekin = 0.325656516855028 | erot = 0.472611792133139 | epot = -15.4157823441118 | etot = -14.6175140351236 +185000 ekin = 0.319716934487211 | erot = 0.485483030927449 | epot = -15.4227140005469 | etot = -14.6175140351322 +186000 ekin = 0.312041347782212 | erot = 0.498138700398001 | epot = -15.4276940833121 | etot = -14.6175140351319 +187000 ekin = 0.302968200961153 | erot = 0.510255791848845 | epot = -15.4307380279334 | etot = -14.6175140351234 +188000 ekin = 0.292899787356355 | erot = 0.5215725520513 | epot = -15.4319863745157 | etot = -14.6175140351081 +189000 ekin = 0.282274048055605 | erot = 0.531893031493143 | epot = -15.4316811146372 | etot = -14.6175140350884 +190000 ekin = 0.271533034588949 | erot = 0.541086413296656 | epot = -15.4301334829521 | etot = -14.6175140350665 +191000 ekin = 0.261091384545176 | erot = 0.549081610185661 | epot = -15.4276870297757 | etot = -14.6175140350448 +192000 ekin = 0.251308489707993 | erot = 0.555858063434326 | epot = -15.4246805881679 | etot = -14.6175140350256 +193000 ekin = 0.242467771119499 | erot = 0.561433978654792 | epot = -15.4214157847846 | etot = -14.6175140350103 +194000 ekin = 0.234765581624083 | erot = 0.565853352187983 | epot = -15.4181329688119 | etot = -14.6175140349998 +195000 ekin = 0.228310848060933 | erot = 0.569173077812972 | epot = -15.414997960868 | etot = -14.6175140349941 +196000 ekin = 0.223134890549791 | erot = 0.571451208607789 | epot = -15.4121001341501 | etot = -14.6175140349925 +197000 ekin = 0.219209242155479 | erot = 0.572737138234515 | epot = -15.4094604153842 | etot = -14.6175140349942 +198000 ekin = 0.216468062808567 | erot = 0.573064123809139 | epot = -15.4070462216157 | etot = -14.6175140349979 +199000 ekin = 0.214831137522102 | erot = 0.572444258405115 | epot = -15.4047894309295 | etot = -14.6175140350023 +200000 ekin = 0.214223573901692 | erot = 0.570865760664587 | epot = -15.402603369573 | etot = -14.6175140350067 +201000 ekin = 0.214589119166338 | erot = 0.568292309388425 | epot = -15.4003954635655 | etot = -14.6175140350107 +202000 ekin = 0.215895325601886 | erot = 0.564664121435212 | epot = -15.3980734820515 | etot = -14.6175140350144 +203000 ekin = 0.218130347569574 | erot = 0.559900543320399 | epot = -15.3955449259083 | etot = -14.6175140350184 +204000 ekin = 0.221292667473328 | erot = 0.553904074219812 | epot = -15.3927107767163 | etot = -14.6175140350232 +205000 ekin = 0.225376258610291 | erot = 0.546565915590092 | epot = -15.3894562092301 | etot = -14.6175140350297 +206000 ekin = 0.230354397528691 | erot = 0.537773288685112 | epot = -15.3856417212522 | etot = -14.6175140350384 +207000 ekin = 0.236165428414371 | erot = 0.527418806931585 | epot = -15.3810982703949 | etot = -14.617514035049 +208000 ekin = 0.242703261860097 | erot = 0.515412077176746 | epot = -15.3756293740978 | etot = -14.617514035061 +209000 ekin = 0.249814382549771 | erot = 0.501693407692903 | epot = -15.3690218253159 | etot = -14.6175140350732 +210000 ekin = 0.257301864855487 | erot = 0.486249049966596 | epot = -15.3610649499059 | etot = -14.6175140350838 +211000 ekin = 0.264935635394204 | erot = 0.469126912721243 | epot = -15.3515765832063 | etot = -14.6175140350909 +212000 ekin = 0.272467183646431 | erot = 0.450451153648371 | epot = -15.3404323723875 | etot = -14.6175140350927 +213000 ekin = 0.279646306736912 | erot = 0.430433702677772 | epot = -15.3275940445023 | etot = -14.6175140350876 +214000 ekin = 0.286237611276899 | erot = 0.409381288017331 | epot = -15.3131329343688 | etot = -14.6175140350746 +215000 ekin = 0.29203464387293 | erot = 0.387696263733711 | epot = -15.29724494266 | etot = -14.6175140350534 +216000 ekin = 0.296870258153004 | erot = 0.365870567410591 | epot = -15.2802548605881 | etot = -14.6175140350245 +217000 ekin = 0.300622666325324 | erot = 0.344472695101547 | epot = -15.2626093964159 | etot = -14.617514034989 +218000 ekin = 0.303217269541564 | erot = 0.324128407396835 | epot = -15.244859711887 | etot = -14.6175140349486 +219000 ekin = 0.30462484391226 | erot = 0.305496496150474 | epot = -15.2276353749682 | etot = -14.6175140349055 +220000 ekin = 0.304856982074418 | erot = 0.289241221674229 | epot = -15.2116122386105 | etot = -14.6175140348619 +221000 ekin = 0.303959749544728 | erot = 0.276003133760616 | epot = -15.1974769181253 | etot = -14.61751403482 +222000 ekin = 0.302006434071345 | erot = 0.266369862263779 | epot = -15.1858903311172 | etot = -14.6175140347821 +223000 ekin = 0.299090105491099 | erot = 0.260848208952979 | epot = -15.1774523491944 | etot = -14.6175140347503 +224000 ekin = 0.295316503745815 | erot = 0.259838588555865 | epot = -15.172669127028 | etot = -14.6175140347263 +225000 ekin = 0.29079760031813 | erot = 0.263612591734547 | epot = -15.1719242267643 | etot = -14.6175140347116 +226000 ekin = 0.28564610323333 | erot = 0.272294318079248 | epot = -15.1754544560199 | etot = -14.6175140347074 +227000 ekin = 0.279971018689722 | erot = 0.285846075010758 | epot = -15.1833311284149 | etot = -14.6175140347144 +228000 ekin = 0.27387437472819 | erot = 0.304059069119049 | epot = -15.1954474785804 | etot = -14.6175140347332 +229000 ekin = 0.2674491741605 | erot = 0.326549807965654 | epot = -15.2115130168897 | etot = -14.6175140347636 +230000 ekin = 0.260778614119455 | erot = 0.352763004039831 | epot = -15.2310556529641 | etot = -14.6175140348048 +231000 ekin = 0.253936564977397 | erot = 0.381981763344761 | epot = -15.2534323631777 | etot = -14.6175140348555 +232000 ekin = 0.246989230842658 | erot = 0.413345683736738 | epot = -15.2778489494936 | etot = -14.6175140349142 +233000 ekin = 0.239997814735998 | erot = 0.445877135783837 | epot = -15.3033889854983 | etot = -14.6175140349784 +234000 ekin = 0.233021891669953 | erot = 0.478515439398998 | epot = -15.3290513661143 | etot = -14.6175140350454 +235000 ekin = 0.226123071286445 | erot = 0.510157919201484 | epot = -15.3537950255997 | etot = -14.6175140351118 +236000 ekin = 0.21936843695277 | erot = 0.539706010633891 | epot = -15.3765884827611 | etot = -14.6175140351745 +237000 ekin = 0.212833212708602 | erot = 0.566113832023262 | epot = -15.3964610799619 | etot = -14.61751403523 +238000 ekin = 0.206602165162865 | erot = 0.588436180449287 | epot = -15.4125523808878 | etot = -14.6175140352757 +239000 ekin = 0.200769360307748 | erot = 0.605872583258365 | epot = -15.4241559788754 | etot = -14.6175140353093 +240000 ekin = 0.195436190928625 | erot = 0.61780345837781 | epot = -15.4307536846357 | etot = -14.6175140353293 +241000 ekin = 0.190707920284743 | erot = 0.623817360380854 | epot = -15.4320393160006 | etot = -14.617514035335 +242000 ekin = 0.186689132524135 | erot = 0.623726737659666 | epot = -15.4279299055104 | etot = -14.6175140353266 +243000 ekin = 0.183478880874969 | erot = 0.617571857376273 | epot = -15.4185647735561 | etot = -14.6175140353049 +244000 ekin = 0.181166166760206 | erot = 0.605612923712308 | epot = -15.4042931257437 | etot = -14.6175140352712 +245000 ekin = 0.179826690516145 | erot = 0.588311983397642 | epot = -15.3856527091413 | etot = -14.6175140352275 +246000 ekin = 0.179521473345086 | erot = 0.566306329739288 | epot = -15.3633418382601 | etot = -14.6175140351758 +247000 ekin = 0.180297726609514 | erot = 0.540375528723551 | epot = -15.3381872904514 | etot = -14.6175140351183 +248000 ekin = 0.182192022181392 | erot = 0.511404282991666 | epot = -15.3111103402302 | etot = -14.6175140350572 +249000 ekin = 0.185235475059313 | erot = 0.480343275337858 | epot = -15.2830927853916 | etot = -14.6175140349945 +250000 ekin = 0.189460324578832 | erot = 0.448169956262064 | epot = -15.255144315773 | etot = -14.6175140349321 +251000 ekin = 0.19490702001237 | erot = 0.415851007132868 | epot = -15.228272062017 | etot = -14.6175140348717 +252000 ekin = 0.201630699423836 | erot = 0.384307951122289 | epot = -15.2034526853611 | etot = -14.617514034815 +253000 ekin = 0.209705815256177 | erot = 0.354387113740113 | epot = -15.1816069637594 | etot = -14.6175140347631 +254000 ekin = 0.219227629547432 | erot = 0.326834860919775 | epot = -15.1635765251848 | etot = -14.6175140347176 +255000 ekin = 0.230309407957432 | erot = 0.302278768995733 | epot = -15.1501022116327 | etot = -14.6175140346795 +256000 ekin = 0.243074422922267 | erot = 0.281215109558701 | epot = -15.141803567131 | etot = -14.61751403465 +257000 ekin = 0.257642364630153 | erot = 0.264002762946067 | epot = -15.1391591622066 | etot = -14.6175140346304 +258000 ekin = 0.274110461104108 | erot = 0.250863404057697 | epot = -15.1424878997833 | etot = -14.6175140346215 +259000 ekin = 0.292530483429775 | erot = 0.241887528333024 | epot = -15.1519320463872 | etot = -14.6175140346244 +260000 ekin = 0.312883750215128 | erot = 0.237045600991386 | epot = -15.1674433858462 | etot = -14.6175140346397 +261000 ekin = 0.335057071666333 | erot = 0.236203324625284 | epot = -15.1887744309592 | etot = -14.6175140346676 +262000 ekin = 0.358823075933473 | erot = 0.239139750884213 | epot = -15.2154768615253 | etot = -14.6175140347076 +263000 ekin = 0.383828346058996 | erot = 0.245566753569572 | epot = -15.2469091343872 | etot = -14.6175140347587 +264000 ekin = 0.409592161639947 | erot = 0.255148290958814 | epot = -15.2822544874178 | etot = -14.6175140348191 +265000 ekin = 0.435517425640964 | erot = 0.267517972446782 | epot = -15.3205494329741 | etot = -14.6175140348864 +266000 ekin = 0.460913759434661 | erot = 0.282293742227942 | epot = -15.3607215366204 | etot = -14.6175140349578 +267000 ekin = 0.485031075313793 | erot = 0.299088986461059 | epot = -15.4016340968052 | etot = -14.6175140350303 +268000 ekin = 0.50710051747368 | erot = 0.317519986656956 | epot = -15.4421345392314 | etot = -14.6175140351007 +269000 ekin = 0.526378761163555 | erot = 0.33721025800327 | epot = -15.4811030543329 | etot = -14.6175140351661 +270000 ekin = 0.542191399557166 | erot = 0.357792786170323 | epot = -15.5174982209515 | etot = -14.617514035224 +271000 ekin = 0.553971501275297 | erot = 0.378911394713051 | epot = -15.5503969312606 | etot = -14.6175140352722 +272000 ekin = 0.561290243476884 | erot = 0.400222387433604 | epot = -15.5790266662199 | etot = -14.6175140353094 +273000 ekin = 0.563877614617889 | erot = 0.421397250043755 | epot = -15.6027888999963 | etot = -14.6175140353346 +274000 ekin = 0.561632338447609 | erot = 0.442126671655328 | epot = -15.6212730454506 | etot = -14.6175140353477 +275000 ekin = 0.554621238224436 | erot = 0.462125606775396 | epot = -15.6342608803486 | etot = -14.6175140353487 +276000 ekin = 0.543069132887187 | erot = 0.481138682331962 | epot = -15.6417218505579 | etot = -14.6175140353387 +277000 ekin = 0.527340979965694 | erot = 0.498945052082853 | epot = -15.6438000673675 | etot = -14.6175140353189 +278000 ekin = 0.507918337217276 | erot = 0.515361832413196 | epot = -15.6407942049214 | etot = -14.617514035291 +279000 ekin = 0.485372319601914 | erot = 0.530245473601771 | epot = -15.6331318284601 | etot = -14.6175140352564 +280000 ekin = 0.46033511650651 | erot = 0.543490744711146 | epot = -15.6213398964351 | etot = -14.6175140352175 +281000 ekin = 0.433471859960453 | erot = 0.555027349456868 | epot = -15.6060132445935 | etot = -14.6175140351761 +282000 ekin = 0.405454262480505 | erot = 0.564814480007104 | epot = -15.5877827776223 | etot = -14.6175140351347 +283000 ekin = 0.376937038993415 | erot = 0.572833827993335 | epot = -15.5672849020813 | etot = -14.6175140350945 +284000 ekin = 0.348537747962441 | erot = 0.579081711931139 | epot = -15.5451334949501 | etot = -14.6175140350565 +285000 ekin = 0.320820372083179 | erot = 0.583561068647143 | epot = -15.5218954757531 | etot = -14.6175140350227 +286000 ekin = 0.294282726921465 | erot = 0.586274110946605 | epot = -15.4980708728619 | etot = -14.6175140349939 +287000 ekin = 0.269347634013372 | erot = 0.587216475910704 | epot = -15.4740781448946 | etot = -14.6175140349706 +288000 ekin = 0.246357704467567 | erot = 0.586373659773396 | epot = -15.4502453991941 | etot = -14.6175140349531 +289000 ekin = 0.225573522145737 | erot = 0.583720426232575 | epot = -15.4268079833199 | etot = -14.6175140349416 +290000 ekin = 0.207174962818498 | erot = 0.579223657449698 | epot = -15.4039126552032 | etot = -14.617514034935 +291000 ekin = 0.191265313940317 | erot = 0.57284878086397 | epot = -15.3816281297368 | etot = -14.6175140349325 +292000 ekin = 0.177877757396561 | erot = 0.564569470033103 | epot = -15.3599612623625 | etot = -14.6175140349328 +293000 ekin = 0.166983649288562 | erot = 0.55437983768204 | epot = -15.3388775219052 | etot = -14.6175140349346 +294000 ekin = 0.158501898150816 | erot = 0.542307895558416 | epot = -15.3183238286456 | etot = -14.6175140349363 +295000 ekin = 0.152308641379775 | erot = 0.528428741575564 | epot = -15.2982514178919 | etot = -14.6175140349366 +296000 ekin = 0.14824639013426 | erot = 0.512875830575376 | epot = -15.2786362556441 | etot = -14.6175140349344 +297000 ekin = 0.146131889948848 | erot = 0.49584883363365 | epot = -15.2594947585117 | etot = -14.6175140349292 +298000 ekin = 0.145762142540934 | erot = 0.47761697934363 | epot = -15.2408931568053 | etot = -14.6175140349207 +299000 ekin = 0.146918339842692 | erot = 0.458517327974144 | epot = -15.2229497027261 | etot = -14.6175140349093 +300000 ekin = 0.149367830718069 | erot = 0.438948042711649 | epot = -15.2058299083254 | etot = -14.6175140348957 +301000 ekin = 0.152864610234033 | erot = 0.419357266833102 | epot = -15.1897359119478 | etot = -14.6175140348807 +302000 ekin = 0.157149122640169 | erot = 0.400228590597444 | epot = -15.1748917481033 | etot = -14.6175140348656 +303000 ekin = 0.161948347719032 | erot = 0.382064246006851 | epot = -15.1615266285773 | etot = -14.6175140348514 +304000 ekin = 0.166977167327436 | erot = 0.365367110078575 | epot = -15.1498583122451 | etot = -14.6175140348391 +305000 ekin = 0.171941885875871 | erot = 0.350622387001196 | epot = -15.1400783077067 | etot = -14.6175140348296 +306000 ekin = 0.176546522696863 | erot = 0.338279561363742 | epot = -15.1323401188838 | etot = -14.6175140348232 +307000 ekin = 0.180502080572192 | erot = 0.32873493509135 | epot = -15.126751050484 | etot = -14.6175140348205 +308000 ekin = 0.183539117579248 | erot = 0.322315068517915 | epot = -15.1233682209185 | etot = -14.6175140348213 +309000 ekin = 0.18542258916881 | erot = 0.31926113518031 | epot = -15.1221977591748 | etot = -14.6175140348257 +310000 ekin = 0.185968382525478 | erot = 0.319714556777655 | epot = -15.1231969741364 | etot = -14.6175140348332 +311000 ekin = 0.185060444471749 | erot = 0.323704474532897 | epot = -15.1262789538482 | etot = -14.6175140348435 +312000 ekin = 0.182667055699898 | erot = 0.331137883754702 | epot = -15.1313189743107 | etot = -14.6175140348561 +313000 ekin = 0.178854671448117 | erot = 0.341793554574368 | epot = -15.1381622608928 | etot = -14.6175140348703 +314000 ekin = 0.173797674113305 | erot = 0.355321045101964 | epot = -15.1466327541009 | etot = -14.6175140348857 +315000 ekin = 0.167782440685989 | erot = 0.371246117950244 | epot = -15.1565425935376 | etot = -14.6175140349013 +316000 ekin = 0.161204347699333 | erot = 0.388983636698412 | epot = -15.1677020193144 | etot = -14.6175140349166 +317000 ekin = 0.154556738722997 | erot = 0.407858516721222 | epot = -15.179929290375 | etot = -14.6175140349308 +318000 ekin = 0.148411457828014 | erot = 0.427134549771526 | epot = -15.1930600425429 | etot = -14.6175140349434 +319000 ekin = 0.143391260343274 | erot = 0.446049980956587 | epot = -15.2069552762535 | etot = -14.6175140349536 +320000 ekin = 0.140135163879389 | erot = 0.463857713006731 | epot = -15.2215069118477 | etot = -14.6175140349616 +321000 ekin = 0.13925849683082 | erot = 0.47986711734359 | epot = -15.2366396491416 | etot = -14.6175140349672 +322000 ekin = 0.141309963686786 | erot = 0.493483840953745 | epot = -15.2523078396115 | etot = -14.617514034971 +323000 ekin = 0.146728465402049 | erot = 0.504243890594766 | epot = -15.2684863909708 | etot = -14.617514034974 +324000 ekin = 0.155802740978474 | erot = 0.511838753068047 | epot = -15.2851555290241 | etot = -14.6175140349776 +325000 ekin = 0.168637192339758 | erot = 0.516129344219392 | epot = -15.3022805715425 | etot = -14.6175140349833 +326000 ekin = 0.185127492740937 | erot = 0.517147991936341 | epot = -15.3197895196698 | etot = -14.6175140349925 +327000 ekin = 0.204949583925474 | erot = 0.515089155111526 | epot = -15.3375527740431 | etot = -14.6175140350061 +328000 ekin = 0.227565145376632 | erot = 0.510290835144293 | epot = -15.3553700155453 | etot = -14.6175140350243 +329000 ekin = 0.252245305622037 | erot = 0.503209396460715 | epot = -15.372968737129 | etot = -14.6175140350463 +330000 ekin = 0.278112223739082 | erot = 0.494390678506977 | epot = -15.3900169373163 | etot = -14.6175140350702 +331000 ekin = 0.304195517645115 | erot = 0.484439927614521 | epot = -15.4061494803532 | etot = -14.6175140350935 +332000 ekin = 0.329497983392802 | erot = 0.473992405219011 | epot = -15.4210044237255 | etot = -14.6175140351136 +333000 ekin = 0.353063353198636 | erot = 0.463685785195801 | epot = -15.4342631735224 | etot = -14.617514035128 +334000 ekin = 0.374038491016654 | erot = 0.454134842083192 | epot = -15.4456873682344 | etot = -14.6175140351345 +335000 ekin = 0.391723520500355 | erot = 0.445908562625392 | epot = -15.4551461182584 | etot = -14.6175140351326 +336000 ekin = 0.405605581598612 | erot = 0.439509690040415 | epot = -15.4626293067615 | etot = -14.6175140351225 +337000 ekin = 0.415374601838216 | erot = 0.435356764652285 | epot = -15.4682454015957 | etot = -14.6175140351052 +338000 ekin = 0.42092199701013 | erot = 0.433768862195237 | epot = -15.4722048942883 | etot = -14.6175140350829 +339000 ekin = 0.422325110447523 | erot = 0.434953376211998 | epot = -15.4747925217174 | etot = -14.6175140350579 +340000 ekin = 0.419821259880453 | erot = 0.438997304560007 | epot = -15.4763325994732 | etot = -14.6175140350327 +341000 ekin = 0.413775534581149 | erot = 0.445862573585633 | epot = -15.4771521431765 | etot = -14.6175140350097 +342000 ekin = 0.404646174020848 | erot = 0.455385967573857 | epot = -15.4775461765857 | etot = -14.617514034991 +343000 ekin = 0.39295070583281 | erot = 0.467284215126884 | epot = -15.4777489559374 | etot = -14.6175140349777 +344000 ekin = 0.379235231728883 | erot = 0.481164689425934 | epot = -15.4779139561254 | etot = -14.6175140349706 +345000 ekin = 0.364048459933153 | erot = 0.496541967294177 | epot = -15.4781044621969 | etot = -14.6175140349695 +346000 ekin = 0.347921358320316 | erot = 0.512860132815006 | epot = -15.478295526109 | etot = -14.6175140349737 +347000 ekin = 0.331352665808126 | erot = 0.529520204053122 | epot = -15.4783869048429 | etot = -14.6175140349817 +348000 ekin = 0.314799955036566 | erot = 0.545911447469168 | epot = -15.4782254374972 | etot = -14.6175140349915 +349000 ekin = 0.298675493175281 | erot = 0.561444708834092 | epot = -15.4776342370104 | etot = -14.6175140350011 +350000 ekin = 0.283345815520869 | erot = 0.575585348315993 | epot = -15.4764451988451 | etot = -14.6175140350083 +351000 ekin = 0.269133730327523 | erot = 0.587883045339117 | epot = -15.474530810678 | etot = -14.6175140350114 +352000 ekin = 0.256321431305203 | erot = 0.597995738138039 | epot = -15.4718312044524 | etot = -14.6175140350092 +353000 ekin = 0.24515350965437 | erot = 0.605705335206206 | epot = -15.4683728798616 | etot = -14.617514035001 +354000 ekin = 0.235838910986168 | erot = 0.610923562934476 | epot = -15.4642765089078 | etot = -14.6175140349872 +355000 ekin = 0.228551231300269 | erot = 0.613687305425456 | epot = -15.4597525716945 | etot = -14.6175140349688 +356000 ekin = 0.223427131306842 | erot = 0.61414390282459 | epot = -15.4550850690789 | etot = -14.6175140349475 +357000 ekin = 0.220563006917694 | erot = 0.612527933401747 | epot = -15.4506049752447 | etot = -14.6175140349253 +358000 ekin = 0.22001033319751 | erot = 0.60913185554411 | epot = -15.4466562236463 | etot = -14.6175140349046 +359000 ekin = 0.221770268739896 | erot = 0.604273418957587 | epot = -15.4435577225855 | etot = -14.617514034888 +360000 ekin = 0.225788163653238 | erot = 0.598262925571301 | epot = -15.4415651241022 | etot = -14.6175140348777 +361000 ekin = 0.231948578437327 | erot = 0.591373251984918 | epot = -15.4408358652977 | etot = -14.6175140348754 +362000 ekin = 0.240071331017989 | erot = 0.583815109039703 | epot = -15.4414004749403 | etot = -14.6175140348826 +363000 ekin = 0.249908988057725 | erot = 0.5757194066129 | epot = -15.4431424295705 | etot = -14.6175140348999 +364000 ekin = 0.261146140581906 | erot = 0.567127906486804 | epot = -15.445788081996 | etot = -14.6175140349273 +365000 ekin = 0.273400773645715 | erot = 0.55799265360587 | epot = -15.4489074622158 | etot = -14.6175140349642 +366000 ekin = 0.286228056503678 | erot = 0.548184015759183 | epot = -15.4519261072721 | etot = -14.6175140350092 +367000 ekin = 0.299126926925909 | erot = 0.537506547612528 | epot = -15.454147509599 | etot = -14.6175140350606 +368000 ekin = 0.311549892638302 | erot = 0.525721330953642 | epot = -15.4547852587076 | etot = -14.6175140351156 +369000 ekin = 0.32291649334207 | erot = 0.512572942756027 | epot = -15.4530034712696 | etot = -14.6175140351715 +370000 ekin = 0.332630833323927 | erot = 0.497818805483382 | epot = -15.4479636740324 | etot = -14.6175140352251 +371000 ekin = 0.340103492446064 | erot = 0.481258447418256 | epot = -15.4388759751374 | etot = -14.617514035273 +372000 ekin = 0.344777943663672 | erot = 0.462760223985855 | epot = -15.4250522029614 | etot = -14.6175140353119 +373000 ekin = 0.346161332161602 | erot = 0.442283380419715 | epot = -15.4059587479198 | etot = -14.6175140353385 +374000 ekin = 0.343859062980226 | erot = 0.419893962768359 | epot = -15.3812670610984 | etot = -14.6175140353498 +375000 ekin = 0.337612023151089 | erot = 0.395773904237503 | epot = -15.3508999627316 | etot = -14.617514035343 +376000 ekin = 0.327334336193297 | erot = 0.370223433837585 | epot = -15.3150718053467 | etot = -14.6175140353159 +377000 ekin = 0.31314826371265 | erot = 0.343657545338067 | epot = -15.2743198443178 | etot = -14.6175140352671 +378000 ekin = 0.295411338277465 | erot = 0.316597454538877 | epot = -15.2295228280127 | etot = -14.6175140351964 +379000 ekin = 0.274729408510311 | erot = 0.289657740940239 | epot = -15.1819011845556 | etot = -14.6175140351051 +380000 ekin = 0.251948675267255 | erot = 0.263529414055484 | epot = -15.1329921243191 | etot = -14.6175140349963 +381000 ekin = 0.228120837035106 | erot = 0.238958749468258 | epot = -15.0845936213795 | etot = -14.6175140348762 +382000 ekin = 0.204438854506711 | erot = 0.21672127051921 | epot = -15.0386741597778 | etot = -14.6175140347519 +383000 ekin = 0.182146263755408 | erot = 0.197591880984099 | epot = -14.9972521793719 | etot = -14.6175140346324 +384000 ekin = 0.162429780679591 | erot = 0.182311896923862 | epot = -14.9622557121303 | etot = -14.6175140345269 +385000 ekin = 0.14631062212392 | erot = 0.171555128910903 | epot = -14.9353797854787 | etot = -14.6175140344438 +386000 ekin = 0.134552389652504 | erot = 0.165895597224072 | epot = -14.9179620212652 | etot = -14.6175140343886 +387000 ekin = 0.127600986328474 | erot = 0.165779213533691 | epot = -14.9108942342261 | etot = -14.6175140343639 +388000 ekin = 0.125565151523057 | erot = 0.171500950984465 | epot = -14.9145801368767 | etot = -14.6175140343691 +389000 ekin = 0.128237001096924 | erot = 0.183188026636153 | epot = -14.9289390621345 | etot = -14.6175140344014 +390000 ekin = 0.135143637923019 | erot = 0.200788930663243 | epot = -14.953446603043 | etot = -14.6175140344567 +391000 ekin = 0.145616156499687 | erot = 0.224068074688667 | epot = -14.9871982657189 | etot = -14.6175140345306 +392000 ekin = 0.158862235246419 | erot = 0.252606362172197 | epot = -15.028982632037 | etot = -14.6175140346184 +393000 ekin = 0.174032087603182 | erot = 0.285808726840173 | epot = -15.0773548491589 | etot = -14.6175140347155 +394000 ekin = 0.190272707003279 | erot = 0.32292010751355 | epot = -15.130706849335 | etot = -14.6175140348181 +395000 ekin = 0.206769905101682 | erot = 0.363051013228993 | epot = -15.1873349532528 | etot = -14.6175140349222 +396000 ekin = 0.222780272469837 | erot = 0.405212687948367 | epot = -15.2455069954416 | etot = -14.6175140350234 +397000 ekin = 0.237655698718666 | erot = 0.448360183483368 | epot = -15.3035299173201 | etot = -14.6175140351181 +398000 ekin = 0.250862154069819 | erot = 0.491439914330298 | epot = -15.3598161036023 | etot = -14.6175140352022 +399000 ekin = 0.261993055953367 | erot = 0.533437059171161 | epot = -15.4129441503973 | etot = -14.6175140352727 +400000 ekin = 0.27077655050685 | erot = 0.573417887950022 | epot = -15.4617084737844 | etot = -14.6175140353276 +401000 ekin = 0.277075831015552 | erot = 0.610562842824378 | epot = -15.505152709206 | etot = -14.6175140353661 +402000 ekin = 0.280882158891387 | erot = 0.644187798759806 | epot = -15.5425839930396 | etot = -14.6175140353885 +403000 ekin = 0.282301228578668 | erot = 0.673752968642337 | epot = -15.5735682326172 | etot = -14.6175140353962 +404000 ekin = 0.281534519811851 | erot = 0.698860907482421 | epot = -15.5979094626856 | etot = -14.6175140353913 +405000 ekin = 0.278857975736577 | erot = 0.719246574878491 | epot = -15.6156185859914 | etot = -14.6175140353763 +406000 ekin = 0.27460055575904 | erot = 0.734763157396981 | epot = -15.6268777485092 | etot = -14.6175140353531 +407000 ekin = 0.269124923358191 | erot = 0.745367259285135 | epot = -15.632006217967 | etot = -14.6175140353237 +408000 ekin = 0.262811853165513 | erot = 0.75110627666519 | epot = -15.6314321651198 | etot = -14.6175140352891 +409000 ekin = 0.256049112192014 | erot = 0.752109968276038 | epot = -15.6256731157183 | etot = -14.6175140352503 +410000 ekin = 0.249224269809724 | erot = 0.748584332259421 | epot = -15.6153226372766 | etot = -14.6175140352074 +411000 ekin = 0.242720888553515 | erot = 0.74080910391814 | epot = -15.6010440276324 | etot = -14.6175140351607 +412000 ekin = 0.236916379506249 | erot = 0.729136085380527 | epot = -15.5835664999973 | etot = -14.6175140351105 +413000 ekin = 0.232179735243875 | erot = 0.713985498456682 | epot = -15.5636792687578 | etot = -14.6175140350572 +414000 ekin = 0.228867632642529 | erot = 0.695838652585608 | epot = -15.5422203202303 | etot = -14.6175140350022 +415000 ekin = 0.227317772308198 | erot = 0.675225695396014 | epot = -15.5200575026511 | etot = -14.6175140349469 +416000 ekin = 0.227838940778005 | erot = 0.65270826110506 | epot = -15.4980612367768 | etot = -14.6175140348937 +417000 ekin = 0.23069797086734 | erot = 0.628857925336074 | epot = -15.4770699310485 | etot = -14.6175140348451 +418000 ekin = 0.236104416121177 | erot = 0.604232291329939 | epot = -15.4578507422545 | etot = -14.6175140348034 +419000 ekin = 0.244194252200936 | erot = 0.579351108945467 | epot = -15.4410593959176 | etot = -14.6175140347712 +420000 ekin = 0.255014214169025 | erot = 0.554674986841681 | epot = -15.427203235761 | etot = -14.6175140347503 +421000 ekin = 0.268508458340867 | erot = 0.530589008737006 | epot = -15.4166115018197 | etot = -14.6175140347419 +422000 ekin = 0.284509119561056 | erot = 0.507392982381358 | epot = -15.4094161366888 | etot = -14.6175140347464 +423000 ekin = 0.302732060427453 | erot = 0.485299248119848 | epot = -15.4055453433108 | etot = -14.6175140347635 +424000 ekin = 0.322778728051846 | erot = 0.464438075671392 | epot = -15.4047308385151 | etot = -14.6175140347918 +425000 ekin = 0.344144594922978 | erot = 0.444869796713037 | epot = -15.4065284264654 | etot = -14.6175140348294 +426000 ekin = 0.366234204300236 | erot = 0.426602052984558 | epot = -15.4103502921584 | etot = -14.6175140348736 +427000 ekin = 0.388382398339839 | erot = 0.409609962240785 | epot = -15.4155063955021 | etot = -14.6175140349215 +428000 ekin = 0.409880900047347 | erot = 0.393856678092514 | epot = -15.4212516131098 | etot = -14.61751403497 +429000 ekin = 0.430009061106081 | erot = 0.379311788382045 | epot = -15.4268348845042 | etot = -14.617514035016 +430000 ekin = 0.448067283635938 | erot = 0.365965282400769 | epot = -15.4315466010937 | etot = -14.617514035057 +431000 ekin = 0.463411378722709 | erot = 0.353835411175237 | epot = -15.4347608249887 | etot = -14.6175140350907 +432000 ekin = 0.47548594153415 | erot = 0.342969616703567 | epot = -15.4359695933534 | etot = -14.6175140351157 +433000 ekin = 0.483854704019995 | erot = 0.333438714396017 | epot = -15.4348074535468 | etot = -14.6175140351308 +434000 ekin = 0.488225698517989 | erot = 0.325325491781988 | epot = -15.4310652254358 | etot = -14.6175140351358 +435000 ekin = 0.488469615216989 | erot = 0.318709988965469 | epot = -15.4246936393136 | etot = -14.6175140351312 +436000 ekin = 0.48462910079659 | erot = 0.313653867974335 | epot = -15.4157970038886 | etot = -14.6175140351176 +437000 ekin = 0.476917712283315 | erot = 0.310186654190433 | epot = -15.4046184015705 | etot = -14.6175140350967 +438000 ekin = 0.465707830234525 | erot = 0.308296241622533 | epot = -15.3915181069269 | etot = -14.6175140350699 +439000 ekin = 0.451507536799582 | erot = 0.307925153770196 | epot = -15.376946725609 | etot = -14.6175140350392 +440000 ekin = 0.434927659012326 | erot = 0.308973010492473 | epot = -15.3614147045113 | etot = -14.6175140350065 +441000 ekin = 0.416641657348227 | erot = 0.311304747383323 | epot = -15.3454604397054 | etot = -14.6175140349739 +442000 ekin = 0.397341542599983 | erot = 0.3147626187362 | epot = -15.3296181962795 | etot = -14.6175140349433 +443000 ekin = 0.377694362714098 | erot = 0.319179725729427 | epot = -15.3143881233596 | etot = -14.6175140349161 +444000 ekin = 0.358304425135514 | erot = 0.324393298190365 | epot = -15.3002117582193 | etot = -14.6175140348935 +445000 ekin = 0.339684383333994 | erot = 0.330254911560057 | epot = -15.2874533297702 | etot = -14.6175140348761 +446000 ekin = 0.322237701350787 | erot = 0.336636009508874 | epot = -15.276387745724 | etot = -14.6175140348643 +447000 ekin = 0.306253086582787 | erot = 0.343428242758822 | epot = -15.2671953641996 | etot = -14.617514034858 +448000 ekin = 0.291909091343146 | erot = 0.350538602021414 | epot = -15.2599617282214 | etot = -14.6175140348569 +449000 ekin = 0.279285717663623 | erot = 0.35788026308961 | epot = -15.2546800156141 | etot = -14.6175140348608 +450000 ekin = 0.268379332693062 | erot = 0.365360767817965 | epot = -15.2512541353807 | etot = -14.6175140348697 +451000 ekin = 0.259117719162389 | erot = 0.372869677561009 | epot = -15.2495014316067 | etot = -14.6175140348833 +452000 ekin = 0.251373384973236 | erot = 0.380268095671436 | epot = -15.2491555155464 | etot = -14.6175140349017 +453000 ekin = 0.244974824127414 | erot = 0.387382402365197 | epot = -15.249871261417 | etot = -14.6175140349243 +454000 ekin = 0.239716691076083 | erot = 0.39400413186188 | epot = -15.2512348578882 | etot = -14.6175140349502 +455000 ekin = 0.235370413814051 | erot = 0.399897145642462 | epot = -15.2527815944342 | etot = -14.6175140349777 +456000 ekin = 0.231696513790449 | erot = 0.40481218842498 | epot = -15.2540227372201 | etot = -14.6175140350047 +457000 ekin = 0.228459014431981 | erot = 0.40850770951526 | epot = -15.2544807589758 | etot = -14.6175140350286 +458000 ekin = 0.225441196082345 | erot = 0.410774705624049 | epot = -15.2537299367533 | etot = -14.6175140350469 +459000 ekin = 0.222461018940529 | erot = 0.411462514811891 | epot = -15.2514375688097 | etot = -14.6175140350572 +460000 ekin = 0.219384094438522 | erot = 0.410502136529 | epot = -15.2474002660254 | etot = -14.6175140350579 +461000 ekin = 0.216132245240083 | erot = 0.40792384413244 | epot = -15.2415701244207 | etot = -14.6175140350482 +462000 ekin = 0.212686361973293 | erot = 0.403866554423589 | epot = -15.2340669514251 | etot = -14.6175140350283 +463000 ekin = 0.209083218482802 | erot = 0.398577486489706 | epot = -15.2251747399718 | etot = -14.6175140349993 +464000 ekin = 0.205406888263705 | erot = 0.392401883856904 | epot = -15.2153228070839 | etot = -14.6175140349633 +465000 ekin = 0.201776197881055 | erot = 0.385763783461981 | epot = -15.205054016266 | etot = -14.617514034923 +466000 ekin = 0.198330130961163 | erot = 0.379139817336875 | epot = -15.1949839831792 | etot = -14.6175140348812 +467000 ekin = 0.195213224017084 | erot = 0.373028711257248 | epot = -15.1857559701149 | etot = -14.6175140348406 +468000 ekin = 0.192562810062079 | erot = 0.367919448414624 | epot = -15.1779962932805 | etot = -14.6175140348038 +469000 ekin = 0.190499545154634 | erot = 0.364261004085315 | epot = -15.1722745840127 | etot = -14.6175140347728 +470000 ekin = 0.189122086032537 | erot = 0.362436180586744 | epot = -15.1690723013681 | etot = -14.6175140347488 +471000 ekin = 0.188506156938585 | erot = 0.362741456207124 | epot = -15.1687616478783 | etot = -14.6175140347325 +472000 ekin = 0.188707621222025 | erot = 0.365373993438314 | epot = -15.1715956493842 | etot = -14.6175140347239 +473000 ekin = 0.189768618621823 | erot = 0.370426120543997 | epot = -15.1777087738881 | etot = -14.6175140347222 +474000 ekin = 0.191725397341228 | erot = 0.377886798112909 | epot = -15.1871262301805 | etot = -14.6175140347264 +475000 ekin = 0.194616213070748 | erot = 0.387648901412907 | epot = -15.1997791492191 | etot = -14.6175140347355 +476000 ekin = 0.19848763616064 | erot = 0.39952067815615 | epot = -15.2155223490651 | etot = -14.6175140347483 +477000 ekin = 0.203397790429832 | erot = 0.413239540255182 | epot = -15.2341513654491 | etot = -14.6175140347641 +478000 ekin = 0.209415519783212 | erot = 0.428486466927375 | epot = -15.2554160214929 | etot = -14.6175140347823 +479000 ekin = 0.216615156594683 | erot = 0.444899686772466 | epot = -15.2790288781699 | etot = -14.6175140348028 +480000 ekin = 0.225067223157677 | erot = 0.462086880018489 | epot = -15.3046681380017 | etot = -14.6175140348255 +481000 ekin = 0.234826185147703 | erot = 0.479635803739713 | epot = -15.3319760237384 | etot = -14.617514034851 +482000 ekin = 0.245916939355107 | erot = 0.497123799838186 | epot = -15.3605547740726 | etot = -14.6175140348793 +483000 ekin = 0.258322039580648 | erot = 0.514126984881418 | epot = -15.3899630593725 | etot = -14.6175140349104 +484000 ekin = 0.27197166705463 | erot = 0.530229960568927 | epot = -15.4197156625676 | etot = -14.6175140349441 +485000 ekin = 0.286738030809397 | erot = 0.545036619609846 | epot = -15.4492886853987 | etot = -14.6175140349795 +486000 ekin = 0.302435294441744 | erot = 0.55818212519067 | epot = -15.4781314546478 | etot = -14.6175140350154 +487000 ekin = 0.31882536985775 | erot = 0.569345540302742 | epot = -15.5056849452109 | etot = -14.6175140350504 +488000 ekin = 0.33562912085568 | erot = 0.578262027782569 | epot = -15.531405183721 | etot = -14.6175140350828 +489000 ekin = 0.352541803824768 | erot = 0.584733173542191 | epot = -15.5547890124778 | etot = -14.6175140351108 +490000 ekin = 0.369251041132819 | erot = 0.588633902375943 | epot = -15.575398978642 | etot = -14.6175140351332 +491000 ekin = 0.38545533994301 | erot = 0.589914693969638 | epot = -15.5928840690618 | etot = -14.6175140351491 +492000 ekin = 0.400881156477994 | erot = 0.588598334680196 | epot = -15.6069935263164 | etot = -14.6175140351582 +493000 ekin = 0.41529674637658 | erot = 0.584771169136983 | epot = -15.6175819506742 | etot = -14.6175140351607 +494000 ekin = 0.42852150310201 | erot = 0.578569614095072 | epot = -15.6246051523544 | etot = -14.6175140351573 +495000 ekin = 0.440430011857935 | erot = 0.570163426567811 | epot = -15.6281074735753 | etot = -14.6175140351496 +496000 ekin = 0.45095070631601 | erot = 0.559737766476832 | epot = -15.6282025079316 | etot = -14.6175140351387 +497000 ekin = 0.460059581797609 | erot = 0.547476355485017 | epot = -15.6250499724091 | etot = -14.6175140351264 +498000 ekin = 0.467769906491902 | erot = 0.533547985554597 | epot = -15.6188319271606 | etot = -14.6175140351141 +499000 ekin = 0.474119221072851 | erot = 0.51809827733209 | epot = -15.6097315335077 | etot = -14.6175140351027 +500000 ekin = 0.47915510663515 | erot = 0.501247978936972 | epot = -15.5979171206651 | etot = -14.617514035093 +501000 ekin = 0.482921233339145 | erot = 0.48309830408219 | epot = -15.5835335725062 | etot = -14.6175140350848 +502000 ekin = 0.485445093649468 | erot = 0.463742920559152 | epot = -15.5667020492864 | etot = -14.6175140350778 +503000 ekin = 0.486728599210218 | erot = 0.443285305605287 | epot = -15.5475279398865 | etot = -14.617514035071 +504000 ekin = 0.486742408088666 | erot = 0.421859374631512 | epot = -15.5261158177833 | etot = -14.6175140350632 +505000 ekin = 0.485424480828576 | erot = 0.399650657767878 | epot = -15.5025891736495 | etot = -14.617514035053 +506000 ekin = 0.482682973412862 | erot = 0.376914939267073 | epot = -15.4771119477192 | etot = -14.6175140350392 +507000 ekin = 0.478403198155678 | erot = 0.353991273960951 | epot = -15.4499085071374 | etot = -14.6175140350208 +508000 ekin = 0.472458052936543 | erot = 0.331306710133899 | epot = -15.4212787980677 | etot = -14.6175140349973 +509000 ekin = 0.464721062856492 | erot = 0.309370883447797 | epot = -15.3916059812731 | etot = -14.6175140349688 +510000 ekin = 0.455081004105159 | erot = 0.288759823578861 | epot = -15.3613548626198 | etot = -14.6175140349358 +511000 ekin = 0.443456979181393 | erot = 0.270089690707588 | epot = -15.3310607047887 | etot = -14.6175140348997 +512000 ekin = 0.42981284822046 | erot = 0.253982534898902 | epot = -15.3013094179813 | etot = -14.6175140348619 +513000 ekin = 0.414169942619743 | erot = 0.241027258547542 | epot = -15.2727112359918 | etot = -14.6175140348246 +514000 ekin = 0.396617122320061 | erot = 0.231739657368506 | epot = -15.2458708144779 | etot = -14.6175140347893 +515000 ekin = 0.377317407139222 | erot = 0.226525548757325 | epot = -15.2213569906545 | etot = -14.6175140347579 +516000 ekin = 0.356510629533878 | erot = 0.225650587239722 | epot = -15.1996752515054 | etot = -14.6175140347318 +517000 ekin = 0.334511811731657 | erot = 0.2292195098864 | epot = -15.1812453563299 | etot = -14.6175140347119 +518000 ekin = 0.311705249159968 | erot = 0.237166415926506 | epot = -15.1663856997852 | etot = -14.6175140346987 +519000 ekin = 0.288534562405324 | erot = 0.249256456193412 | epot = -15.1553050532911 | etot = -14.6175140346924 +520000 ekin = 0.265489234982117 | erot = 0.265098165450665 | epot = -15.1481014351253 | etot = -14.6175140346926 +521000 ekin = 0.243088358087376 | erot = 0.28416474515935 | epot = -15.1447671379453 | etot = -14.6175140346986 +522000 ekin = 0.221862437060409 | erot = 0.305821970139557 | epot = -15.1451984419098 | etot = -14.6175140347099 +523000 ekin = 0.202334169775844 | erot = 0.329360070796281 | epot = -15.1492082752976 | etot = -14.6175140347255 +524000 ekin = 0.18499909107587 | erot = 0.354026911469942 | epot = -15.1565400372904 | etot = -14.6175140347446 +525000 ekin = 0.170306912739125 | erot = 0.379059948770509 | epot = -15.1668808962761 | etot = -14.6175140347665 +526000 ekin = 0.158644243148338 | erot = 0.403715126924459 | epot = -15.1798734048633 | etot = -14.6175140347905 +527000 ekin = 0.150319367666652 | erot = 0.427291025811595 | epot = -15.1951244282948 | etot = -14.6175140348166 +528000 ekin = 0.145549592055536 | erot = 0.449147424932796 | epot = -15.2122110518326 | etot = -14.6175140348442 +529000 ekin = 0.144451603985221 | erot = 0.468718121850073 | epot = -15.2306837607087 | etot = -14.6175140348734 +530000 ekin = 0.14703526713895 | erot = 0.485518371010905 | epot = -15.2500676730542 | etot = -14.6175140349043 +531000 ekin = 0.153201203685084 | erot = 0.499147835496798 | epot = -15.2698630741185 | etot = -14.6175140349366 +532000 ekin = 0.162742448480689 | erot = 0.509290301682419 | epot = -15.2895467851334 | etot = -14.6175140349703 +533000 ekin = 0.175350354883052 | erot = 0.515711587206659 | epot = -15.3085759770945 | etot = -14.6175140350048 +534000 ekin = 0.190624856014791 | erot = 0.518257146630773 | epot = -15.3263960376849 | etot = -14.6175140350393 +535000 ekin = 0.2080884935382 | erot = 0.516850140105121 | epot = -15.342452668716 | etot = -14.6175140350727 +536000 ekin = 0.227204325844129 | erot = 0.511491240066285 | epot = -15.356209601014 | etot = -14.6175140351035 +537000 ekin = 0.247396768814447 | erot = 0.502260311074919 | epot = -15.3671711150196 | etot = -14.6175140351302 +538000 ekin = 0.268074342414832 | erot = 0.489319600962367 | epot = -15.374907978528 | etot = -14.6175140351508 +539000 ekin = 0.288653182934819 | erot = 0.472917679673217 | epot = -15.3790848977717 | etot = -14.6175140351637 +540000 ekin = 0.308579985827036 | erot = 0.453392904740712 | epot = -15.3794869257353 | etot = -14.6175140351676 +541000 ekin = 0.32735300819234 | erot = 0.431174973012169 | epot = -15.3760420163656 | etot = -14.6175140351611 +542000 ekin = 0.344539853507862 | erot = 0.406783142890278 | epot = -15.368837031542 | etot = -14.6175140351439 +543000 ekin = 0.359790986514659 | erot = 0.380819988065077 | epot = -15.3581250096959 | etot = -14.6175140351161 +544000 ekin = 0.372848263091261 | erot = 0.353960030673725 | epot = -15.3443223288437 | etot = -14.6175140350787 +545000 ekin = 0.383548167009949 | erot = 0.326933212483018 | epot = -15.3279954145262 | etot = -14.6175140350332 +546000 ekin = 0.391819867385597 | erot = 0.30050378423916 | epot = -15.3098376866063 | etot = -14.6175140349815 +547000 ekin = 0.397678590181961 | erot = 0.275445713888184 | epot = -15.2906383389964 | etot = -14.6175140349263 +548000 ekin = 0.401215088504123 | erot = 0.252516050367 | epot = -15.2712451737411 | etot = -14.6175140348699 +549000 ekin = 0.402582175511822 | erot = 0.232427794768509 | epot = -15.2525240050958 | etot = -14.6175140348155 +550000 ekin = 0.401979352686767 | erot = 0.215823740833757 | epot = -15.2353171282858 | etot = -14.6175140347652 +551000 ekin = 0.399636550192594 | erot = 0.203252510910356 | epot = -15.2204030958242 | etot = -14.6175140347213 +552000 ekin = 0.39579793483933 | erot = 0.19514771457426 | epot = -15.2084596840996 | etot = -14.617514034686 +553000 ekin = 0.390706676474511 | erot = 0.191810879117678 | epot = -15.2000315902533 | etot = -14.6175140346611 +554000 ekin = 0.384591526956334 | erot = 0.193398609454572 | epot = -15.1955041710586 | etot = -14.6175140346477 +555000 ekin = 0.37765606833088 | erot = 0.19991436289407 | epot = -15.1950844658717 | etot = -14.6175140346467 +556000 ekin = 0.370071512613894 | erot = 0.211205266307038 | epot = -15.1987908135787 | etot = -14.6175140346578 +557000 ekin = 0.361973939271072 | erot = 0.22696451510277 | epot = -15.2064524890543 | etot = -14.6175140346805 +558000 ekin = 0.353466765019157 | erot = 0.246739996101886 | epot = -15.2177207958342 | etot = -14.6175140347132 +559000 ekin = 0.344628961763677 | erot = 0.269949765670226 | epot = -15.2320927621875 | etot = -14.6175140347536 +560000 ekin = 0.335528980566657 | erot = 0.295904778795777 | epot = -15.2489477941611 | etot = -14.6175140347987 +561000 ekin = 0.326243446080443 | erot = 0.323838714908469 | epot = -15.2675961958334 | etot = -14.6175140348445 +562000 ekin = 0.31687848681263 | erot = 0.35294385755285 | epot = -15.2873363792525 | etot = -14.617514034887 +563000 ekin = 0.307590234581101 | erot = 0.382410843957197 | epot = -15.3075151134611 | etot = -14.6175140349228 +564000 ekin = 0.298599911427017 | erot = 0.411468934029061 | epot = -15.3275828804049 | etot = -14.6175140349488 +565000 ekin = 0.290198521501092 | erot = 0.439422606477171 | epot = -15.3471351629423 | etot = -14.617514034964 +566000 ekin = 0.282736992095573 | erot = 0.46568015891933 | epot = -15.365931185984 | etot = -14.6175140349691 +567000 ekin = 0.276599956454062 | erot = 0.489770841522339 | epot = -15.3838848329429 | etot = -14.6175140349665 +568000 ekin = 0.272165052790826 | erot = 0.511348887820125 | epot = -15.4010279755712 | etot = -14.6175140349602 +569000 ekin = 0.269753809413461 | erot = 0.530185258476706 | epot = -15.4174531028449 | etot = -14.6175140349547 +570000 ekin = 0.269583567607582 | erot = 0.546150320474166 | epot = -15.4332479230358 | etot = -14.617514034954 +571000 ekin = 0.271731068578169 | erot = 0.559192265325146 | epot = -15.4484373688639 | etot = -14.6175140349606 +572000 ekin = 0.27611649568743 | erot = 0.569316321633573 | epot = -15.4629468522957 | etot = -14.6175140349747 +573000 ekin = 0.282512256444883 | erot = 0.576569321997748 | epot = -15.4765956134373 | etot = -14.6175140349947 +574000 ekin = 0.290574483947772 | erot = 0.581030490761115 | epot = -15.4891190097262 | etot = -14.6175140350173 +575000 ekin = 0.299890113326873 | erot = 0.582808418137228 | epot = -15.5002125665028 | etot = -14.6175140350387 +576000 ekin = 0.310029076131071 | erot = 0.582041678954515 | epot = -15.5095847901411 | etot = -14.6175140350555 +577000 ekin = 0.320591144135804 | erot = 0.578899817193121 | epot = -15.5170049963945 | etot = -14.6175140350656 +578000 ekin = 0.331239680817777 | erot = 0.573581904321184 | epot = -15.5223356202071 | etot = -14.6175140350681 +579000 ekin = 0.341718767395671 | erot = 0.566311213814667 | epot = -15.5255440162741 | etot = -14.6175140350637 +580000 ekin = 0.351854361646072 | erot = 0.557326170820678 | epot = -15.5266945675208 | etot = -14.6175140350541 +581000 ekin = 0.361543170719775 | erot = 0.54686904311153 | epot = -15.5259262488726 | etot = -14.6175140350413 +582000 ekin = 0.370734291431498 | erot = 0.535174473618245 | epot = -15.5234228000773 | etot = -14.6175140350275 +583000 ekin = 0.37940854514609 | erot = 0.522459863754552 | epot = -15.5193824439152 | etot = -14.6175140350145 +584000 ekin = 0.38755933833177 | erot = 0.50891899994006 | epot = -15.5139923732754 | etot = -14.6175140350036 +585000 ekin = 0.395177418309126 | erot = 0.494719483695348 | epot = -15.5074109369997 | etot = -14.6175140349952 +586000 ekin = 0.402240533516271 | erot = 0.480003760425467 | epot = -15.4997583289313 | etot = -14.6175140349896 +587000 ekin = 0.408707997144929 | erot = 0.464893014295021 | epot = -15.4911150464262 | etot = -14.6175140349863 +588000 ekin = 0.414519545772604 | erot = 0.449492951761529 | epot = -15.4815265325189 | etot = -14.6175140349848 +589000 ekin = 0.419597612554971 | erot = 0.433900487906506 | epot = -15.4710121354457 | etot = -14.6175140349842 +590000 ekin = 0.423852083806182 | erot = 0.418210489544302 | epot = -15.4595766083342 | etot = -14.6175140349837 +591000 ekin = 0.42718667151707 | erot = 0.402521929659384 | epot = -15.4472226361591 | etot = -14.6175140349827 +592000 ekin = 0.429506137373247 | erot = 0.386943005730352 | epot = -15.4339631780839 | etot = -14.6175140349803 +593000 ekin = 0.430723706116147 | erot = 0.371594936610811 | epot = -15.4198326777029 | etot = -14.617514034976 +594000 ekin = 0.430768094953345 | erot = 0.356614269838259 | epot = -15.4048963997609 | etot = -14.6175140349693 +595000 ekin = 0.429589664829847 | erot = 0.342153609171636 | epot = -15.3892573089616 | etot = -14.6175140349601 +596000 ekin = 0.427165296133148 | erot = 0.328380718542492 | epot = -15.3730600496239 | etot = -14.6175140349483 +597000 ekin = 0.42350165849966 | erot = 0.315475989403582 | epot = -15.3564916828373 | etot = -14.6175140349341 +598000 ekin = 0.418636501255305 | erot = 0.303628359581859 | epot = -15.339778895755 | etot = -14.6175140349179 +599000 ekin = 0.412638207582272 | erot = 0.293029673723798 | epot = -15.3231819162063 | etot = -14.6175140349002 +600000 ekin = 0.405603414753522 | erot = 0.28386763722636 | epot = -15.3069850868619 | etot = -14.617514034882 +601000 ekin = 0.397652939448492 | erot = 0.276317573361084 | epot = -15.2914845476736 | etot = -14.617514034864 +602000 ekin = 0.388926339151588 | erot = 0.270533300128844 | epot = -15.2769736741277 | etot = -14.6175140348473 +603000 ekin = 0.379575547710976 | erot = 0.266637582798786 | epot = -15.2637271653425 | etot = -14.6175140348328 +604000 ekin = 0.369758112224373 | erot = 0.264712769809576 | epot = -15.2519849168554 | etot = -14.6175140348215 +605000 ekin = 0.35963061496451 | erot = 0.264792359550224 | epot = -15.2419370093288 | etot = -14.6175140348141 +606000 ekin = 0.349342882571248 | erot = 0.266854337886836 | epot = -15.2337112552692 | etot = -14.6175140348112 +607000 ekin = 0.339033558751512 | erot = 0.270817131627415 | epot = -15.2273647251918 | etot = -14.6175140348128 +608000 ekin = 0.32882753825937 | erot = 0.276538908097057 | epot = -15.2228804811754 | etot = -14.617514034819 +609000 ekin = 0.318835621087622 | erot = 0.283820700144174 | epot = -15.2201703560608 | etot = -14.617514034829 +610000 ekin = 0.309156542568317 | erot = 0.292413461055651 | epot = -15.219084038466 | etot = -14.617514034842 +611000 ekin = 0.299881272108214 | erot = 0.302028697869802 | epot = -15.2194240048347 | etot = -14.6175140348566 +612000 ekin = 0.291099167856268 | erot = 0.312351863789569 | epot = -15.2209650665173 | etot = -14.6175140348715 +613000 ekin = 0.282905257831642 | erot = 0.323057294042038 | epot = -15.2234765867589 | etot = -14.6175140348852 +614000 ekin = 0.275407632339941 | erot = 0.333823223652897 | epot = -15.2267448908892 | etot = -14.6175140348963 +615000 ekin = 0.26873372556727 | erot = 0.344345386320857 | epot = -15.2305931467922 | etot = -14.6175140349041 +616000 ekin = 0.263034181136603 | erot = 0.354347879927045 | epot = -15.2348960959716 | etot = -14.617514034908 +617000 ekin = 0.258483071857928 | erot = 0.363590372787296 | epot = -15.2395874795532 | etot = -14.617514034908 +618000 ekin = 0.255273496413749 | erot = 0.371871254538884 | epot = -15.2446587858574 | etot = -14.6175140349047 +619000 ekin = 0.253608004174875 | erot = 0.379026921287401 | epot = -15.2501489603618 | etot = -14.6175140348996 +620000 ekin = 0.253683881422301 | erot = 0.384927934514049 | epot = -15.2561258508302 | etot = -14.6175140348939 +621000 ekin = 0.255674023710173 | erot = 0.389473226072584 | epot = -15.2626612846724 | etot = -14.6175140348896 +622000 ekin = 0.25970485336799 | erot = 0.392583779640473 | epot = -15.269802667897 | etot = -14.6175140348886 +623000 ekin = 0.265833429999859 | erot = 0.394197274406549 | epot = -15.2775447392987 | etot = -14.6175140348923 +624000 ekin = 0.274026439188702 | erot = 0.394265031625425 | epot = -15.2858055057161 | etot = -14.6175140349019 +625000 ekin = 0.28414401573885 | erot = 0.392752285177019 | epot = -15.2944103358336 | etot = -14.6175140349177 +626000 ekin = 0.295931256226573 | erot = 0.389642344381245 | epot = -15.303087635547 | etot = -14.6175140349392 +627000 ekin = 0.309019727830035 | erot = 0.384944676505037 | epot = -15.3114784393 | etot = -14.6175140349649 +628000 ekin = 0.322940275279346 | erot = 0.378706350960174 | epot = -15.3191606612318 | etot = -14.6175140349923 +629000 ekin = 0.337147043698441 | erot = 0.371025698974895 | epot = -15.3256867776918 | etot = -14.6175140350184 +630000 ekin = 0.351051052995002 | erot = 0.362066500827022 | epot = -15.330631588862 | etot = -14.61751403504 +631000 ekin = 0.364060148818953 | erot = 0.352070586246035 | epot = -15.3336447701185 | etot = -14.6175140350535 +632000 ekin = 0.375621025661416 | erot = 0.341366514681189 | epot = -15.334501575399 | etot = -14.6175140350563 +633000 ekin = 0.385258541224309 | erot = 0.330372092305621 | epot = -15.3331446685767 | etot = -14.6175140350468 +634000 ekin = 0.392607865616072 | erot = 0.319588956493667 | epot = -15.329710857134 | etot = -14.6175140350243 +635000 ekin = 0.397436097277817 | erot = 0.309588318033289 | epot = -15.3245384503008 | etot = -14.6175140349897 +636000 ekin = 0.399651602684335 | erot = 0.300988094378234 | epot = -15.3181537320079 | etot = -14.6175140349453 +637000 ekin = 0.399301141331978 | erot = 0.294422893568735 | epot = -15.3112380697947 | etot = -14.617514034894 +638000 ekin = 0.396556439146157 | erot = 0.290509369489293 | epot = -15.3045798434752 | etot = -14.6175140348397 +639000 ekin = 0.391692975512685 | erot = 0.289810143796979 | epot = -15.2990171540957 | etot = -14.6175140347861 +640000 ekin = 0.385064212932825 | erot = 0.29279965311316 | epot = -15.2953779007829 | etot = -14.6175140347369 +641000 ekin = 0.377074355549984 | erot = 0.299834934662478 | epot = -15.2944233249076 | etot = -14.6175140346951 +642000 ekin = 0.368152133960252 | erot = 0.311133625025682 | epot = -15.2967997936491 | etot = -14.6175140346632 +643000 ekin = 0.35872729827394 | erot = 0.326760494743215 | epot = -15.3030018276596 | etot = -14.6175140346425 +644000 ekin = 0.349210670242454 | erot = 0.346622862553666 | epot = -15.3133475674301 | etot = -14.6175140346339 +645000 ekin = 0.339977915473995 | erot = 0.370474376279531 | epot = -15.3279663263912 | etot = -14.6175140346376 +646000 ekin = 0.331356734048571 | erot = 0.397926004728945 | epot = -15.3467967734306 | etot = -14.6175140346531 +647000 ekin = 0.323616951061498 | erot = 0.428462692621698 | epot = -15.3695936783626 | etot = -14.6175140346794 +648000 ekin = 0.316962984679426 | erot = 0.461463981263885 | epot = -15.395941000659 | etot = -14.6175140347157 +649000 ekin = 0.311528303721651 | erot = 0.496226945505972 | epot = -15.4252692839882 | etot = -14.6175140347606 +650000 ekin = 0.307371814502134 | erot = 0.531990113311391 | epot = -15.4568759626263 | etot = -14.6175140348127 +651000 ekin = 0.304476169211803 | erot = 0.567957247022998 | epot = -15.4899474511054 | etot = -14.6175140348706 +652000 ekin = 0.302748327843514 | erot = 0.603320352538697 | epot = -15.5235827153148 | etot = -14.6175140349326 +653000 ekin = 0.302022769690169 | erot = 0.637281675063339 | epot = -15.5568184797505 | etot = -14.617514034997 +654000 ekin = 0.302067723594894 | erot = 0.669074745115614 | epot = -15.5886565037725 | etot = -14.617514035062 +655000 ekin = 0.30259467177562 | erot = 0.697984728109731 | epot = -15.6180934350106 | etot = -14.6175140351253 +656000 ekin = 0.30327116127458 | erot = 0.723368330431443 | epot = -15.6441535268905 | etot = -14.6175140351845 +657000 ekin = 0.303736663271753 | erot = 0.744673311811842 | epot = -15.665924010321 | etot = -14.6175140352374 +658000 ekin = 0.303620889263354 | erot = 0.761457272709825 | epot = -15.6825921972547 | etot = -14.6175140352815 +659000 ekin = 0.302563666908929 | erot = 0.773404945480537 | epot = -15.6934826477038 | etot = -14.6175140353143 +660000 ekin = 0.300235395695977 | erot = 0.780343280385416 | epot = -15.6980927114156 | etot = -14.6175140353342 +661000 ekin = 0.2963557105327 | erot = 0.782250083092817 | epot = -15.6961198289653 | etot = -14.6175140353398 +662000 ekin = 0.290710478297869 | erot = 0.779257959177475 | epot = -15.6874824728057 | etot = -14.6175140353303 +663000 ekin = 0.283165147464189 | erot = 0.771650651991606 | epot = -15.672329834762 | etot = -14.6175140353062 +664000 ekin = 0.27367342717685 | erot = 0.75985056245593 | epot = -15.6510380249012 | etot = -14.6175140352684 +665000 ekin = 0.262280913452633 | erot = 0.744397727319261 | epot = -15.6241926759909 | etot = -14.617514035219 +666000 ekin = 0.249123647022576 | erot = 0.725921231745041 | epot = -15.5925589139283 | etot = -14.6175140351607 +667000 ekin = 0.234422061210095 | erot = 0.705104954965518 | epot = -15.5570410512721 | etot = -14.6175140350965 +668000 ekin = 0.218471158369142 | erot = 0.682650243125394 | epot = -15.5186354365242 | etot = -14.6175140350297 +669000 ekin = 0.201627981911554 | erot = 0.659238455807285 | epot = -15.4783804726821 | etot = -14.6175140349633 +670000 ekin = 0.184297501938695 | erot = 0.635496303881749 | epot = -15.4373078407206 | etot = -14.6175140349002 +671000 ekin = 0.166917915804586 | erot = 0.611966525748987 | epot = -15.3963984763963 | etot = -14.6175140348427 +672000 ekin = 0.149946120673763 | erot = 0.589085832362546 | epot = -15.3565459878289 | etot = -14.6175140347926 +673000 ekin = 0.133843801904168 | erot = 0.567171306813735 | epot = -15.3185291434688 | etot = -14.6175140347509 +674000 ekin = 0.119064262674211 | erot = 0.546415679822031 | epot = -15.2829939772145 | etot = -14.6175140347182 +675000 ekin = 0.106039855016797 | erot = 0.526891195483695 | epot = -15.250445085195 | etot = -14.6175140346945 +676000 ekin = 0.0951697078771964 | erot = 0.508561175679673 | epot = -15.2212449182363 | etot = -14.6175140346794 +677000 ekin = 0.0868074519861108 | erot = 0.491297978911151 | epot = -15.1956194655695 | etot = -14.6175140346723 +678000 ekin = 0.0812485969713162 | erot = 0.47490530110032 | epot = -15.173667932744 | etot = -14.6175140346723 +679000 ekin = 0.0787177619801643 | erot = 0.459143233465844 | epot = -15.1553750301248 | etot = -14.6175140346788 +680000 ekin = 0.079356202465094 | erot = 0.443753980650321 | epot = -15.1406242178063 | etot = -14.6175140346909 +681000 ekin = 0.0832104900793129 | erot = 0.428486254342671 | epot = -15.1292107791298 | etot = -14.6175140347078 +682000 ekin = 0.0902236865228784 | erot = 0.41311688093406 | epot = -15.1208546021859 | etot = -14.617514034729 +683000 ekin = 0.100230543462783 | erot = 0.397468585264983 | epot = -15.1152131634811 | etot = -14.6175140347533 +684000 ekin = 0.112958164259223 | erot = 0.38142345901904 | epot = -15.1118956580582 | etot = -14.61751403478 +685000 ekin = 0.128033094046448 | erot = 0.364932120277571 | epot = -15.1104792491317 | etot = -14.6175140348077 +686000 ekin = 0.144995008361815 | erot = 0.348018922992721 | epot = -15.1105279661897 | etot = -14.6175140348351 +687000 ekin = 0.163316207854869 | erot = 0.330783730220898 | epot = -15.1116139729366 | etot = -14.6175140348608 +688000 ekin = 0.18242523421552 | erot = 0.313400732953528 | epot = -15.1133400020522 | etot = -14.6175140348832 +689000 ekin = 0.201732335852404 | erot = 0.296114640200911 | epot = -15.1153610109544 | etot = -14.6175140349011 +690000 ekin = 0.220654383890837 | erot = 0.2792343742397 | epot = -15.1174027930443 | etot = -14.6175140349138 +691000 ekin = 0.238637189924079 | erot = 0.263124260135935 | epot = -15.1192754849806 | etot = -14.6175140349206 +692000 ekin = 0.255173895595862 | erot = 0.248192653896372 | epot = -15.120880584414 | etot = -14.6175140349217 +693000 ekin = 0.269818995117389 | erot = 0.23487802400786 | epot = -15.1222110540428 | etot = -14.6175140349175 +694000 ekin = 0.282198402188406 | erot = 0.223632668705058 | epot = -15.1233451058024 | etot = -14.6175140349089 +695000 ekin = 0.292016609392508 | erot = 0.214904477347547 | epot = -15.1244351216369 | etot = -14.6175140348968 +696000 ekin = 0.299062308190414 | erot = 0.209117382946464 | epot = -15.125693726019 | etot = -14.6175140348821 +697000 ekin = 0.303213809971508 | erot = 0.20665136156702 | epot = -15.1273792064044 | etot = -14.6175140348658 +698000 ekin = 0.304445256191661 | erot = 0.207822979228463 | epot = -15.1297822702686 | etot = -14.6175140348484 +699000 ekin = 0.302833983904557 | erot = 0.212867544423975 | epot = -15.133215563159 | etot = -14.6175140348305 +700000 ekin = 0.298568596343091 | erot = 0.221923881122192 | epot = -15.1380065122771 | etot = -14.6175140348118 +701000 ekin = 0.291956369738192 | erot = 0.235022588975887 | epot = -15.1444929935065 | etot = -14.6175140347924 +702000 ekin = 0.283427734153971 | erot = 0.252078414120766 | epot = -15.1530201830474 | etot = -14.6175140347727 +703000 ekin = 0.273534855577063 | erot = 0.272887068860917 | epot = -15.1639359591908 | etot = -14.6175140347528 +704000 ekin = 0.262941046164718 | erot = 0.297126498876258 | epot = -15.1775815797747 | etot = -14.6175140347337 +705000 ekin = 0.252398060444993 | erot = 0.324362359960494 | epot = -15.1942744551228 | etot = -14.6175140347173 +706000 ekin = 0.242709489752809 | erot = 0.35405734989386 | epot = -15.2142808743525 | etot = -14.6175140347058 +707000 ekin = 0.23468046525944 | erot = 0.385584073394854 | epot = -15.2377785733566 | etot = -14.6175140347023 +708000 ekin = 0.229056562326985 | erot = 0.418241319395694 | epot = -15.2648119164327 | etot = -14.61751403471 +709000 ekin = 0.226457657534062 | erot = 0.451273895784643 | epot = -15.2952455880503 | etot = -14.6175140347316 +710000 ekin = 0.227314828596047 | erot = 0.483896330832059 | epot = -15.3287251941968 | etot = -14.6175140347687 +711000 ekin = 0.231819479497758 | erot = 0.51532074217238 | epot = -15.3646542564917 | etot = -14.6175140348216 +712000 ekin = 0.239893150549453 | erot = 0.544788749313893 | epot = -15.4021959347515 | etot = -14.6175140348881 +713000 ekin = 0.251183758823612 | erot = 0.571606341189966 | epot = -15.4403041349782 | etot = -14.6175140349646 +714000 ekin = 0.265090036185669 | erot = 0.595179886373849 | epot = -15.4777839576048 | etot = -14.6175140350453 +715000 ekin = 0.280811306968513 | erot = 0.615050345045216 | epot = -15.5133756871376 | etot = -14.6175140351238 +716000 ekin = 0.297415784950172 | erot = 0.63092216570443 | epot = -15.5458519858484 | etot = -14.6175140351938 +717000 ekin = 0.313918116237496 | erot = 0.642683345317361 | epot = -15.5741154968044 | etot = -14.6175140352495 +718000 ekin = 0.329356373326515 | erot = 0.650413757300699 | epot = -15.597284165914 | etot = -14.6175140352868 +719000 ekin = 0.342860093483698 | erot = 0.654380316354833 | epot = -15.6147544451418 | etot = -14.6175140353033 +720000 ekin = 0.353703497402146 | erot = 0.655019233384794 | epot = -15.6262367660857 | etot = -14.6175140352987 +721000 ekin = 0.361340844904821 | erot = 0.652906431496425 | epot = -15.6317613116759 | etot = -14.6175140352746 +722000 ekin = 0.365423978940444 | erot = 0.648719378780955 | epot = -15.6316573929551 | etot = -14.6175140352337 +723000 ekin = 0.365803989071099 | erot = 0.643193727890457 | epot = -15.6265117521414 | etot = -14.6175140351799 +724000 ekin = 0.362520178744054 | erot = 0.637078359572984 | epot = -15.6171125734343 | etot = -14.6175140351172 +725000 ekin = 0.355779938479084 | erot = 0.631092082280464 | epot = -15.6043860558097 | etot = -14.6175140350502 +726000 ekin = 0.345932952940548 | erot = 0.625884613514222 | epot = -15.5893316014373 | etot = -14.6175140349826 +727000 ekin = 0.333442641404433 | erot = 0.622003743386452 | epot = -15.572960419709 | etot = -14.6175140349181 +728000 ekin = 0.31885705049608 | erot = 0.619869891937983 | epot = -15.5562409772938 | etot = -14.6175140348597 +729000 ekin = 0.30278072495631 | erot = 0.61975869169039 | epot = -15.5400534514564 | etot = -14.6175140348097 +730000 ekin = 0.285848455040377 | erot = 0.621791770571061 | epot = -15.5251542603808 | etot = -14.6175140347694 +731000 ekin = 0.26870127220438 | erot = 0.625935552811994 | epot = -15.5121508597562 | etot = -14.6175140347399 +732000 ekin = 0.251964649663544 | erot = 0.632007594592584 | epot = -15.5014862789777 | etot = -14.6175140347215 +733000 ekin = 0.236228569496369 | erot = 0.639689689353592 | epot = -15.4934322935641 | etot = -14.6175140347141 +734000 ekin = 0.2220289607466 | erot = 0.64854669871573 | epot = -15.4880896941798 | etot = -14.6175140347175 +735000 ekin = 0.209830023527896 | erot = 0.658049804518268 | epot = -15.4853938627768 | etot = -14.6175140347306 +736000 ekin = 0.20000716676131 | erot = 0.667602683400117 | epot = -15.4851238849144 | etot = -14.6175140347529 +737000 ekin = 0.192830719625365 | erot = 0.676569044421737 | epot = -15.4869137988309 | etot = -14.6175140347838 +738000 ekin = 0.188451200585985 | erot = 0.684300102138329 | epot = -15.4902653375465 | etot = -14.6175140348222 +739000 ekin = 0.186887639937117 | erot = 0.6901609006521 | epot = -15.4945625754563 | etot = -14.6175140348671 +740000 ekin = 0.18802106841102 | erot = 0.693554915035337 | epot = -15.4990900183636 | etot = -14.6175140349173 +741000 ekin = 0.191595568995591 | erot = 0.693946922730827 | epot = -15.5030565266968 | etot = -14.6175140349704 +742000 ekin = 0.197228843628703 | erot = 0.690884208638806 | epot = -15.5056270872919 | etot = -14.6175140350244 +743000 ekin = 0.204433503637974 | erot = 0.684016821527692 | epot = -15.5059643602413 | etot = -14.6175140350756 +744000 ekin = 0.212648433381792 | erot = 0.673116668202608 | epot = -15.503279136705 | etot = -14.6175140351206 +745000 ekin = 0.221277722248228 | erot = 0.658094727364962 | epot = -15.4968864847688 | etot = -14.6175140351556 +746000 ekin = 0.229733012317398 | erot = 0.639014583780834 | epot = -15.4862616312757 | etot = -14.6175140351775 +747000 ekin = 0.23747404414407 | erot = 0.616100096672176 | epot = -15.4710881760002 | etot = -14.6175140351839 +748000 ekin = 0.244042266762415 | erot = 0.589734872786552 | epot = -15.4512911747231 | etot = -14.6175140351741 +749000 ekin = 0.249083597952522 | erot = 0.560451518402465 | epot = -15.4270491515038 | etot = -14.6175140351488 +750000 ekin = 0.25235833014632 | erot = 0.528910066810374 | epot = -15.3987824320668 | etot = -14.6175140351102 +751000 ekin = 0.253738423480709 | erot = 0.495866496253692 | epot = -15.3671189547962 | etot = -14.6175140350618 +752000 ekin = 0.253194394014668 | erot = 0.462133785332355 | epot = -15.3328422143545 | etot = -14.6175140350075 +753000 ekin = 0.250775308154698 | erot = 0.428539072349797 | epot = -15.2968284154564 | etot = -14.6175140349519 +754000 ekin = 0.246585878545855 | erot = 0.395880964578259 | epot = -15.2599808780229 | etot = -14.6175140348988 +755000 ekin = 0.240764398112151 | erot = 0.364890850085332 | epot = -15.2231692830489 | etot = -14.6175140348514 +756000 ekin = 0.233464471042371 | erot = 0.33620133003052 | epot = -15.1871798358848 | etot = -14.6175140348119 +757000 ekin = 0.224842467157428 | erot = 0.310323830730607 | epot = -15.1526803326694 | etot = -14.6175140347814 +758000 ekin = 0.215051562420606 | erot = 0.287636293953365 | epot = -15.1202018911339 | etot = -14.61751403476 +759000 ekin = 0.204242275875609 | erot = 0.268380753510832 | epot = -15.090137064133 | etot = -14.6175140347465 +760000 ekin = 0.192568636064991 | erot = 0.252669695564108 | epot = -15.0627523663688 | etot = -14.6175140347397 +761000 ekin = 0.180198520175589 | erot = 0.240499428913179 | epot = -15.038211983826 | etot = -14.6175140347373 +762000 ekin = 0.167326299029085 | erot = 0.231768292969539 | epot = -15.0166086267357 | etot = -14.617514034737 +763000 ekin = 0.15418568590204 | erot = 0.226297425418118 | epot = -14.997997146057 | etot = -14.6175140347368 +764000 ekin = 0.141060632749147 | erot = 0.223852003350697 | epot = -14.9824266708347 | etot = -14.6175140347349 +765000 ekin = 0.128292252297103 | erot = 0.224161332820243 | epot = -14.9699676198474 | etot = -14.61751403473 +766000 ekin = 0.116280064488639 | erot = 0.226936813025351 | epot = -14.9607309122354 | etot = -14.6175140347214 +767000 ekin = 0.105476340627594 | erot = 0.231887507272404 | epot = -14.9548778826094 | etot = -14.6175140347094 +768000 ekin = 0.0963728909465988 | erot = 0.23873364134698 | epot = -14.952620566988 | etot = -14.6175140346944 +769000 ekin = 0.0894802427438104 | erot = 0.247218655410706 | epot = -14.9542129328319 | etot = -14.6175140346774 +770000 ekin = 0.0852997361098734 | erot = 0.257120353609604 | epot = -14.9599341243794 | etot = -14.6175140346599 +771000 ekin = 0.0842896183574806 | erot = 0.268261228609983 | epot = -14.9700648816113 | etot = -14.6175140346438 +772000 ekin = 0.0868267987479503 | erot = 0.280517313420827 | epot = -14.9848581468001 | etot = -14.6175140346313 +773000 ekin = 0.0931666172479738 | erot = 0.29382416266062 | epot = -15.0045048145334 | etot = -14.6175140346248 +774000 ekin = 0.103403843826315 | erot = 0.308178073397328 | epot = -15.0290959518505 | etot = -14.6175140346269 +775000 ekin = 0.117439110045059 | erot = 0.323630675217718 | epot = -15.0585838199028 | etot = -14.61751403464 +776000 ekin = 0.134955835364923 | erot = 0.340275613675133 | epot = -15.0927454837062 | etot = -14.6175140346661 +777000 ekin = 0.155413263634583 | erot = 0.3582278427454 | epot = -15.1311551410863 | etot = -14.6175140347063 +778000 ekin = 0.178060391220183 | erot = 0.377596905888865 | epot = -15.1731713318691 | etot = -14.6175140347601 +779000 ekin = 0.201973803863677 | erot = 0.398457850157374 | epot = -15.2179456888463 | etot = -14.6175140348253 +780000 ekin = 0.226119091212116 | erot = 0.420824480237598 | epot = -15.2644576063476 | etot = -14.6175140348979 +781000 ekin = 0.249431156624362 | erot = 0.444629585314245 | epot = -15.3115747769111 | etot = -14.6175140349725 +782000 ekin = 0.27090447026737 | erot = 0.469715692367108 | epot = -15.3581341976774 | etot = -14.617514035043 +783000 ekin = 0.289681273781371 | erot = 0.495837747641005 | epot = -15.4030330565255 | etot = -14.6175140351031 +784000 ekin = 0.305125009984925 | erot = 0.522676532161846 | epot = -15.4453155772951 | etot = -14.6175140351483 +785000 ekin = 0.316868262921689 | erot = 0.549859353707494 | epot = -15.4842416518049 | etot = -14.6175140351757 +786000 ekin = 0.324828845887827 | erot = 0.57698331002341 | epot = -15.5193261910962 | etot = -14.617514035185 +787000 ekin = 0.32919323387832 | erot = 0.60363650580216 | epot = -15.5503437748586 | etot = -14.6175140351781 +788000 ekin = 0.33037186485146 | erot = 0.629413875564563 | epot = -15.5772997755749 | etot = -14.6175140351589 +789000 ekin = 0.328934711355184 | erot = 0.653926193133396 | epot = -15.6003749396209 | etot = -14.6175140351323 +790000 ekin = 0.325537319473833 | erot = 0.676802790007515 | epot = -15.619854144585 | etot = -14.6175140351037 +791000 ekin = 0.320847267933844 | erot = 0.697689943212853 | epot = -15.6360512462245 | etot = -14.6175140350778 +792000 ekin = 0.315479253540059 | erot = 0.716247584425432 | epot = -15.6492408730237 | etot = -14.6175140350582 +793000 ekin = 0.309944490982995 | erot = 0.732146955923568 | epot = -15.659605481954 | etot = -14.6175140350475 +794000 ekin = 0.304617480926279 | erot = 0.745071299200936 | epot = -15.6672028151733 | etot = -14.6175140350461 +795000 ekin = 0.299720880977542 | erot = 0.754720862086076 | epot = -15.6719557781174 | etot = -14.6175140350538 +796000 ekin = 0.295327396181288 | erot = 0.760822658788699 | epot = -15.6736640900385 | etot = -14.6175140350685 +797000 ekin = 0.291376296852734 | erot = 0.763144639346229 | epot = -15.6720349712862 | etot = -14.6175140350872 +798000 ekin = 0.287701294704638 | erot = 0.761513269132583 | epot = -15.6667285989436 | etot = -14.6175140351064 +799000 ekin = 0.284065979572969 | erot = 0.755832991337638 | epot = -15.6574130060325 | etot = -14.6175140351219 +800000 ekin = 0.280202790632173 | erot = 0.746105645864818 | epot = -15.6438224716274 | etot = -14.6175140351304 +801000 ekin = 0.275851560112921 | erot = 0.732447665813908 | epot = -15.6258132610552 | etot = -14.6175140351284 +802000 ekin = 0.270794034433598 | erot = 0.715102809072986 | epot = -15.6034108786203 | etot = -14.6175140351137 +803000 ekin = 0.264881442636211 | erot = 0.694448356025999 | epot = -15.5768438337475 | etot = -14.6175140350853 +804000 ekin = 0.258053167890611 | erot = 0.670993199746564 | epot = -15.5465604026803 | etot = -14.6175140350431 +805000 ekin = 0.250345604727777 | erot = 0.645366941436383 | epot = -15.5132265811527 | etot = -14.6175140349885 +806000 ekin = 0.241890533711227 | erot = 0.618299214643911 | epot = -15.4777037832789 | etot = -14.6175140349238 +807000 ekin = 0.232905655206386 | erot = 0.59059128773573 | epot = -15.4410109777945 | etot = -14.6175140348524 +808000 ekin = 0.223678061732307 | erot = 0.563080896687569 | epot = -15.404272993198 | etot = -14.6175140347781 +809000 ekin = 0.21454303522989 | erot = 0.536602758841035 | epot = -15.3686598287761 | etot = -14.6175140347052 +810000 ekin = 0.205860488312487 | erot = 0.511947500022813 | epot = -15.335322022973 | etot = -14.6175140346377 +811000 ekin = 0.197991117804985 | erot = 0.489821758276953 | epot = -15.3053269106614 | etot = -14.6175140345795 +812000 ekin = 0.191273941670598 | erot = 0.470812030933133 | epot = -15.2796000071373 | etot = -14.6175140345336 +813000 ekin = 0.18600640436918 | erot = 0.455354451061547 | epot = -15.2588748899335 | etot = -14.6175140345028 +814000 ekin = 0.182427753711695 | erot = 0.443712201373049 | epot = -15.2436539895733 | etot = -14.6175140344886 +815000 ekin = 0.180705986334899 | erot = 0.435961774090678 | epot = -15.2341817949176 | etot = -14.617514034492 +816000 ekin = 0.180928373605138 | erot = 0.431988814112469 | epot = -15.2304312222306 | etot = -14.617514034513 +817000 ekin = 0.183095431233989 | erot = 0.431493858262917 | epot = -15.2321033240477 | etot = -14.6175140345508 +818000 ekin = 0.187118173911423 | erot = 0.43400789506895 | epot = -15.2386401035843 | etot = -14.6175140346039 +819000 ekin = 0.192818568053485 | erot = 0.438917286806367 | epot = -15.2492498895297 | etot = -14.6175140346698 +820000 ekin = 0.199933211815007 | erot = 0.445497181488063 | epot = -15.2629444280486 | etot = -14.6175140347455 +821000 ekin = 0.208120374082307 | erot = 0.452952069483619 | epot = -15.2785864783934 | etot = -14.6175140348274 +822000 ekin = 0.216970558498724 | erot = 0.460461605795572 | epot = -15.2949461992058 | etot = -14.6175140349115 +823000 ekin = 0.226020685629653 | erot = 0.467229260922794 | epot = -15.3107639815457 | etot = -14.6175140349933 +824000 ekin = 0.234771793852154 | erot = 0.472530858216694 | epot = -15.3248166871376 | etot = -14.6175140350687 +825000 ekin = 0.242709867662635 | erot = 0.475759712130466 | epot = -15.3359836149267 | etot = -14.6175140351336 +826000 ekin = 0.249329060858575 | erot = 0.476465014357238 | epot = -15.3433081104001 | etot = -14.6175140351843 +827000 ekin = 0.25415625948642 | erot = 0.474380409602698 | epot = -15.3460507043074 | etot = -14.6175140352183 +828000 ekin = 0.256775693171424 | erot = 0.469440383344404 | epot = -15.3437301117495 | etot = -14.6175140352337 +829000 ekin = 0.256852201217284 | erot = 0.46178309210187 | epot = -15.336149328549 | etot = -14.6175140352299 +830000 ekin = 0.254151805817283 | erot = 0.451739467040903 | epot = -15.3234053080654 | etot = -14.6175140352073 +831000 ekin = 0.248558416434218 | erot = 0.439809632306185 | epot = -15.3058820839079 | etot = -14.6175140351675 +832000 ekin = 0.240085737091441 | erot = 0.426628719075599 | epot = -15.2842284912797 | etot = -14.6175140351126 +833000 ekin = 0.228883712687973 | erot = 0.412924890623741 | epot = -15.2593226383575 | etot = -14.6175140350458 +834000 ekin = 0.215239082682017 | erot = 0.399472764055522 | epot = -15.2322258817081 | etot = -14.6175140349705 +835000 ekin = 0.199569787294727 | erot = 0.387045440519038 | epot = -15.2041292627042 | etot = -14.6175140348904 +836000 ekin = 0.182413100763729 | erot = 0.376368114580306 | epot = -15.1762952501535 | etot = -14.6175140348094 +837000 ekin = 0.164407483062571 | erot = 0.368075825930997 | epot = -15.149997343725 | etot = -14.6175140347315 +838000 ekin = 0.146268295773245 | erot = 0.362677435797452 | epot = -15.1264597662308 | etot = -14.6175140346601 +839000 ekin = 0.128757768426142 | erot = 0.360527421580312 | epot = -15.1067992246053 | etot = -14.6175140345989 +840000 ekin = 0.112649960717701 | erot = 0.36180661865639 | epot = -15.0919706139249 | etot = -14.6175140345508 +841000 ekin = 0.0986919456674289 | erot = 0.36651260392939 | epot = -15.0827185841154 | etot = -14.6175140345186 +842000 ekin = 0.0875630029231973 | erot = 0.374460003556307 | epot = -15.0795370409836 | etot = -14.6175140345041 +843000 ekin = 0.0798341847684568 | erot = 0.385290606533499 | epot = -15.0826388258105 | etot = -14.6175140345086 +844000 ekin = 0.0759310929906455 | erot = 0.398492769730518 | epot = -15.0919378972534 | etot = -14.6175140345322 +845000 ekin = 0.0761029610203614 | erot = 0.413429207169692 | epot = -15.1070462027642 | etot = -14.6175140345741 +846000 ekin = 0.0804010613291467 | erot = 0.429371869323724 | epot = -15.1272869652855 | etot = -14.6175140346326 +847000 ekin = 0.0886689809243283 | erot = 0.445542241999283 | epot = -15.151725257628 | etot = -14.6175140347044 +848000 ekin = 0.100546421460129 | erot = 0.46115503871289 | epot = -15.1792154949586 | etot = -14.6175140347856 +849000 ekin = 0.115486960011282 | erot = 0.475462945352927 | epot = -15.2084639402358 | etot = -14.6175140348716 +850000 ekin = 0.132788806696208 | erot = 0.487799837753942 | epot = -15.2381026794073 | etot = -14.6175140349572 +851000 ekin = 0.151636227786906 | erot = 0.497619785577632 | epot = -15.2667700484016 | etot = -14.6175140350371 +852000 ekin = 0.171148194576718 | erot = 0.504529242628412 | epot = -15.2931914723118 | etot = -14.6175140351066 +853000 ekin = 0.190430159396265 | erot = 0.50831015746196 | epot = -15.31625435202 | etot = -14.6175140351617 +854000 ekin = 0.208624756900111 | erot = 0.508932337651449 | epot = -15.3350711297509 | etot = -14.6175140351993 +855000 ekin = 0.224957674812678 | erot = 0.506554231539646 | epot = -15.3490259415702 | etot = -14.6175140352179 +856000 ekin = 0.238775816539412 | erot = 0.501512259960127 | epot = -15.3578021117162 | etot = -14.6175140352167 +857000 ekin = 0.249575992234284 | erot = 0.494299801981541 | epot = -15.3613898294126 | etot = -14.6175140351967 +858000 ekin = 0.257023502073991 | erot = 0.485537766821542 | epot = -15.3600753040553 | etot = -14.6175140351598 +859000 ekin = 0.260960921285794 | erot = 0.475939247615297 | epot = -15.3544142040096 | etot = -14.6175140351085 +860000 ekin = 0.261408037072425 | erot = 0.466270984603931 | epot = -15.3451930567221 | etot = -14.6175140350458 +861000 ekin = 0.258554187538353 | erot = 0.457314264402295 | epot = -15.3333824869156 | etot = -14.6175140349749 +862000 ekin = 0.252744258033141 | erot = 0.449827506885222 | epot = -15.3200857998177 | etot = -14.6175140348993 +863000 ekin = 0.244459417796683 | erot = 0.444512141833012 | epot = -15.3064855944521 | etot = -14.6175140348224 +864000 ekin = 0.23429336884036 | erot = 0.441983030938511 | epot = -15.2937904345263 | etot = -14.6175140347475 +865000 ekin = 0.222924696624272 | erot = 0.442744308393629 | epot = -15.2831830396954 | etot = -14.6175140346775 +866000 ekin = 0.211086026109497 | erot = 0.447169652379628 | epot = -15.2757697131049 | etot = -14.6175140346158 +867000 ekin = 0.199530465893205 | erot = 0.455487658922675 | epot = -15.2725321593806 | etot = -14.6175140345647 +868000 ekin = 0.188996288427701 | erot = 0.467771811642206 | epot = -15.274282134597 | etot = -14.6175140345271 +869000 ekin = 0.180171161859839 | erot = 0.483934855625384 | epot = -15.2816200519904 | etot = -14.6175140345052 +870000 ekin = 0.173657413869083 | erot = 0.503727420428225 | epot = -15.2948988687979 | etot = -14.6175140345006 +871000 ekin = 0.169940429082826 | erot = 0.526741193130643 | epot = -15.3141956567281 | etot = -14.6175140345146 +872000 ekin = 0.169362274179231 | erot = 0.55241708894464 | epot = -15.3392933976713 | etot = -14.6175140345475 +873000 ekin = 0.172102391202432 | erot = 0.580058846013128 | epot = -15.3696752718142 | etot = -14.6175140345986 +874000 ekin = 0.178167002902699 | erot = 0.608852557306752 | epot = -15.404533594876 | etot = -14.6175140346666 +875000 ekin = 0.187388233891608 | erot = 0.637892396629037 | epot = -15.4427946652693 | etot = -14.6175140347487 +876000 ekin = 0.199433181368205 | erot = 0.666212376944565 | epot = -15.4831595931543 | etot = -14.6175140348416 +877000 ekin = 0.213822249051452 | erot = 0.69282332523737 | epot = -15.5241596092296 | etot = -14.6175140349407 +878000 ekin = 0.229955728386783 | erot = 0.716754212644293 | epot = -15.5642239760726 | etot = -14.6175140350415 +879000 ekin = 0.247146104645698 | erot = 0.737095186134375 | epot = -15.6017553259191 | etot = -14.617514035139 +880000 ekin = 0.264653797002906 | erot = 0.753040153405454 | epot = -15.6352079856366 | etot = -14.6175140352283 +881000 ekin = 0.28172378426185 | erot = 0.763926241590771 | epot = -15.6631640611577 | etot = -14.617514035305 +882000 ekin = 0.297620641607227 | erot = 0.769267373447333 | epot = -15.6844020504203 | etot = -14.6175140353657 +883000 ekin = 0.311659967166543 | erot = 0.768779581882131 | epot = -15.6979535844564 | etot = -14.6175140354077 +884000 ekin = 0.323234773768197 | erot = 0.762396270683944 | epot = -15.7031450798816 | etot = -14.6175140354294 +885000 ekin = 0.331836099625417 | erot = 0.750272396067174 | epot = -15.6996225311231 | etot = -14.6175140354305 +886000 ekin = 0.337067751564103 | erot = 0.732777385265373 | epot = -15.6873591722411 | etot = -14.6175140354117 +887000 ekin = 0.338655649766336 | erot = 0.710477420749848 | epot = -15.6666471058904 | etot = -14.6175140353742 +888000 ekin = 0.336452632420875 | erot = 0.684108417155686 | epot = -15.6380750848969 | etot = -14.6175140353203 +889000 ekin = 0.330439768515621 | erot = 0.654541548239603 | epot = -15.602495352008 | etot = -14.6175140352528 +890000 ekin = 0.320725208484741 | erot = 0.62274352002662 | epot = -15.5609827636857 | etot = -14.6175140351743 +891000 ekin = 0.307541386208895 | erot = 0.589733936087021 | epot = -15.514789357384 | etot = -14.6175140350881 +892000 ekin = 0.291240998129636 | erot = 0.556542080397485 | epot = -15.465297113524 | etot = -14.6175140349969 +893000 ekin = 0.272291667891092 | erot = 0.524165278720341 | epot = -15.4139709815152 | etot = -14.6175140349038 +894000 ekin = 0.251268620703177 | erot = 0.493530718297282 | epot = -15.3623133738115 | etot = -14.6175140348111 +895000 ekin = 0.228844131843334 | erot = 0.465462234286213 | epot = -15.311820400851 | etot = -14.6175140347214 +896000 ekin = 0.205772103521623 | erot = 0.440653137306931 | epot = -15.263939275466 | etot = -14.6175140346374 +897000 ekin = 0.18286601780276 | erot = 0.419645693758162 | epot = -15.2200257461227 | etot = -14.6175140345617 +898000 ekin = 0.160968870008327 | erot = 0.40281742524286 | epot = -15.1813003297482 | etot = -14.617514034497 +899000 ekin = 0.140914625128286 | erot = 0.390374024162985 | epot = -15.1488026837377 | etot = -14.6175140344464 +900000 ekin = 0.123482269337591 | erot = 0.382348451689304 | epot = -15.1233447554395 | etot = -14.6175140344126 +901000 ekin = 0.109345484385278 | erot = 0.378605737554559 | epot = -15.1054652563381 | etot = -14.6175140343982 +902000 ekin = 0.0990229789071406 | erot = 0.37885314016642 | epot = -15.0953901534788 | etot = -14.6175140344052 +903000 ekin = 0.0928360184568559 | erot = 0.382655585825979 | epot = -15.093005638717 | etot = -14.6175140344341 +904000 ekin = 0.0908801123885926 | erot = 0.389456554773827 | epot = -15.0978507016463 | etot = -14.6175140344838 +905000 ekin = 0.0930167096533132 | erot = 0.398604648850322 | epot = -15.1091353930552 | etot = -14.6175140345515 +906000 ekin = 0.0988880708470662 | erot = 0.409385812369458 | epot = -15.1257879178489 | etot = -14.6175140346324 +907000 ekin = 0.107954659148216 | erot = 0.421060528764254 | epot = -15.1465292226329 | etot = -14.6175140347204 +908000 ekin = 0.119550305155171 | erot = 0.432904367174519 | epot = -15.1699687071382 | etot = -14.6175140348085 +909000 ekin = 0.132947118365042 | erot = 0.444249232158093 | epot = -15.1947103854133 | etot = -14.6175140348902 +910000 ekin = 0.14742054333404 | erot = 0.45452187965619 | epot = -15.2194564579498 | etot = -14.6175140349596 +911000 ekin = 0.162305506309761 | erot = 0.463275978358842 | epot = -15.2430955196813 | etot = -14.6175140350127 +912000 ekin = 0.177037050913266 | erot = 0.470214361754283 | epot = -15.2647654477151 | etot = -14.6175140350476 +913000 ekin = 0.191172462463443 | erot = 0.475199092565798 | epot = -15.2838855900934 | etot = -14.6175140350642 +914000 ekin = 0.204395616840806 | erot = 0.478248345047313 | epot = -15.3001579969523 | etot = -14.6175140350642 +915000 ekin = 0.21650723869525 | erot = 0.479520616571472 | epot = -15.3135418903175 | etot = -14.6175140350508 +916000 ekin = 0.22740635239903 | erot = 0.479288139235308 | epot = -15.3242085266619 | etot = -14.6175140350276 +917000 ekin = 0.237068358847916 | erot = 0.477902392722287 | epot = -15.3324847865686 | etot = -14.6175140349984 +918000 ekin = 0.245524170398606 | erot = 0.475755244751368 | epot = -15.338793450117 | etot = -14.617514034967 +919000 ekin = 0.252843202023207 | erot = 0.473239468154926 | epot = -15.3435967051145 | etot = -14.6175140349364 +920000 ekin = 0.259121284814418 | erot = 0.470712244289352 | epot = -15.3473475640129 | etot = -14.6175140349091 +921000 ekin = 0.264473144075716 | erot = 0.468464808091652 | epot = -15.3504519870541 | etot = -14.6175140348868 +922000 ekin = 0.269028180853147 | erot = 0.466700668341421 | epot = -15.3532428840648 | etot = -14.6175140348703 +923000 ekin = 0.272927944744965 | erot = 0.465523908452019 | epot = -15.3559658880565 | etot = -14.6175140348596 +924000 ekin = 0.276323793828338 | erot = 0.464938026324942 | epot = -15.3587758550077 | etot = -14.6175140348544 +925000 ekin = 0.279373649322719 | erot = 0.464854721381143 | epot = -15.3617424055579 | etot = -14.6175140348541 +926000 ekin = 0.282237300897349 | erot = 0.465111106681717 | epot = -15.3648624424361 | etot = -14.6175140348571 +927000 ekin = 0.285070250341268 | erot = 0.465493135294266 | epot = -15.3680774204978 | etot = -14.6175140348623 +928000 ekin = 0.288016501944426 | erot = 0.465762600719312 | epot = -15.3712931375323 | etot = -14.6175140348686 +929000 ekin = 0.291201026098215 | erot = 0.465684740680354 | epot = -15.3743998016532 | etot = -14.6175140348747 +930000 ekin = 0.294722459179014 | erot = 0.465054261990702 | epot = -15.3772907560492 | etot = -14.6175140348795 +931000 ekin = 0.29864676401532 | erot = 0.463717248454336 | epot = -15.3798780473521 | etot = -14.6175140348824 +932000 ekin = 0.30300230463982 | erot = 0.461587311534142 | epot = -15.382103651057 | etot = -14.617514034883 +933000 ekin = 0.307776651095021 | erot = 0.458654945592281 | epot = -15.3839456315687 | etot = -14.6175140348814 +934000 ekin = 0.312915338272243 | erot = 0.454989722656041 | epot = -15.385419095806 | etot = -14.6175140348777 +935000 ekin = 0.318322768321537 | erot = 0.4507356255513 | epot = -15.3865724287453 | etot = -14.6175140348725 +936000 ekin = 0.323865441581232 | erot = 0.446100385695392 | epot = -15.3874798621431 | etot = -14.6175140348664 +937000 ekin = 0.329377658420751 | erot = 0.441340069470884 | epot = -15.3882317627517 | etot = -14.6175140348601 +938000 ekin = 0.334669609401342 | erot = 0.436740154638299 | epot = -15.3889237988938 | etot = -14.6175140348541 +939000 ekin = 0.339538182698431 | erot = 0.432595723627041 | epot = -15.3896479411745 | etot = -14.617514034849 +940000 ekin = 0.343779460434951 | erot = 0.429190561372456 | epot = -15.3904840566526 | etot = -14.6175140348452 +941000 ekin = 0.347202304173587 | erot = 0.426777065358565 | epot = -15.391493404375 | etot = -14.6175140348428 +942000 ekin = 0.349642062607373 | erot = 0.425558062624985 | epot = -15.3927141600744 | etot = -14.6175140348421 +943000 ekin = 0.350973206935267 | erot = 0.425671371650545 | epot = -15.3941586134289 | etot = -14.6175140348431 +944000 ekin = 0.351119786154239 | erot = 0.427178062458757 | epot = -15.3958118834587 | etot = -14.6175140348457 +945000 ekin = 0.350062816508182 | erot = 0.430055404932911 | epot = -15.397632256291 | etot = -14.6175140348499 +946000 ekin = 0.347844068536133 | erot = 0.434195447788936 | epot = -15.3995535511804 | etot = -14.6175140348553 +947000 ekin = 0.344566017440968 | erot = 0.439410327983271 | epot = -15.4014903802857 | etot = -14.6175140348614 +948000 ekin = 0.340388212506876 | erot = 0.445444378275944 | epot = -15.4033466256503 | etot = -14.6175140348675 +949000 ekin = 0.335520427168076 | erot = 0.451992965713332 | epot = -15.405027427754 | etot = -14.6175140348726 +950000 ekin = 0.330213181195925 | erot = 0.458727107974287 | epot = -15.4064543240458 | etot = -14.6175140348756 +951000 ekin = 0.324745816556271 | erot = 0.465321341195901 | epot = -15.4075811926278 | etot = -14.6175140348756 +952000 ekin = 0.319412679962131 | erot = 0.471482169175953 | epot = -15.4084088840101 | etot = -14.617514034872 +953000 ekin = 0.314508037100271 | erot = 0.476974139325801 | epot = -15.4089962112904 | etot = -14.6175140348643 +954000 ekin = 0.310309685024597 | erot = 0.481639431416524 | epot = -15.4094631512943 | etot = -14.6175140348532 +955000 ekin = 0.30706194776561 | erot = 0.485408201612597 | epot = -15.4099841842179 | etot = -14.6175140348397 +956000 ekin = 0.304958921289462 | erot = 0.488297803840355 | epot = -15.4107707599554 | etot = -14.6175140348255 +957000 ekin = 0.304129209169334 | erot = 0.490400499131601 | epot = -15.4120437431141 | etot = -14.6175140348131 +958000 ekin = 0.304623714620741 | erot = 0.491860923620763 | epot = -15.4139986730463 | etot = -14.6175140348048 +959000 ekin = 0.306408207892433 | erot = 0.492846142548468 | epot = -15.4167683852438 | etot = -14.6175140348029 +960000 ekin = 0.309362278814204 | erot = 0.493512316197963 | epot = -15.4203886298212 | etot = -14.617514034809 +961000 ekin = 0.313285873785893 | erot = 0.493972653387203 | epot = -15.4247725619971 | etot = -14.617514034824 +962000 ekin = 0.317913924785377 | erot = 0.494271324762721 | epot = -15.4296992843955 | etot = -14.6175140348474 +963000 ekin = 0.322938673954067 | erot = 0.494367337737335 | epot = -15.434820046569 | etot = -14.6175140348776 +964000 ekin = 0.32803828153202 | erot = 0.494131108238476 | epot = -15.4396834246822 | etot = -14.6175140349118 +965000 ekin = 0.332909295684033 | erot = 0.493354750676285 | epot = -15.4437780813066 | etot = -14.6175140349462 +966000 ekin = 0.337299689763766 | erot = 0.491775167781745 | epot = -15.4465888925225 | etot = -14.617514034977 +967000 ekin = 0.341038574327655 | erot = 0.489107134739062 | epot = -15.4476597440666 | etot = -14.6175140349999 +968000 ekin = 0.344058508087222 | erot = 0.485082040987952 | epot = -15.4466545840868 | etot = -14.6175140350117 +969000 ekin = 0.346406687227151 | erot = 0.479487053291702 | epot = -15.4434077755292 | etot = -14.6175140350103 +970000 ekin = 0.348242259951282 | erot = 0.472199376074787 | epot = -15.4379556710213 | etot = -14.6175140349953 +971000 ekin = 0.349818577908804 | erot = 0.463211040207177 | epot = -15.4305436530837 | etot = -14.6175140349678 +972000 ekin = 0.351451221504524 | erot = 0.452641107453752 | epot = -15.4216063638891 | etot = -14.6175140349308 +973000 ekin = 0.3534748518418 | erot = 0.440734047140215 | epot = -15.4117229338706 | etot = -14.6175140348885 +974000 ekin = 0.356193968986606 | erot = 0.427844962322964 | epot = -15.4015529661554 | etot = -14.6175140348458 +975000 ekin = 0.359834072252968 | erot = 0.414413971021433 | epot = -15.3917620780819 | etot = -14.6175140348075 +976000 ekin = 0.364500158164541 | erot = 0.400933139115399 | epot = -15.3829473320578 | etot = -14.6175140347778 +977000 ekin = 0.370148756531594 | erot = 0.387909813696784 | epot = -15.3755726049881 | etot = -14.6175140347597 +978000 ekin = 0.376577842832112 | erot = 0.37583005908299 | epot = -15.3699219366697 | etot = -14.6175140347546 +979000 ekin = 0.383436289098897 | erot = 0.365125297246974 | epot = -15.3660756211082 | etot = -14.6175140347623 +980000 ekin = 0.390251542221838 | erot = 0.356144397459927 | epot = -15.3639099744635 | etot = -14.6175140347817 +981000 ekin = 0.396471539315499 | erot = 0.349132547198626 | epot = -15.3631181213241 | etot = -14.61751403481 +982000 ekin = 0.401514997591354 | erot = 0.344217435800631 | epot = -15.3632464682362 | etot = -14.6175140348443 +983000 ekin = 0.404823458769612 | erot = 0.341402706417366 | epot = -15.3637402000685 | etot = -14.6175140348815 +984000 ekin = 0.405908866684804 | erot = 0.34056832459917 | epot = -15.3639912262027 | etot = -14.6175140349188 +985000 ekin = 0.404391803059605 | erot = 0.341477444721989 | epot = -15.3633832827353 | etot = -14.6175140349537 +986000 ekin = 0.400027422799988 | erot = 0.343789434463081 | epot = -15.3613308922474 | etot = -14.6175140349843 +987000 ekin = 0.392718180743718 | erot = 0.347078806740141 | epot = -15.357311022493 | etot = -14.6175140350092 +988000 ekin = 0.382514239213264 | erot = 0.350859769148604 | epot = -15.3508880433891 | etot = -14.6175140350273 +989000 ekin = 0.36960372665304 | erot = 0.354615837190747 | epot = -15.3417335988814 | etot = -14.6175140350376 +990000 ekin = 0.354295674460603 | erot = 0.357833454089941 | epot = -15.3296431635899 | etot = -14.6175140350393 +991000 ekin = 0.336998529350877 | erot = 0.360037895319979 | epot = -15.3145504597026 | etot = -14.6175140350318 +992000 ekin = 0.318196763890073 | erot = 0.360829065192576 | epot = -15.296539864097 | etot = -14.6175140350143 +993000 ekin = 0.298427479538382 | erot = 0.359914303090994 | epot = -15.2758558176161 | etot = -14.6175140349867 +994000 ekin = 0.278258203579966 | erot = 0.357135170966681 | epot = -15.2529074094957 | etot = -14.6175140349491 +995000 ekin = 0.258266471895044 | erot = 0.352485480213702 | epot = -15.2282659870109 | etot = -14.6175140349022 +996000 ekin = 0.239021351636038 | erot = 0.346118523028621 | epot = -15.2026539095118 | etot = -14.6175140348471 +997000 ekin = 0.221066818081191 | erot = 0.338342492443265 | epot = -15.1769233453106 | etot = -14.6175140347861 +998000 ekin = 0.204906835818307 | erot = 0.329604233509113 | epot = -15.152025104049 | etot = -14.6175140347215 +999000 ekin = 0.190992053959209 | erot = 0.320462575794744 | epot = -15.1289686644103 | etot = -14.6175140346563 +1000000 ekin = 0.179708146665587 | erot = 0.311553394428757 | epot = -15.1087755756882 | etot = -14.6175140345938 + 1000000 0.013311715 -1.5443684 0.033490821 -1.4929067 -3.7544839e-05 +Loop time of 28.9854 on 4 procs for 1000000 steps with 10 atoms + +Performance: 29808.075 tau/day, 34500.086 timesteps/s +96.6% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.85571 | 9.8341 | 18.111 | 228.8 | 33.93 +Bond | 0.12393 | 0.38078 | 0.62324 | 32.7 | 1.31 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 2.795 | 3.6269 | 4.4228 | 30.4 | 12.51 +Output | 1.8e-05 | 2.575e-05 | 2.9e-05 | 0.0 | 0.00 +Modify | 0.24721 | 1.1083 | 1.9206 | 64.1 | 3.82 +Other | | 14.04 | | | 48.42 + +Nlocal: 2.5 ave 5 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 7.5 ave 10 max 5 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 18.5 ave 35 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 + +Total # of neighbors = 74 +Ave neighs/atom = 7.4 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:28 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 deleted file mode 100644 index 2c09a4f99d..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.1 +++ /dev/null @@ -1,178 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 3.023 | 3.023 | 3.023 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4712768 0.009525411 -1.4617514 -5.8922361e-05 -1000 ekin = 0.00113086229080528 | erot = 0.0043101016040658 | epot = -14.6229549982368 | etot = -14.617514034342 -2000 ekin = 0.0044853322434243 | erot = 0.0171407706505008 | epot = -14.6391401372615 | etot = -14.6175140343675 -3000 ekin = 0.00995035259649284 | erot = 0.0381961780846485 | epot = -14.6656605650904 | etot = -14.6175140344093 -4000 ekin = 0.0173418024862054 | erot = 0.0669935184860634 | epot = -14.7018493554381 | etot = -14.6175140344659 -5000 ekin = 0.0264109356286075 | erot = 0.102878288094517 | epot = -14.7468032582586 | etot = -14.6175140345355 -6000 ekin = 0.0368533113591442 | erot = 0.14504542056987 | epot = -14.7994127665447 | etot = -14.6175140346157 -7000 ekin = 0.0483200640564843 | erot = 0.19256586251551 | epot = -14.8583999612756 | etot = -14.6175140347036 -8000 ekin = 0.0604312317605998 | erot = 0.24441787013151 | epot = -14.9223631366883 | etot = -14.6175140347962 -9000 ekin = 0.0727907119671751 | erot = 0.299521949931843 | epot = -14.989826696789 | etot = -14.6175140348899 -10000 ekin = 0.0850022498875221 | erot = 0.356777997217908 | epot = -15.0592942820869 | etot = -14.6175140349815 - 10000 0.006296463 -1.5144685 0.0085391004 -1.4974292 -0.00010794792 -Loop time of 0.149406 on 1 procs for 10000 steps with 10 atoms - -Performance: 57828.835 tau/day, 66931.522 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.11971 | 0.11971 | 0.11971 | 0.0 | 80.12 -Bond | 0.0051196 | 0.0051196 | 0.0051196 | 0.0 | 3.43 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0013614 | 0.0013614 | 0.0013614 | 0.0 | 0.91 -Output | 5.0068e-06 | 5.0068e-06 | 5.0068e-06 | 0.0 | 0.00 -Modify | 0.018941 | 0.018941 | 0.018941 | 0.0 | 12.68 -Other | | 0.004268 | | | 2.86 - -Nlocal: 10 ave 10 max 10 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 45 ave 45 max 45 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 45 -Ave neighs/atom = 4.5 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 deleted file mode 100644 index a326248cdb..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex1/log.27Nov18.duplex1.g++.4 +++ /dev/null @@ -1,178 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 1 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex1 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 10 atoms - reading velocities ... - 10 velocities - 10 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 8 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 2 = max # of 1-4 neighbors - 4 = max # of special neighbors - -set atom * mass 3.1575 - 10 settings made for mass - -group all type 1 4 -10 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -fix 1 all nve/dot -#fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.652 | 7.834 | 8.016 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.4712768 0.009525411 -1.4617514 -5.8922361e-05 -1000 ekin = 0.00113086229080478 | erot = 0.00431010160406708 | epot = -14.6229549982368 | etot = -14.617514034342 -2000 ekin = 0.00448533224342286 | erot = 0.0171407706505013 | epot = -14.6391401372615 | etot = -14.6175140343675 -3000 ekin = 0.0099503525964896 | erot = 0.0381961780846438 | epot = -14.6656605650904 | etot = -14.6175140344093 -4000 ekin = 0.0173418024861991 | erot = 0.0669935184860479 | epot = -14.7018493554381 | etot = -14.6175140344659 -5000 ekin = 0.0264109356285965 | erot = 0.102878288094482 | epot = -14.7468032582586 | etot = -14.6175140345355 -6000 ekin = 0.0368533113591268 | erot = 0.145045420569809 | epot = -14.7994127665446 | etot = -14.6175140346156 -7000 ekin = 0.0483200640564584 | erot = 0.192565862515413 | epot = -14.8583999612755 | etot = -14.6175140347036 -8000 ekin = 0.0604312317605635 | erot = 0.24441787013137 | epot = -14.9223631366881 | etot = -14.6175140347962 -9000 ekin = 0.072790711967127 | erot = 0.299521949931654 | epot = -14.9898266967887 | etot = -14.6175140348899 -10000 ekin = 0.0850022498874609 | erot = 0.356777997217666 | epot = -15.0592942820866 | etot = -14.6175140349815 - 10000 0.006296463 -1.5144685 0.0085391004 -1.4974292 -0.00010794792 -Loop time of 0.14583 on 4 procs for 10000 steps with 10 atoms - -Performance: 59247.054 tau/day, 68572.979 timesteps/s -97.5% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0034175 | 0.055587 | 0.10059 | 17.9 | 38.12 -Bond | 0.00064635 | 0.002131 | 0.0035357 | 2.5 | 1.46 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.014538 | 0.014932 | 0.015271 | 0.2 | 10.24 -Output | 5.7459e-05 | 5.7697e-05 | 5.7936e-05 | 0.0 | 0.04 -Modify | 0.0012829 | 0.0063873 | 0.011321 | 5.2 | 4.38 -Other | | 0.06674 | | | 45.76 - -Nlocal: 2.5 ave 5 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Nghost: 7.5 ave 10 max 5 min -Histogram: 1 0 1 0 0 0 0 0 1 1 -Neighs: 18.5 ave 35 max 0 min -Histogram: 1 0 1 0 0 0 0 0 1 1 - -Total # of neighbors = 74 -Ave neighs/atom = 7.4 -Ave special neighs/atom = 3.6 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/data.duplex2 b/examples/USER/cgdna/examples/oxDNA2/duplex2/data.duplex2 index 6547def910..72872d431a 100644 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/data.duplex2 +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/data.duplex2 @@ -38,7 +38,7 @@ Atoms 15 3 4.860249842674773e-01 3.518234140414733e-01 3.897628551303119e-01 2 1 1 16 4 5.999999999999995e-01 -3.330669073875470e-17 -3.330669073875470e-16 2 1 1 -# Atom-ID, translational, rotational velocity +# Atom-ID, translational velocity, angular momentum Velocities 1 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 b/examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 index 3d4393e09b..3850dfcedf 100644 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/in.duplex2 @@ -1,7 +1,7 @@ variable number equal 2 variable ofreq equal 1000 variable efreq equal 1000 - +variable T equal 0.1 units lj dimension 3 @@ -30,19 +30,19 @@ bond_coeff * 2.0 0.25 0.7564 # oxDNA pair interactions pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqav ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 # NVE ensemble #fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 #fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 timestep 1e-5 @@ -73,6 +73,6 @@ fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${e #dump_modify out sort id #dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" -run 10000 +run 1000000 #write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.18Jun19.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.18Jun19.duplex2.g++.1 new file mode 100644 index 0000000000..e4478a8942 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.18Jun19.duplex2.g++.1 @@ -0,0 +1,1173 @@ +LAMMPS (18 Jun 2019) +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000103 secs + read_data CPU = 0.00215 secs + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqav 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.025 | 3.025 | 3.025 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5358787 0.0096742456 -1.5262045 1.0127369e-05 +1000 ekin = 1.54282272464468 | erot = 1.71757897250772 | epot = -24.4403527731341 | etot = -21.1799510759817 +2000 ekin = 1.86109566690716 | erot = 1.93804145796026 | epot = -24.3759816748265 | etot = -20.5768445499591 +3000 ekin = 2.68769182431188 | erot = 2.14559269500086 | epot = -24.2916556822451 | etot = -19.4583711629324 +4000 ekin = 2.04710303757243 | erot = 1.48774072590987 | epot = -24.190371461807 | etot = -20.6555276983247 +5000 ekin = 1.77654023802719 | erot = 2.53418650522101 | epot = -24.1246365663843 | etot = -19.8139098231361 +6000 ekin = 3.12253137872527 | erot = 2.04028266818831 | epot = -24.0491248750916 | etot = -18.8863108281781 +7000 ekin = 3.22418765752177 | erot = 2.72037570174022 | epot = -23.9458569915548 | etot = -18.0012936322928 +8000 ekin = 2.83204202112963 | erot = 2.67060276413776 | epot = -23.9211291529766 | etot = -18.4184843677092 +9000 ekin = 2.69585642754481 | erot = 2.59559820250212 | epot = -23.8340823338302 | etot = -18.5426277037833 +10000 ekin = 2.66058119525512 | erot = 1.95965933336077 | epot = -23.7132443170725 | etot = -19.0930037884567 +11000 ekin = 2.34346978235591 | erot = 2.0608750207871 | epot = -23.5779637301072 | etot = -19.1736189269642 +12000 ekin = 2.71430148816282 | erot = 2.08352509995717 | epot = -23.4639027443831 | etot = -18.6660761562631 +13000 ekin = 2.61978682102879 | erot = 2.37135270083347 | epot = -23.3602247027812 | etot = -18.3690851809189 +14000 ekin = 3.07648218347461 | erot = 2.513719767243 | epot = -23.2345584968309 | etot = -17.6443565461133 +15000 ekin = 2.98155804409324 | erot = 1.87766202539412 | epot = -23.0833749664029 | etot = -18.2241548969156 +16000 ekin = 2.18215330648447 | erot = 2.12621179836828 | epot = -22.9601160092383 | etot = -18.6517509043856 +17000 ekin = 1.85636180329758 | erot = 2.31208745603367 | epot = -22.8022922969143 | etot = -18.633843037583 +18000 ekin = 2.26768559168017 | erot = 1.2389450409061 | epot = -22.668242963885 | etot = -19.1616123312987 +19000 ekin = 2.41605854545852 | erot = 2.44791952321404 | epot = -22.5387095337131 | etot = -17.6747314650405 +20000 ekin = 2.51175765558337 | erot = 2.15047735899709 | epot = -22.3909493829452 | etot = -17.7287143683647 +21000 ekin = 2.9915110961596 | erot = 2.41132105778464 | epot = -22.5047205397251 | etot = -17.1018883857809 +22000 ekin = 3.06067007914886 | erot = 1.83986675392832 | epot = -22.6049739626141 | etot = -17.7044371295369 +23000 ekin = 2.66061083480474 | erot = 2.22251362834379 | epot = -22.5979829967718 | etot = -17.7148585336233 +24000 ekin = 2.65745533322327 | erot = 2.79344397300952 | epot = -22.5688422615674 | etot = -17.1179429553346 +25000 ekin = 2.30064465907917 | erot = 2.20975367009042 | epot = -22.5633453862602 | etot = -18.0529470570906 +26000 ekin = 1.6282588103248 | erot = 2.51914272742421 | epot = -22.6015006270016 | etot = -18.4540990892526 +27000 ekin = 1.76021840072103 | erot = 3.70719293889859 | epot = -22.6409357152274 | etot = -17.1735243756077 +28000 ekin = 2.28064774169505 | erot = 2.34192414128161 | epot = -22.7124772012735 | etot = -18.0899053182968 +29000 ekin = 2.05883865245349 | erot = 1.85387249117169 | epot = -22.7242388348361 | etot = -18.811527691211 +30000 ekin = 2.41090888362676 | erot = 1.86304539977924 | epot = -22.6876650006964 | etot = -18.4137107172904 +31000 ekin = 2.76955959719985 | erot = 2.74117025737249 | epot = -22.6962463526981 | etot = -17.1855164981257 +32000 ekin = 2.08562644954365 | erot = 2.81609166367558 | epot = -22.7309387973059 | etot = -17.8292206840867 +33000 ekin = 2.08306771838837 | erot = 3.6412168312574 | epot = -22.671701882331 | etot = -16.9474173326852 +34000 ekin = 2.32648544880974 | erot = 3.09480128654123 | epot = -22.5637155764017 | etot = -17.1424288410507 +35000 ekin = 2.32492461599899 | erot = 2.02549181832456 | epot = -22.4811871522455 | etot = -18.1307707179219 +36000 ekin = 1.9160219633488 | erot = 1.97655634076097 | epot = -22.3849871062612 | etot = -18.4924088021514 +37000 ekin = 1.57338784336504 | erot = 2.62872199467344 | epot = -22.3528406869297 | etot = -18.1507308488912 +38000 ekin = 2.21547906806797 | erot = 2.89630123965964 | epot = -22.3056616105138 | etot = -17.1938813027862 +39000 ekin = 2.55049061085212 | erot = 2.46486573403212 | epot = -22.2602280028032 | etot = -17.244871657919 +40000 ekin = 2.25628181110086 | erot = 1.87515483835113 | epot = -22.2878959489406 | etot = -18.1564592994886 +41000 ekin = 2.46478791133629 | erot = 2.50742704532316 | epot = -22.3614598606398 | etot = -17.3892449039804 +42000 ekin = 2.69217693496336 | erot = 2.04021031621289 | epot = -22.3505245167544 | etot = -17.6181372655782 +43000 ekin = 2.40211339309477 | erot = 1.6668978842528 | epot = -22.353509525279 | etot = -18.2844982479314 +44000 ekin = 2.30891568897327 | erot = 2.40213237626172 | epot = -22.3871831090405 | etot = -17.6761350438055 +45000 ekin = 1.83275065976638 | erot = 2.26068140262528 | epot = -22.4994702091406 | etot = -18.406038146749 +46000 ekin = 1.97585087518641 | erot = 3.0186371421683 | epot = -22.4902643909032 | etot = -17.4957763735485 +47000 ekin = 1.30702141485601 | erot = 1.99592830992523 | epot = -22.4679405795691 | etot = -19.1649908547879 +48000 ekin = 2.58893650014613 | erot = 1.90050780837457 | epot = -22.5072015009757 | etot = -18.017757192455 +49000 ekin = 2.30293607053961 | erot = 2.71885537559561 | epot = -22.5026363414396 | etot = -17.4808448953044 +50000 ekin = 2.47053682632632 | erot = 3.4216531112208 | epot = -22.415032340787 | etot = -16.5228424032399 +51000 ekin = 2.70972992123879 | erot = 1.4301791663753 | epot = -22.3056750708571 | etot = -18.165765983243 +52000 ekin = 3.01390456844682 | erot = 1.97787470370191 | epot = -22.2827481318966 | etot = -17.2909688597479 +53000 ekin = 2.43796472406694 | erot = 4.25598325759163 | epot = -22.2611961774508 | etot = -15.5672481957922 +54000 ekin = 2.47286167616923 | erot = 2.3677730007818 | epot = -22.243519577301 | etot = -17.40288490035 +55000 ekin = 2.25994505035907 | erot = 1.91872181759988 | epot = -22.2996523252175 | etot = -18.1209854572585 +56000 ekin = 2.3461223108806 | erot = 2.20461695689782 | epot = -22.370356062429 | etot = -17.8196167946505 +57000 ekin = 2.51587877543148 | erot = 2.87451767129977 | epot = -22.4723343857415 | etot = -17.0819379390103 +58000 ekin = 2.49925674722554 | erot = 2.80569508565646 | epot = -22.5303780310556 | etot = -17.2254261981736 +59000 ekin = 2.75080755995156 | erot = 2.17181245800364 | epot = -22.5861118023788 | etot = -17.6634917844236 +60000 ekin = 3.2849676836621 | erot = 1.98487748777051 | epot = -22.5789662701264 | etot = -17.3091210986938 +61000 ekin = 2.4147550327795 | erot = 1.80972454908232 | epot = -22.5207352876114 | etot = -18.2962557057495 +62000 ekin = 2.82665653061546 | erot = 1.68517769072779 | epot = -22.4078181490349 | etot = -17.8959839276917 +63000 ekin = 3.70002607874218 | erot = 1.92704686824234 | epot = -22.2626867402007 | etot = -16.6356137932161 +64000 ekin = 3.61736288982706 | erot = 3.03600982585025 | epot = -22.2659045523542 | etot = -15.6125318366769 +65000 ekin = 3.40363639902008 | erot = 3.89044870099903 | epot = -22.2274777177663 | etot = -14.9333926177472 +66000 ekin = 2.94418257190202 | erot = 2.45963190668857 | epot = -22.1363667635561 | etot = -16.7325522849655 +67000 ekin = 2.60477940218663 | erot = 2.10479080523513 | epot = -22.038362895265 | etot = -17.3287926878432 +68000 ekin = 2.57158327795866 | erot = 2.46431755410219 | epot = -22.0244560205645 | etot = -16.9885551885036 +69000 ekin = 2.43845102321476 | erot = 2.85996177461682 | epot = -22.0620804569545 | etot = -16.7636676591229 +70000 ekin = 3.08348233524936 | erot = 2.49640850205841 | epot = -22.1433186271748 | etot = -16.563427789867 +71000 ekin = 2.5576093427884 | erot = 2.50957641127969 | epot = -22.2697187660694 | etot = -17.2025330120013 +72000 ekin = 1.7831483145096 | erot = 2.52806261120156 | epot = -22.3815818044114 | etot = -18.0703708787002 +73000 ekin = 1.86053585113659 | erot = 2.3350857968737 | epot = -22.4387359493251 | etot = -18.2431143013148 +74000 ekin = 3.14016175467449 | erot = 2.13186507521504 | epot = -22.447062887188 | etot = -17.1750360572984 +75000 ekin = 2.60368665360454 | erot = 2.18680067560206 | epot = -22.4438479629936 | etot = -17.653360633787 +76000 ekin = 1.9633244939079 | erot = 1.96057322365503 | epot = -22.4704022140376 | etot = -18.5465044964747 +77000 ekin = 2.09841107775422 | erot = 2.1471460143176 | epot = -22.4970899098551 | etot = -18.2515328177832 +78000 ekin = 2.49484391610508 | erot = 2.50538853212234 | epot = -22.4472882748805 | etot = -17.4470558266531 +79000 ekin = 3.10058476014063 | erot = 2.47637061915656 | epot = -22.3558276087081 | etot = -16.7788722294109 +80000 ekin = 2.52610159631253 | erot = 1.89085194000216 | epot = -22.2951000287249 | etot = -17.8781464924102 +81000 ekin = 2.34286765202483 | erot = 2.2376810918426 | epot = -22.2933034850974 | etot = -17.71275474123 +82000 ekin = 1.55517061572748 | erot = 2.02195112736337 | epot = -22.2470532436032 | etot = -18.6699315005123 +83000 ekin = 2.27421747802727 | erot = 3.34135950792192 | epot = -22.2406089881454 | etot = -16.6250320021963 +84000 ekin = 2.91603956429582 | erot = 2.09861057599124 | epot = -22.2305865946953 | etot = -17.2159364544083 +85000 ekin = 3.17172070756641 | erot = 2.91883241347319 | epot = -22.2381339647476 | etot = -16.147580843708 +86000 ekin = 3.48918734688943 | erot = 2.79711547316344 | epot = -22.2890012778608 | etot = -16.0026984578079 +87000 ekin = 3.648834525211 | erot = 2.30637362835037 | epot = -22.2817018896603 | etot = -16.3264937360989 +88000 ekin = 3.16156585935194 | erot = 2.24503314085539 | epot = -22.2225172277202 | etot = -16.8159182275129 +89000 ekin = 3.32092350591891 | erot = 1.79966969251215 | epot = -22.1549711261911 | etot = -17.03437792776 +90000 ekin = 2.41383485147934 | erot = 2.22694238351369 | epot = -21.9352492588881 | etot = -17.294472023895 +91000 ekin = 1.87769980964557 | erot = 2.50898156232204 | epot = -21.766796868726 | etot = -17.3801154967584 +92000 ekin = 2.06420930396832 | erot = 2.23853979300919 | epot = -21.6902828653619 | etot = -17.3875337683844 +93000 ekin = 1.94960374605101 | erot = 3.00245663654886 | epot = -21.6771969695753 | etot = -16.7251365869754 +94000 ekin = 2.07633340602167 | erot = 3.38669471112637 | epot = -21.7794316475531 | etot = -16.3164035304051 +95000 ekin = 2.09307446139111 | erot = 2.0811295310408 | epot = -21.9165143849258 | etot = -17.7423103924939 +96000 ekin = 2.66782345206074 | erot = 1.87453507536254 | epot = -21.9748225431664 | etot = -17.4324640157432 +97000 ekin = 1.93962158410337 | erot = 2.81228342262069 | epot = -22.0301811391172 | etot = -17.2782761323932 +98000 ekin = 1.98651083318125 | erot = 2.05358325550364 | epot = -22.1050988415859 | etot = -18.065004752901 +99000 ekin = 2.50729461715162 | erot = 3.55227490812968 | epot = -22.2148658268239 | etot = -16.1552963015426 +100000 ekin = 1.87954195221303 | erot = 2.38994009743578 | epot = -22.3826768493088 | etot = -18.11319479966 +101000 ekin = 1.66917867676911 | erot = 3.61296864361924 | epot = -22.4122779848186 | etot = -17.1301306644303 +102000 ekin = 1.63707836649616 | erot = 3.33958463197985 | epot = -22.3664797586262 | etot = -17.3898167601502 +103000 ekin = 2.00216132457488 | erot = 2.34409134088738 | epot = -22.338100531932 | etot = -17.9918478664698 +104000 ekin = 2.03704734920245 | erot = 2.74903331701925 | epot = -22.3478074938274 | etot = -17.5617268276057 +105000 ekin = 1.85601249652044 | erot = 2.00020228548217 | epot = -22.2937670136133 | etot = -18.4375522316107 +106000 ekin = 1.70582694215149 | erot = 1.90992656339968 | epot = -22.3252996603125 | etot = -18.7095461547614 +107000 ekin = 2.61183521416777 | erot = 1.56756438600251 | epot = -22.3815585845482 | etot = -18.2021589843779 +108000 ekin = 2.13345133147477 | erot = 2.1967764492834 | epot = -22.2873637709221 | etot = -17.9571359901639 +109000 ekin = 2.23517703897427 | erot = 2.12289589403282 | epot = -22.1519605830327 | etot = -17.7938876500256 +110000 ekin = 1.66340581480182 | erot = 2.52573727214601 | epot = -22.1681066766204 | etot = -17.9789635896725 +111000 ekin = 2.28529122032929 | erot = 2.24044883756493 | epot = -22.1711980210611 | etot = -17.6454579631669 +112000 ekin = 2.60405127944181 | erot = 2.43646974545776 | epot = -22.1582164438795 | etot = -17.11769541898 +113000 ekin = 2.40208651796091 | erot = 3.06270264515793 | epot = -22.1587051510952 | etot = -16.6939159879764 +114000 ekin = 2.34302229470158 | erot = 2.30426477746864 | epot = -22.1439772736805 | etot = -17.4966902015103 +115000 ekin = 1.69616053999229 | erot = 3.11049212247371 | epot = -22.1736739038021 | etot = -17.3670212413361 +116000 ekin = 1.51961045217859 | erot = 2.22203808801726 | epot = -22.2355447345615 | etot = -18.4938961943657 +117000 ekin = 1.69355164638512 | erot = 2.33913072714747 | epot = -22.2671845473364 | etot = -18.2345021738038 +118000 ekin = 2.1960991163694 | erot = 2.33815079858085 | epot = -22.2453229868293 | etot = -17.7110730718791 +119000 ekin = 2.55982892523823 | erot = 2.47378749563683 | epot = -22.2824155531543 | etot = -17.2487991322793 +120000 ekin = 1.76091001620491 | erot = 2.1741296357231 | epot = -22.2369948282136 | etot = -18.3019551762855 +121000 ekin = 2.80671234452976 | erot = 2.30128219469303 | epot = -22.2260257995407 | etot = -17.1180312603179 +122000 ekin = 3.23136903340218 | erot = 3.30036165167127 | epot = -22.2515019863338 | etot = -15.7197713012603 +123000 ekin = 2.8561114897291 | erot = 3.24294818442618 | epot = -22.2018342366988 | etot = -16.1027745625435 +124000 ekin = 2.14842162472016 | erot = 2.7693802805091 | epot = -22.0303368839078 | etot = -17.1125349786785 +125000 ekin = 1.83317468651689 | erot = 1.37271219749613 | epot = -21.8885764971633 | etot = -18.6826896131502 +126000 ekin = 2.45181092117661 | erot = 3.08753876167365 | epot = -21.8912653158441 | etot = -16.3519156329938 +127000 ekin = 2.39800706812202 | erot = 2.35255982488708 | epot = -21.8786845575463 | etot = -17.1281176645372 +128000 ekin = 2.72073389273301 | erot = 1.81206134758344 | epot = -21.8246886433981 | etot = -17.2918934030816 +129000 ekin = 2.76648233159587 | erot = 2.90133130407443 | epot = -21.9103698595755 | etot = -16.2425562239052 +130000 ekin = 3.26919771496399 | erot = 2.56804213542044 | epot = -22.0468205769693 | etot = -16.2095807265849 +131000 ekin = 2.65797021501453 | erot = 2.51912811588696 | epot = -22.1046945041584 | etot = -16.9275961732569 +132000 ekin = 2.60615175826329 | erot = 3.39821871959342 | epot = -22.1393658191679 | etot = -16.1349953413112 +133000 ekin = 2.01702653257964 | erot = 2.88164356754679 | epot = -22.1083395633022 | etot = -17.2096694631758 +134000 ekin = 1.62732528940444 | erot = 1.66916296573806 | epot = -22.0617984863721 | etot = -18.7653102312296 +135000 ekin = 2.44472224525446 | erot = 2.12100291286044 | epot = -22.0290071826116 | etot = -17.4632820244967 +136000 ekin = 2.29361895961086 | erot = 3.04813516280966 | epot = -21.9240579822781 | etot = -16.5823038598575 +137000 ekin = 2.71943103843212 | erot = 2.46250134466529 | epot = -21.759346222065 | etot = -16.5774138389676 +138000 ekin = 3.29026615453928 | erot = 1.74005246857097 | epot = -21.7424803627639 | etot = -16.7121617396537 +139000 ekin = 2.76078280183931 | erot = 1.72093988964439 | epot = -21.8915740702781 | etot = -17.4098513787944 +140000 ekin = 2.72717929836212 | erot = 2.46093572161851 | epot = -21.9730696792527 | etot = -16.784954659272 +141000 ekin = 2.79178566984556 | erot = 2.45152416051809 | epot = -21.9760531770405 | etot = -16.7327433466769 +142000 ekin = 3.51808959230238 | erot = 3.47662361887462 | epot = -21.9144706671159 | etot = -14.9197574559389 +143000 ekin = 2.56674276565954 | erot = 2.02320192154355 | epot = -21.887847774869 | etot = -17.2979030876659 +144000 ekin = 3.71876753045239 | erot = 3.03518010984555 | epot = -21.8693810552709 | etot = -15.115433414973 +145000 ekin = 3.61067898932004 | erot = 2.70461629179152 | epot = -21.7768865247848 | etot = -15.4615912436733 +146000 ekin = 3.85672431702576 | erot = 2.48360222237068 | epot = -21.7383083831155 | etot = -15.3979818437191 +147000 ekin = 3.26264642879795 | erot = 2.07790943830875 | epot = -21.612808589745 | etot = -16.2722527226383 +148000 ekin = 2.49411629896921 | erot = 1.64570933977901 | epot = -21.3601881264357 | etot = -17.2203624876875 +149000 ekin = 2.73353556199719 | erot = 2.27529903215971 | epot = -21.180923940444 | etot = -16.1720893462871 +150000 ekin = 2.6282457385967 | erot = 2.90058901460194 | epot = -21.0864924194498 | etot = -15.5576576662512 +151000 ekin = 2.07954165316093 | erot = 2.1164125590575 | epot = -20.9951076802445 | etot = -16.7991534680261 +152000 ekin = 2.41868973763601 | erot = 2.60413735099777 | epot = -20.8520585412647 | etot = -15.8292314526309 +153000 ekin = 2.12569822788918 | erot = 2.25674944787518 | epot = -20.8874716791535 | etot = -16.5050240033891 +154000 ekin = 2.34486280100484 | erot = 2.61050919353092 | epot = -20.9924730886396 | etot = -16.0371010941038 +155000 ekin = 2.06912274657395 | erot = 3.0299583491991 | epot = -21.0207700832301 | etot = -15.921688987457 +156000 ekin = 2.03235057930374 | erot = 3.18386486882217 | epot = -20.8574059636368 | etot = -15.6411905155109 +157000 ekin = 2.3579061324469 | erot = 1.91132393217369 | epot = -20.8256173876826 | etot = -16.556387323062 +158000 ekin = 2.17332819176356 | erot = 2.47832446500284 | epot = -20.9206749462161 | etot = -16.2690222894497 +159000 ekin = 2.87139796431922 | erot = 2.29125458595932 | epot = -21.0425793637301 | etot = -15.8799268134516 +160000 ekin = 2.19495281512895 | erot = 2.37206762182712 | epot = -21.12868212155 | etot = -16.5616616845939 +161000 ekin = 2.13209841436583 | erot = 2.44149028746738 | epot = -21.2267263358883 | etot = -16.6531376340551 +162000 ekin = 1.75046056470489 | erot = 2.66847316377717 | epot = -21.2792984888785 | etot = -16.8603647603965 +163000 ekin = 2.22203312194875 | erot = 2.03600602857084 | epot = -21.4244626156303 | etot = -17.1664234651107 +164000 ekin = 2.74926161019501 | erot = 1.42936965542836 | epot = -21.5631783920293 | etot = -17.384547126406 +165000 ekin = 2.66465183950737 | erot = 2.28908630196103 | epot = -21.572272285795 | etot = -16.6185341443266 +166000 ekin = 3.29267065001881 | erot = 2.38564084157004 | epot = -21.5039232020267 | etot = -15.8256117104378 +167000 ekin = 3.03664818915841 | erot = 2.03669674074452 | epot = -21.5747204885882 | etot = -16.5013755586853 +168000 ekin = 3.16556842965113 | erot = 1.85206282714724 | epot = -21.6223493129218 | etot = -16.6047180561234 +169000 ekin = 2.24511985727904 | erot = 2.66889068764969 | epot = -21.5368970033532 | etot = -16.6228864584245 +170000 ekin = 2.43734116474603 | erot = 2.49716986363814 | epot = -21.3912465276853 | etot = -16.4567354993011 +171000 ekin = 1.90620260936893 | erot = 2.39687883544744 | epot = -21.3008997539566 | etot = -16.9978183091402 +172000 ekin = 2.87444998880216 | erot = 3.21713663160875 | epot = -21.2616188758685 | etot = -15.1700322554576 +173000 ekin = 2.74942738368889 | erot = 2.14120450530294 | epot = -21.2850360200821 | etot = -16.3944041310903 +174000 ekin = 2.4529377396394 | erot = 2.23261644076142 | epot = -21.3299047479428 | etot = -16.644350567542 +175000 ekin = 2.84864650053625 | erot = 2.37733794803682 | epot = -21.2943230039461 | etot = -16.068338555373 +176000 ekin = 2.13647755199109 | erot = 1.89602819204849 | epot = -21.3605335602015 | etot = -17.3280278161619 +177000 ekin = 2.57740970525463 | erot = 2.74252419383388 | epot = -21.3306809364134 | etot = -16.0107470373249 +178000 ekin = 1.83680522170069 | erot = 2.5856914127028 | epot = -21.2632846497336 | etot = -16.8407880153301 +179000 ekin = 2.51484018139121 | erot = 2.38459479892641 | epot = -21.325303559771 | etot = -16.4258685794534 +180000 ekin = 1.88523508330591 | erot = 2.46381998482447 | epot = -21.4811020579528 | etot = -17.1320469898224 +181000 ekin = 1.75689043588625 | erot = 3.04324017089631 | epot = -21.474228259015 | etot = -16.6740976522324 +182000 ekin = 1.56534231241504 | erot = 2.04864866727399 | epot = -21.4129540971941 | etot = -17.798963117505 +183000 ekin = 2.00287899563344 | erot = 2.82515065812734 | epot = -21.49258719815 | etot = -16.6645575443892 +184000 ekin = 2.68544625765532 | erot = 2.43626281495748 | epot = -21.6103862218356 | etot = -16.4886771492228 +185000 ekin = 2.99891111533195 | erot = 3.19602779235331 | epot = -21.6822175762628 | etot = -15.4872786685775 +186000 ekin = 3.18195376963592 | erot = 2.43765957688182 | epot = -21.7117512273523 | etot = -16.0921378808346 +187000 ekin = 2.64722090162018 | erot = 3.43145857630564 | epot = -21.6694156065006 | etot = -15.5907361285748 +188000 ekin = 2.8593721905413 | erot = 3.05764002667605 | epot = -21.6129263142805 | etot = -15.6959140970631 +189000 ekin = 2.64258352431382 | erot = 1.81957536948003 | epot = -21.5503774009301 | etot = -17.0882185071363 +190000 ekin = 2.2190608435254 | erot = 1.84740673329965 | epot = -21.5105703637082 | etot = -17.4441027868831 +191000 ekin = 2.27442549063464 | erot = 2.06581774328105 | epot = -21.4485511972947 | etot = -17.108307963379 +192000 ekin = 2.27419285809427 | erot = 3.10822480468651 | epot = -21.4844439428341 | etot = -16.1020262800533 +193000 ekin = 1.95256612457884 | erot = 1.88944690058107 | epot = -21.4719648319093 | etot = -17.6299518067494 +194000 ekin = 2.46290863552507 | erot = 2.02714246570739 | epot = -21.3483686370757 | etot = -16.8583175358433 +195000 ekin = 3.12615833704228 | erot = 2.09882827884293 | epot = -21.2854694780647 | etot = -16.0604828621794 +196000 ekin = 2.70126861243405 | erot = 2.51307250710585 | epot = -21.2052184052664 | etot = -15.9908772857265 +197000 ekin = 2.55113347479427 | erot = 2.07490331769114 | epot = -21.0379488001649 | etot = -16.4119120076795 +198000 ekin = 2.7091171175815 | erot = 1.79542986755821 | epot = -21.0311079948236 | etot = -16.5265610096839 +199000 ekin = 2.57086088527333 | erot = 2.33194065149168 | epot = -21.0448935828999 | etot = -16.1420920461349 +200000 ekin = 2.89149033048946 | erot = 1.42165157230865 | epot = -21.03770919399 | etot = -16.7245672911919 +201000 ekin = 2.68304721320748 | erot = 1.55647352804279 | epot = -21.0368254418007 | etot = -16.7973047005504 +202000 ekin = 2.2656487707054 | erot = 2.24246330836477 | epot = -20.9783437689148 | etot = -16.4702316898446 +203000 ekin = 2.11263799464235 | erot = 2.0311722239375 | epot = -20.9045528293636 | etot = -16.7607426107837 +204000 ekin = 2.10289033168206 | erot = 1.89431766090034 | epot = -20.917707897003 | etot = -16.9204999044206 +205000 ekin = 1.32594040742044 | erot = 2.12787440210413 | epot = -20.9650467335179 | etot = -17.5112319239933 +206000 ekin = 1.37942510627947 | erot = 2.255876437166 | epot = -20.9344799697865 | etot = -17.299178426341 +207000 ekin = 1.89707208497052 | erot = 1.80792832329628 | epot = -21.0372131039119 | etot = -17.3322126956451 +208000 ekin = 1.82394216235567 | erot = 3.24636401083921 | epot = -21.2905133091558 | etot = -16.2202071359609 +209000 ekin = 2.80235035495642 | erot = 2.34817422826193 | epot = -21.4119988544966 | etot = -16.2614742712782 +210000 ekin = 3.17268831077415 | erot = 3.11920168004874 | epot = -21.4880486169942 | etot = -15.1961586261713 +211000 ekin = 2.46911290485391 | erot = 2.09583435351186 | epot = -21.6131156278285 | etot = -17.0481683694628 +212000 ekin = 2.36983963899524 | erot = 1.93490727968814 | epot = -21.6916906588951 | etot = -17.3869437402117 +213000 ekin = 1.90089387455099 | erot = 2.5187405361218 | epot = -21.7688631446424 | etot = -17.3492287339696 +214000 ekin = 1.97453946438608 | erot = 2.49804990679736 | epot = -21.7968032544022 | etot = -17.3242138832188 +215000 ekin = 1.97170537707849 | erot = 3.1720109210939 | epot = -21.7980499435109 | etot = -16.6543336453385 +216000 ekin = 1.89064429395263 | erot = 1.88113651267029 | epot = -21.7625464985643 | etot = -17.9907656919414 +217000 ekin = 2.0626433286583 | erot = 1.95286476791462 | epot = -21.8181895344454 | etot = -17.8026814378725 +218000 ekin = 2.31967181974704 | erot = 1.6896622434335 | epot = -21.7699992955268 | etot = -17.7606652323462 +219000 ekin = 2.46739391618502 | erot = 2.20775453602831 | epot = -21.776978875084 | etot = -17.1018304228706 +220000 ekin = 1.73785505731585 | erot = 3.0372433480804 | epot = -21.7321393101048 | etot = -16.9570409047086 +221000 ekin = 1.778697043089 | erot = 2.7846909329313 | epot = -21.7425830987872 | etot = -17.1791951227669 +222000 ekin = 2.62634865011186 | erot = 2.86077326472522 | epot = -21.7007933593054 | etot = -16.2136714444683 +223000 ekin = 3.04431297723215 | erot = 1.94008328047868 | epot = -21.7188465939138 | etot = -16.734450336203 +224000 ekin = 2.71939424183677 | erot = 2.42480251627533 | epot = -21.6866518782312 | etot = -16.5424551201191 +225000 ekin = 2.02593449761365 | erot = 3.37613250979673 | epot = -21.6919775986917 | etot = -16.2899105912813 +226000 ekin = 2.36496088602628 | erot = 2.39060577783945 | epot = -21.7612411053054 | etot = -17.0056744414397 +227000 ekin = 2.73527371921374 | erot = 2.63040468048003 | epot = -21.8235720454426 | etot = -16.4578936457488 +228000 ekin = 2.09009153610323 | erot = 2.26861924367323 | epot = -21.8859446312141 | etot = -17.5272338514377 +229000 ekin = 1.80131280326501 | erot = 1.7963110804324 | epot = -21.9677974652423 | etot = -18.3701735815449 +230000 ekin = 2.77436270232913 | erot = 2.22792046726092 | epot = -21.9902739646399 | etot = -16.9879907950498 +231000 ekin = 3.15789416871844 | erot = 2.77494856675301 | epot = -21.9771750398138 | etot = -16.0443323043424 +232000 ekin = 1.86920525086143 | erot = 1.70617009970185 | epot = -22.0127465263534 | etot = -18.4373711757901 +233000 ekin = 1.75915660001321 | erot = 1.56505378532405 | epot = -21.9936912811375 | etot = -18.6694808958002 +234000 ekin = 2.33631680564953 | erot = 2.05523369254154 | epot = -21.9151391633044 | etot = -17.5235886651133 +235000 ekin = 1.95729755108493 | erot = 2.52297007842176 | epot = -21.8622583087295 | etot = -17.3819906792228 +236000 ekin = 2.26174488772854 | erot = 1.90926942275389 | epot = -21.8776848863915 | etot = -17.7066705759091 +237000 ekin = 2.48859859508474 | erot = 2.6489237604941 | epot = -21.9479801146397 | etot = -16.8104577590608 +238000 ekin = 2.21074117955686 | erot = 2.74245988956904 | epot = -22.0027094279364 | etot = -17.0495083588105 +239000 ekin = 2.72897236706913 | erot = 2.49153579775713 | epot = -22.0211522435864 | etot = -16.8006440787602 +240000 ekin = 3.10410575629688 | erot = 2.19185039149975 | epot = -21.9285399490843 | etot = -16.6325838012877 +241000 ekin = 3.04659381738443 | erot = 2.65407823399251 | epot = -21.8553999209703 | etot = -16.1547278695933 +242000 ekin = 2.22634814860329 | erot = 2.33710119371497 | epot = -21.778295180705 | etot = -17.2148458383868 +243000 ekin = 1.53739989500925 | erot = 2.804422651144 | epot = -21.7210994015014 | etot = -17.3792768553481 +244000 ekin = 1.91594160283678 | erot = 2.43897673315061 | epot = -21.6239948430905 | etot = -17.2690765071031 +245000 ekin = 1.9573212108497 | erot = 2.60792757585164 | epot = -21.4969890421964 | etot = -16.931740255495 +246000 ekin = 2.07155268659352 | erot = 2.40712847472271 | epot = -21.4555802858827 | etot = -16.9768991245664 +247000 ekin = 1.55687592357629 | erot = 2.27937051296287 | epot = -21.415801560854 | etot = -17.5795551243148 +248000 ekin = 1.83815644169539 | erot = 2.56757546633135 | epot = -21.4396063392852 | etot = -17.0338744312585 +249000 ekin = 1.79880701831597 | erot = 2.0439839568354 | epot = -21.5116552123395 | etot = -17.6688642371882 +250000 ekin = 1.6819474109243 | erot = 3.39458382990459 | epot = -21.5432862054069 | etot = -16.466754964578 +251000 ekin = 2.13148829031636 | erot = 3.25959517865089 | epot = -21.5335137503413 | etot = -16.142430281374 +252000 ekin = 2.05395839402013 | erot = 2.53819950912971 | epot = -21.5603119938518 | etot = -16.9681540907019 +253000 ekin = 1.65837982841157 | erot = 3.21084156386521 | epot = -21.5856483774528 | etot = -16.716426985176 +254000 ekin = 2.32607189562296 | erot = 3.10904441141191 | epot = -21.5835562113995 | etot = -16.1484399043647 +255000 ekin = 2.50516183463011 | erot = 2.76806754476897 | epot = -21.5622650070292 | etot = -16.2890356276301 +256000 ekin = 1.97348594928106 | erot = 2.62554900973971 | epot = -21.5549569513865 | etot = -16.9559219923657 +257000 ekin = 2.23010268129159 | erot = 3.26394503338319 | epot = -21.5756937773404 | etot = -16.0816460626656 +258000 ekin = 2.0447966409083 | erot = 1.84671550533958 | epot = -21.6926265414806 | etot = -17.8011143952327 +259000 ekin = 2.87403716266236 | erot = 2.7890686554313 | epot = -21.799948240906 | etot = -16.1368424228124 +260000 ekin = 2.90780294403218 | erot = 2.19263097772001 | epot = -21.8560884935551 | etot = -16.7556545718029 +261000 ekin = 2.76828016335186 | erot = 2.34066383431491 | epot = -21.904753347489 | etot = -16.7958093498223 +262000 ekin = 3.52268021990509 | erot = 1.77075610541266 | epot = -21.923252751046 | etot = -16.6298164257282 +263000 ekin = 3.08420493567484 | erot = 2.42539400967894 | epot = -21.8573813915989 | etot = -16.3477824462451 +264000 ekin = 2.24745015945595 | erot = 2.03541588430139 | epot = -21.8692313889178 | etot = -17.5863653451605 +265000 ekin = 1.92522220276231 | erot = 2.5003676829468 | epot = -21.7418152763709 | etot = -17.3162253906618 +266000 ekin = 2.39641107663208 | erot = 3.25288398956727 | epot = -21.6961161037834 | etot = -16.046821037584 +267000 ekin = 1.71111784450077 | erot = 2.23671058890166 | epot = -21.6618183077995 | etot = -17.7139898743971 +268000 ekin = 2.10089423119538 | erot = 3.22434301936133 | epot = -21.6199098144813 | etot = -16.2946725639246 +269000 ekin = 1.9625053447265 | erot = 2.78709438989466 | epot = -21.512378343547 | etot = -16.7627786089258 +270000 ekin = 2.11347862898579 | erot = 2.66955708081142 | epot = -21.4131997021519 | etot = -16.6301639923547 +271000 ekin = 2.18755627878071 | erot = 3.10635949745237 | epot = -21.231195119641 | etot = -15.9372793434079 +272000 ekin = 2.53142755489725 | erot = 2.28018838604503 | epot = -21.0716416692008 | etot = -16.2600257282585 +273000 ekin = 1.9364743445402 | erot = 1.99261296885892 | epot = -21.007557675667 | etot = -17.0784703622679 +274000 ekin = 1.91013630831847 | erot = 2.2120127665723 | epot = -21.0477834541013 | etot = -16.9256343792105 +275000 ekin = 1.79273258693701 | erot = 3.10050032804429 | epot = -21.0858519409205 | etot = -16.1926190259392 +276000 ekin = 3.35719138398128 | erot = 2.41111345420191 | epot = -21.0304226706007 | etot = -15.2621178324176 +277000 ekin = 2.41774397151369 | erot = 1.50719443697989 | epot = -20.9759671563228 | etot = -17.0510287478292 +278000 ekin = 2.53951758510302 | erot = 2.14756601555722 | epot = -20.9653070148297 | etot = -16.2782234141694 +279000 ekin = 1.90856122527452 | erot = 2.38982437581387 | epot = -20.9745429336076 | etot = -16.6761573325192 +280000 ekin = 2.37131544290542 | erot = 3.59489996493466 | epot = -20.85613421052 | etot = -14.8899188026799 +281000 ekin = 1.76889591811704 | erot = 1.7951894912658 | epot = -20.9289254822807 | etot = -17.3648400728979 +282000 ekin = 2.27070827347114 | erot = 3.05009551199377 | epot = -20.8916515658568 | etot = -15.5708477803919 +283000 ekin = 2.18685960365006 | erot = 2.20812220616949 | epot = -20.8474969045899 | etot = -16.4525150947704 +284000 ekin = 1.91940159973892 | erot = 2.20890146173499 | epot = -20.8751887573221 | etot = -16.7468856958482 +285000 ekin = 3.15509933694634 | erot = 1.80738796351619 | epot = -21.0554892608396 | etot = -16.0930019603771 +286000 ekin = 3.87415003559708 | erot = 1.83530883692693 | epot = -21.2366462656484 | etot = -15.5271873931244 +287000 ekin = 3.65191681280166 | erot = 2.913547855761 | epot = -21.3085830740657 | etot = -14.7431184055031 +288000 ekin = 3.25566521528532 | erot = 1.61409275051713 | epot = -21.3016538192157 | etot = -16.4318958534132 +289000 ekin = 2.57277357969492 | erot = 2.7865509468974 | epot = -21.2753452951968 | etot = -15.9160207686044 +290000 ekin = 2.70842209282674 | erot = 2.41918512811132 | epot = -21.2877903800065 | etot = -16.1601831590685 +291000 ekin = 2.06014704473036 | erot = 2.36104758138505 | epot = -21.2845199368975 | etot = -16.8633253107821 +292000 ekin = 2.28556270655109 | erot = 2.04929815389926 | epot = -21.3435089189608 | etot = -17.0086480585104 +293000 ekin = 2.24999256733429 | erot = 2.35234276421049 | epot = -21.4532864362272 | etot = -16.8509511046824 +294000 ekin = 2.93128079968628 | erot = 2.88901294012339 | epot = -21.5344832077337 | etot = -15.7141894679241 +295000 ekin = 2.66786158124138 | erot = 2.29144551421467 | epot = -21.6972562684637 | etot = -16.7379491730076 +296000 ekin = 2.20703931624838 | erot = 2.91798090137806 | epot = -21.7499994740518 | etot = -16.6249792564254 +297000 ekin = 2.17711857895463 | erot = 3.3139407196584 | epot = -21.7438418246471 | etot = -16.2527825260341 +298000 ekin = 2.91263821701566 | erot = 2.35687557807243 | epot = -21.7003108484957 | etot = -16.4307970534076 +299000 ekin = 3.16765240032233 | erot = 2.23927360570976 | epot = -21.8111744518828 | etot = -16.4042484458507 +300000 ekin = 3.29571242152463 | erot = 1.38932168050636 | epot = -21.8854995787115 | etot = -17.2004654766805 +301000 ekin = 2.38336849338668 | erot = 3.30873138065989 | epot = -21.9040100279112 | etot = -16.2119101538647 +302000 ekin = 2.92546415072637 | erot = 3.247691767578 | epot = -21.8700812142841 | etot = -15.6969252959798 +303000 ekin = 2.4103373416559 | erot = 2.62018947425678 | epot = -21.8591741279587 | etot = -16.828647312046 +304000 ekin = 2.22974120288231 | erot = 2.69525972032883 | epot = -21.7977946057185 | etot = -16.8727936825074 +305000 ekin = 2.37900884029014 | erot = 2.39016080950149 | epot = -21.7722637572341 | etot = -17.0030941074424 +306000 ekin = 1.9446171443063 | erot = 2.89927908625624 | epot = -21.772518921465 | etot = -16.9286226909024 +307000 ekin = 2.51296678773709 | erot = 2.07871985749639 | epot = -21.7145354205816 | etot = -17.1228487753482 +308000 ekin = 2.81300442192371 | erot = 2.63068774502107 | epot = -21.7059595575782 | etot = -16.2622673906334 +309000 ekin = 2.33295752921531 | erot = 2.12114847477695 | epot = -21.6789859227475 | etot = -17.2248799187552 +310000 ekin = 2.52283407385729 | erot = 3.21577684610766 | epot = -21.6977338722704 | etot = -15.9591229523054 +311000 ekin = 2.34905401714491 | erot = 3.03961744974846 | epot = -21.7112095513776 | etot = -16.3225380844842 +312000 ekin = 1.82668239636477 | erot = 3.25882975871633 | epot = -21.5839087054203 | etot = -16.4983965503392 +313000 ekin = 1.63596397844578 | erot = 2.08106491982899 | epot = -21.6088054377576 | etot = -17.8917765394829 +314000 ekin = 2.27268061655198 | erot = 2.56861774872119 | epot = -21.622333325343 | etot = -16.7810349600698 +315000 ekin = 2.53123691731374 | erot = 2.1324731770604 | epot = -21.7018350864597 | etot = -17.0381249920856 +316000 ekin = 1.99511026234591 | erot = 1.80085053236165 | epot = -21.7165753862862 | etot = -17.9206145915787 +317000 ekin = 2.11342130166581 | erot = 2.00931752224566 | epot = -21.7049091699378 | etot = -17.5821703460263 +318000 ekin = 2.29657040201996 | erot = 1.9218952520588 | epot = -21.6732020643863 | etot = -17.4547364103076 +319000 ekin = 1.98100978177984 | erot = 1.68241530251755 | epot = -21.5700337503682 | etot = -17.9066086660708 +320000 ekin = 2.46277902525288 | erot = 3.0707129249839 | epot = -21.5118277867106 | etot = -15.9783358364738 +321000 ekin = 1.8533722862421 | erot = 2.67441728470359 | epot = -21.5413634192757 | etot = -17.01357384833 +322000 ekin = 1.94543884879318 | erot = 3.3613066315754 | epot = -21.4649757180038 | etot = -16.1582302376352 +323000 ekin = 1.92582236335168 | erot = 2.08582462630249 | epot = -21.5020070864549 | etot = -17.4903600968007 +324000 ekin = 2.21385975174577 | erot = 2.45972054558752 | epot = -21.6040339423077 | etot = -16.9304536449744 +325000 ekin = 2.71973574551436 | erot = 2.37172075216282 | epot = -21.7154750081878 | etot = -16.6240185105106 +326000 ekin = 1.88834012476607 | erot = 1.92160793718507 | epot = -21.7697066104337 | etot = -17.9597585484825 +327000 ekin = 3.03100650626309 | erot = 1.66914039489952 | epot = -21.8474776692767 | etot = -17.1473307681141 +328000 ekin = 2.74123304387623 | erot = 1.9170666048058 | epot = -21.8856206551572 | etot = -17.2273210064752 +329000 ekin = 2.94158338898171 | erot = 3.13997083102765 | epot = -21.9406516192959 | etot = -15.8590973992865 +330000 ekin = 2.91669398329971 | erot = 2.01301123001111 | epot = -21.9369752911326 | etot = -17.0072700778218 +331000 ekin = 2.28417665381006 | erot = 2.04960167200569 | epot = -21.927160006304 | etot = -17.5933816804883 +332000 ekin = 2.4148148688836 | erot = 3.18178691603942 | epot = -21.9797962539673 | etot = -16.3831944690443 +333000 ekin = 2.45630818257634 | erot = 2.70954264697347 | epot = -22.0834375892948 | etot = -16.917586759745 +334000 ekin = 2.37347521855933 | erot = 2.99534828037212 | epot = -22.119902754337 | etot = -16.7510792554055 +335000 ekin = 2.11274250313861 | erot = 3.56585847378427 | epot = -22.1620352555629 | etot = -16.48343427864 +336000 ekin = 2.63429420241716 | erot = 2.12841745309053 | epot = -22.1384285356293 | etot = -17.3757168801216 +337000 ekin = 2.74014146566976 | erot = 2.73588205536329 | epot = -22.1194416289215 | etot = -16.6434181078884 +338000 ekin = 1.84480508690214 | erot = 2.23455733552335 | epot = -22.1965093971539 | etot = -18.1171469747284 +339000 ekin = 1.56183988387053 | erot = 2.489100411134 | epot = -22.2396203002948 | etot = -18.1886800052903 +340000 ekin = 1.46409027371678 | erot = 4.0512372950447 | epot = -22.1584645354502 | etot = -16.6431369666887 +341000 ekin = 1.68589245970878 | erot = 2.79353148184118 | epot = -22.1393063295445 | etot = -17.6598823879945 +342000 ekin = 1.9632055547669 | erot = 2.74455536956775 | epot = -22.2008946996018 | etot = -17.4931337752671 +343000 ekin = 2.66782090058793 | erot = 3.18156117072004 | epot = -22.2922370675599 | etot = -16.4428549962519 +344000 ekin = 1.78878469299216 | erot = 2.18063379585249 | epot = -22.3229742728833 | etot = -18.3535557840387 +345000 ekin = 1.540972096623 | erot = 1.85836807653953 | epot = -22.3669594635967 | etot = -18.9676192904341 +346000 ekin = 1.69306131915114 | erot = 1.80797582028411 | epot = -22.3312791976866 | etot = -18.8302420582514 +347000 ekin = 1.37617258934979 | erot = 2.61616357123582 | epot = -22.3534264320593 | etot = -18.3610902714737 +348000 ekin = 2.13829045790164 | erot = 2.85908731375532 | epot = -22.3464198630052 | etot = -17.3490420913483 +349000 ekin = 1.82945196641201 | erot = 1.97678849263654 | epot = -22.3619223728943 | etot = -18.5556819138458 +350000 ekin = 1.78944470920989 | erot = 2.50950790539659 | epot = -22.3467767277336 | etot = -18.0478241131271 +351000 ekin = 1.68749587286921 | erot = 2.81742906170281 | epot = -22.4171372510498 | etot = -17.9122123164778 +352000 ekin = 2.77021178817643 | erot = 2.15256178979697 | epot = -22.5877268787862 | etot = -17.6649533008128 +353000 ekin = 3.5651579503159 | erot = 1.46627940614144 | epot = -22.6396840781933 | etot = -17.608246721736 +354000 ekin = 3.44763260550689 | erot = 2.25092776011915 | epot = -22.5553143373262 | etot = -16.8567539717001 +355000 ekin = 2.03402845200418 | erot = 2.90906782343746 | epot = -22.5137132330461 | etot = -17.5706169576044 +356000 ekin = 2.10644486273696 | erot = 3.31938387624324 | epot = -22.5442634045104 | etot = -17.1184346655302 +357000 ekin = 2.76535001946383 | erot = 2.50873330135166 | epot = -22.52215971412 | etot = -17.2480763933045 +358000 ekin = 2.53751054023787 | erot = 2.26477084741189 | epot = -22.5103746530379 | etot = -17.7080932653881 +359000 ekin = 3.23570364771486 | erot = 2.52813698122051 | epot = -22.6019986378314 | etot = -16.838158008896 +360000 ekin = 2.59175576606819 | erot = 1.97223576668381 | epot = -22.6470028729806 | etot = -18.0830113402286 +361000 ekin = 2.61182361704566 | erot = 2.50385714239847 | epot = -22.6927829246934 | etot = -17.5771021652493 +362000 ekin = 2.38475515872101 | erot = 3.84233912950958 | epot = -22.6454854809905 | etot = -16.4183911927599 +363000 ekin = 2.88487115582968 | erot = 1.98709532428838 | epot = -22.5316518293815 | etot = -17.6596853492635 +364000 ekin = 2.24456282663807 | erot = 1.87857741688963 | epot = -22.4065988337859 | etot = -18.2834585902582 +365000 ekin = 2.04295690198209 | erot = 2.81008642631349 | epot = -22.2314366274422 | etot = -17.3783932991466 +366000 ekin = 2.266544192376 | erot = 1.95642386899595 | epot = -22.1933765521819 | etot = -17.97040849081 +367000 ekin = 2.81580114465084 | erot = 2.51878026336671 | epot = -22.2503978612043 | etot = -16.9158164531867 +368000 ekin = 2.81616947616975 | erot = 2.18673959088794 | epot = -22.3700662776457 | etot = -17.367157210588 +369000 ekin = 2.31685128708704 | erot = 2.8485166214536 | epot = -22.4347113127671 | etot = -17.2693434042264 +370000 ekin = 2.66633369096824 | erot = 2.10373843245294 | epot = -22.5097473869516 | etot = -17.7396752635304 +371000 ekin = 2.19554700980946 | erot = 3.61136788339347 | epot = -22.5751109079912 | etot = -16.7681960147883 +372000 ekin = 1.77355024694411 | erot = 3.42422008956619 | epot = -22.6682235461143 | etot = -17.470453209604 +373000 ekin = 2.14882393689494 | erot = 2.79102164241389 | epot = -22.7183823639386 | etot = -17.7785367846297 +374000 ekin = 2.69471790401649 | erot = 3.57888941010137 | epot = -22.8644350080836 | etot = -16.5908276939657 +375000 ekin = 2.40588229328688 | erot = 2.98559431132055 | epot = -22.9231560989464 | etot = -17.5316794943389 +376000 ekin = 3.36525975858234 | erot = 3.24749522030667 | epot = -22.9448546765658 | etot = -16.3320996976767 +377000 ekin = 3.1898535090454 | erot = 2.65440981370779 | epot = -22.8890189773608 | etot = -17.0447556546076 +378000 ekin = 1.54661929765086 | erot = 2.66304115784623 | epot = -22.8894135140088 | etot = -18.6797530585117 +379000 ekin = 1.93848939303329 | erot = 2.54534330055222 | epot = -22.9081180555037 | etot = -18.4242853619182 +380000 ekin = 2.66258042260528 | erot = 2.88895789126712 | epot = -22.9376621442708 | etot = -17.3861238303984 +381000 ekin = 2.95374671041029 | erot = 2.1769850563328 | epot = -22.9816080577256 | etot = -17.8508762909825 +382000 ekin = 2.58850292280408 | erot = 2.01885613358327 | epot = -22.9279053853416 | etot = -18.3205463289542 +383000 ekin = 2.01542491830335 | erot = 2.50444856286716 | epot = -22.9509700194999 | etot = -18.4310965383294 +384000 ekin = 2.10088918623931 | erot = 2.19861971638621 | epot = -22.9637245689725 | etot = -18.664215666347 +385000 ekin = 1.91381637067085 | erot = 1.63023926713733 | epot = -22.9798616984434 | etot = -19.4358060606352 +386000 ekin = 1.55997375471681 | erot = 1.35864886272388 | epot = -23.026401230456 | etot = -20.1077786130153 +387000 ekin = 2.21265030198491 | erot = 1.7501227932087 | epot = -23.0266356759123 | etot = -19.0638625807187 +388000 ekin = 1.98732621523102 | erot = 1.96003045102707 | epot = -22.9343684877508 | etot = -18.9870118214927 +389000 ekin = 2.5418388293764 | erot = 2.33933777400626 | epot = -22.9288764120935 | etot = -18.0476998087109 +390000 ekin = 2.07840415144685 | erot = 1.88714080084969 | epot = -22.8368099519711 | etot = -18.8712649996745 +391000 ekin = 1.85201287716429 | erot = 2.41309749069991 | epot = -22.8035614550317 | etot = -18.5384510871675 +392000 ekin = 2.19897450334475 | erot = 2.90002030847564 | epot = -22.8026053664846 | etot = -17.7036105546642 +393000 ekin = 2.15250422129825 | erot = 3.1954140871906 | epot = -22.8935871868038 | etot = -17.5456688783149 +394000 ekin = 1.99220043003136 | erot = 2.14720550675182 | epot = -22.8839525821639 | etot = -18.7445466453807 +395000 ekin = 2.03384825587122 | erot = 2.5026704188622 | epot = -22.9355340107645 | etot = -18.3990153360311 +396000 ekin = 2.14388612805494 | erot = 1.95887569078926 | epot = -23.0314147787906 | etot = -18.9286529599464 +397000 ekin = 2.39817268086959 | erot = 1.65198489715495 | epot = -23.1381610188687 | etot = -19.0880034408442 +398000 ekin = 3.5848529329223 | erot = 2.5137795193631 | epot = -23.2493671328086 | etot = -17.1507346805232 +399000 ekin = 2.65690410152896 | erot = 1.78815540583896 | epot = -23.3551071826471 | etot = -18.9100476752792 +400000 ekin = 2.5116972230557 | erot = 2.10904464709597 | epot = -23.4242760069967 | etot = -18.803534136845 +401000 ekin = 2.05111703519218 | erot = 2.15375363886755 | epot = -23.4796569613041 | etot = -19.2747862872443 +402000 ekin = 2.43372934314587 | erot = 2.11260100954187 | epot = -23.4682554876931 | etot = -18.9219251350053 +403000 ekin = 2.53598880596584 | erot = 2.81278076880176 | epot = -23.5378775828587 | etot = -18.1891080080911 +404000 ekin = 2.18194702425602 | erot = 2.63711249102604 | epot = -23.6244518702206 | etot = -18.8053923549385 +405000 ekin = 2.45121967393562 | erot = 2.40500763090291 | epot = -23.6357713162683 | etot = -18.7795440114298 +406000 ekin = 2.21958671378093 | erot = 2.24922226746756 | epot = -23.6553601287 | etot = -19.1865511474515 +407000 ekin = 1.98564574231222 | erot = 2.77863717556005 | epot = -23.5607032705187 | etot = -18.7964203526464 +408000 ekin = 2.57646591315375 | erot = 2.58095218000659 | epot = -23.4398366413677 | etot = -18.2824185482073 +409000 ekin = 2.36945583486912 | erot = 2.25935935813466 | epot = -23.3294611001761 | etot = -18.7006459071724 +410000 ekin = 2.02254604345491 | erot = 1.96483214055515 | epot = -23.3122760741247 | etot = -19.3248978901146 +411000 ekin = 1.87895167522371 | erot = 2.65152784802951 | epot = -23.2919254735047 | etot = -18.7614459502515 +412000 ekin = 1.99369299492691 | erot = 2.68971636909523 | epot = -23.2559513781021 | etot = -18.57254201408 +413000 ekin = 2.38900558877156 | erot = 2.64564764432049 | epot = -23.2013938450539 | etot = -18.1667406119618 +414000 ekin = 2.42764300748033 | erot = 1.75174590229272 | epot = -23.1266922276306 | etot = -18.9473033178576 +415000 ekin = 2.76414124953308 | erot = 2.44215852210494 | epot = -23.1817305186064 | etot = -17.9754307469683 +416000 ekin = 2.08280868301927 | erot = 2.76578542751831 | epot = -23.1905832299196 | etot = -18.341989119382 +417000 ekin = 1.99968890800012 | erot = 1.95787693284286 | epot = -23.194417716001 | etot = -19.236851875158 +418000 ekin = 2.38298881868294 | erot = 2.55898711987873 | epot = -23.1586352965619 | etot = -18.2166593580002 +419000 ekin = 2.9839633883085 | erot = 2.57065203496089 | epot = -23.0544780894577 | etot = -17.4998626661883 +420000 ekin = 2.60178854557762 | erot = 2.46052060802045 | epot = -22.9622762729971 | etot = -17.899967119399 +421000 ekin = 2.51720276737396 | erot = 1.77804167911051 | epot = -22.9515897224038 | etot = -18.6563452759193 +422000 ekin = 2.7320348139792 | erot = 1.67298118116889 | epot = -22.9404137463627 | etot = -18.5353977512146 +423000 ekin = 2.13282380031375 | erot = 2.54987675813572 | epot = -22.8157706530705 | etot = -18.133070094621 +424000 ekin = 1.90610672595356 | erot = 2.31894231724673 | epot = -22.7787002443962 | etot = -18.553651201196 +425000 ekin = 2.37366400687573 | erot = 1.95578603620107 | epot = -22.7873996262579 | etot = -18.4579495831811 +426000 ekin = 2.23502410344739 | erot = 2.60951465135819 | epot = -22.8069525247999 | etot = -17.9624137699943 +427000 ekin = 1.88572309905852 | erot = 2.12675775194484 | epot = -22.973782602072 | etot = -18.9613017510686 +428000 ekin = 1.93180562731872 | erot = 2.45432362930894 | epot = -23.1062681387344 | etot = -18.7201388821067 +429000 ekin = 1.72618205037519 | erot = 2.1638575670951 | epot = -23.1203764425356 | etot = -19.2303368250654 +430000 ekin = 2.31236502680075 | erot = 2.14057167953237 | epot = -23.127316365141 | etot = -18.6743796588079 +431000 ekin = 2.45859340033276 | erot = 2.41557475448707 | epot = -23.137683007962 | etot = -18.2635148531422 +432000 ekin = 2.80043339920945 | erot = 2.19140888866301 | epot = -23.1459051340744 | etot = -18.1540628462019 +433000 ekin = 2.2038223816989 | erot = 1.62239062651454 | epot = -23.1902054552061 | etot = -19.3639924469927 +434000 ekin = 2.59117398719482 | erot = 2.35262979682601 | epot = -23.2174180769097 | etot = -18.2736142928889 +435000 ekin = 2.29283868462832 | erot = 2.54026007379789 | epot = -23.1968654207439 | etot = -18.3637666623176 +436000 ekin = 2.43256920688117 | erot = 2.74968424233253 | epot = -23.2466230085986 | etot = -18.0643695593849 +437000 ekin = 1.64425125112848 | erot = 3.23329270267647 | epot = -23.2380191669749 | etot = -18.3604752131699 +438000 ekin = 1.56124620606823 | erot = 2.60252333491232 | epot = -23.1341667906033 | etot = -18.9703972496228 +439000 ekin = 2.30501653948793 | erot = 1.93890022921162 | epot = -23.14170715719 | etot = -18.8977903884904 +440000 ekin = 2.52023257151789 | erot = 3.04669715760005 | epot = -23.2021590525686 | etot = -17.6352293234507 +441000 ekin = 2.79903748157629 | erot = 2.54578114158762 | epot = -23.1760357267403 | etot = -17.8312171035764 +442000 ekin = 2.93503932875119 | erot = 2.87674150367343 | epot = -23.1192988997858 | etot = -17.3075180673612 +443000 ekin = 1.96853850230447 | erot = 1.76444304280728 | epot = -23.0474504745021 | etot = -19.3144689293904 +444000 ekin = 2.00740903163919 | erot = 2.25338146232896 | epot = -22.9768126386128 | etot = -18.7160221446446 +445000 ekin = 2.22543241532629 | erot = 2.06325853122729 | epot = -22.8128736901554 | etot = -18.5241827436018 +446000 ekin = 2.44497213168066 | erot = 2.37296472072563 | epot = -22.7182187420116 | etot = -17.9002818896053 +447000 ekin = 2.27682912672612 | erot = 2.40590062157627 | epot = -22.73821768508 | etot = -18.0554879367776 +448000 ekin = 2.17717815648414 | erot = 1.94002353369628 | epot = -22.8515885285926 | etot = -18.7343868384122 +449000 ekin = 2.21957974285234 | erot = 2.34288028472299 | epot = -22.9413256171992 | etot = -18.3788655896239 +450000 ekin = 2.75054329798646 | erot = 1.97942707751151 | epot = -22.8960066852305 | etot = -18.1660363097325 +451000 ekin = 2.21127283509867 | erot = 2.13383865709095 | epot = -22.93012845553 | etot = -18.5850169633403 +452000 ekin = 2.54342208027875 | erot = 2.35725031977164 | epot = -22.9678192920236 | etot = -18.0671468919732 +453000 ekin = 2.22826691368246 | erot = 1.78505555998555 | epot = -22.9525856519538 | etot = -18.9392631782858 +454000 ekin = 2.43963081757063 | erot = 2.59545869820689 | epot = -22.8816014548474 | etot = -17.8465119390699 +455000 ekin = 2.04579285921012 | erot = 2.79600798010941 | epot = -22.6671256943706 | etot = -17.8253248550511 +456000 ekin = 2.02054568037702 | erot = 2.5142933737518 | epot = -22.4807651427491 | etot = -17.9459260886202 +457000 ekin = 2.62427297855768 | erot = 2.43881475758852 | epot = -22.3628471473124 | etot = -17.2997594111662 +458000 ekin = 2.00982157063058 | erot = 1.99237218757745 | epot = -22.2563036448067 | etot = -18.2541098865987 +459000 ekin = 1.75248702434071 | erot = 2.49686008961238 | epot = -22.2467888503062 | etot = -17.9974417363531 +460000 ekin = 1.91910131837566 | erot = 2.07619395094217 | epot = -22.2400567481829 | etot = -18.2447614788651 +461000 ekin = 1.56844353839394 | erot = 1.28973659789019 | epot = -22.2093526564538 | etot = -19.3511725201697 +462000 ekin = 2.45174884293064 | erot = 1.36031689293857 | epot = -22.3089787954009 | etot = -18.4969130595317 +463000 ekin = 2.64349839520108 | erot = 2.07831354185085 | epot = -22.4300376076151 | etot = -17.7082256705631 +464000 ekin = 2.67299819724031 | erot = 3.73615881795558 | epot = -22.554470130186 | etot = -16.1453131149901 +465000 ekin = 1.95390361110071 | erot = 2.23920710641231 | epot = -22.7384686297881 | etot = -18.545357912275 +466000 ekin = 2.13348556167989 | erot = 2.96280610170109 | epot = -22.8443072066537 | etot = -17.7480155432727 +467000 ekin = 2.46613760277875 | erot = 2.11616591175904 | epot = -23.0265043956358 | etot = -18.444200881098 +468000 ekin = 1.99036864211387 | erot = 1.62858187482038 | epot = -23.0961237334908 | etot = -19.4771732165565 +469000 ekin = 2.49659836745282 | erot = 2.63661728128629 | epot = -23.1411267023576 | etot = -18.0079110536185 +470000 ekin = 2.92199371715687 | erot = 3.21712399422296 | epot = -23.1457817109815 | etot = -17.0066639996017 +471000 ekin = 2.36477645073574 | erot = 1.72314859686431 | epot = -23.1045733261495 | etot = -19.0166482785494 +472000 ekin = 2.18519498855062 | erot = 2.00240720258206 | epot = -23.072627104452 | etot = -18.8850249133193 +473000 ekin = 2.3714321613692 | erot = 2.86124663404655 | epot = -23.0328429128019 | etot = -17.8001641173862 +474000 ekin = 2.1857949588469 | erot = 2.60051446256873 | epot = -22.9136735669303 | etot = -18.1273641455147 +475000 ekin = 2.39661135768768 | erot = 2.01358694537797 | epot = -22.813046501162 | etot = -18.4028481980963 +476000 ekin = 2.10676579065005 | erot = 2.60327856915634 | epot = -22.8119267991277 | etot = -18.1018824393213 +477000 ekin = 2.53295314095718 | erot = 3.55510942450984 | epot = -22.7955031957515 | etot = -16.7074406302845 +478000 ekin = 2.40630114318287 | erot = 2.73236241457618 | epot = -22.7034337758127 | etot = -17.5647702180536 +479000 ekin = 1.27745698905519 | erot = 2.99245403250463 | epot = -22.6605920931777 | etot = -18.3906810716179 +480000 ekin = 1.82390564518045 | erot = 2.13920354248295 | epot = -22.6299626931083 | etot = -18.6668535054449 +481000 ekin = 2.3880478628611 | erot = 3.18399864702822 | epot = -22.6553769169915 | etot = -17.0833304071022 +482000 ekin = 3.20116727691415 | erot = 2.41976760575225 | epot = -22.6125762236254 | etot = -16.991641340959 +483000 ekin = 3.03846588981692 | erot = 2.48627946336888 | epot = -22.5774232520165 | etot = -17.0526778988307 +484000 ekin = 2.70181776439228 | erot = 2.52677846233176 | epot = -22.6070502809988 | etot = -17.3784540542748 +485000 ekin = 3.27224317472663 | erot = 2.42431335826243 | epot = -22.5997277235211 | etot = -16.9031711905321 +486000 ekin = 1.96596043103987 | erot = 1.75891125021975 | epot = -22.642547970919 | etot = -18.9176762896594 +487000 ekin = 2.6234378417876 | erot = 2.50755895035553 | epot = -22.7339556642929 | etot = -17.6029588721497 +488000 ekin = 1.75208074499658 | erot = 2.6448687233026 | epot = -22.7917400975639 | etot = -18.3947906292648 +489000 ekin = 2.08733298303259 | erot = 2.9523180967106 | epot = -22.881879447047 | etot = -17.8422283673038 +490000 ekin = 2.30760030156363 | erot = 2.33161319100248 | epot = -22.8847649865187 | etot = -18.2455514939526 +491000 ekin = 2.48196214295004 | erot = 2.59523958504393 | epot = -22.8776771178079 | etot = -17.800475389814 +492000 ekin = 3.28209206383218 | erot = 2.1852502939697 | epot = -22.8577625078557 | etot = -17.3904201500538 +493000 ekin = 3.37967323337949 | erot = 2.35355143859173 | epot = -22.8047552632571 | etot = -17.0715305912858 +494000 ekin = 3.57464120696614 | erot = 2.24853455202993 | epot = -22.8042956353342 | etot = -16.9811198763381 +495000 ekin = 2.5052992174061 | erot = 2.15850924694968 | epot = -22.7996067752132 | etot = -18.1357983108574 +496000 ekin = 1.95429188426678 | erot = 3.5825937389492 | epot = -22.837298805698 | etot = -17.3004131824821 +497000 ekin = 2.22186292996358 | erot = 2.46502235984734 | epot = -22.8432554612651 | etot = -18.1563701714542 +498000 ekin = 1.72648192614392 | erot = 2.39641281876546 | epot = -22.7792810810776 | etot = -18.6563863361682 +499000 ekin = 2.44591165293457 | erot = 2.82720242160824 | epot = -22.7953427712295 | etot = -17.5222286966867 +500000 ekin = 2.7851302139546 | erot = 2.23270136622152 | epot = -22.8991185931508 | etot = -17.8812870129746 +501000 ekin = 2.99439211318652 | erot = 1.97783069072832 | epot = -22.9279475016441 | etot = -17.9557246977292 +502000 ekin = 2.9862206030979 | erot = 1.79973926744011 | epot = -22.956155459855 | etot = -18.170195589317 +503000 ekin = 2.51500932637374 | erot = 2.88863666961797 | epot = -22.9858023469845 | etot = -17.5821563509928 +504000 ekin = 2.84387999289216 | erot = 2.69340549636984 | epot = -22.9170131486245 | etot = -17.3797276593625 +505000 ekin = 2.95569075243612 | erot = 2.602585876956 | epot = -22.9907249028698 | etot = -17.4324482734777 +506000 ekin = 2.19812159740513 | erot = 1.96718410179931 | epot = -23.0318373952185 | etot = -18.8665316960141 +507000 ekin = 2.26250501037088 | erot = 2.70461320689487 | epot = -22.9974394720575 | etot = -18.0303212547917 +508000 ekin = 2.63634784309456 | erot = 2.05036585895923 | epot = -23.0090804345496 | etot = -18.3223667324958 +509000 ekin = 2.94151668821484 | erot = 2.91160221114196 | epot = -23.0621014211554 | etot = -17.2089825217986 +510000 ekin = 2.26258273420884 | erot = 2.8155823326395 | epot = -23.1767418648115 | etot = -18.0985767979631 +511000 ekin = 2.89871784417207 | erot = 2.15651428734314 | epot = -23.2992796007865 | etot = -18.2440474692713 +512000 ekin = 2.18241701331153 | erot = 2.32471024525139 | epot = -23.3744961479659 | etot = -18.867368889403 +513000 ekin = 1.69086971293502 | erot = 2.8783745660792 | epot = -23.3843289700052 | etot = -18.8150846909909 +514000 ekin = 1.72546832120935 | erot = 2.33325616873572 | epot = -23.3798363194193 | etot = -19.3211118294743 +515000 ekin = 1.99840202228396 | erot = 1.80255577214453 | epot = -23.3747953532199 | etot = -19.5738375587914 +516000 ekin = 3.02853898966319 | erot = 1.54004582498168 | epot = -23.3386782444955 | etot = -18.7700934298506 +517000 ekin = 2.46344499126943 | erot = 2.11388687673044 | epot = -23.3135548350045 | etot = -18.7362229670046 +518000 ekin = 2.0362169291028 | erot = 2.51796163147274 | epot = -23.2504637438686 | etot = -18.6962851832931 +519000 ekin = 1.58660977959654 | erot = 1.63211831489779 | epot = -23.2081782818072 | etot = -19.9894501873129 +520000 ekin = 2.16318611090781 | erot = 1.89658879288914 | epot = -23.2096974204855 | etot = -19.1499225166885 +521000 ekin = 1.97684804456375 | erot = 2.08731550434085 | epot = -23.2527315496486 | etot = -19.188568000744 +522000 ekin = 2.69827007409924 | erot = 2.19560826391663 | epot = -23.3133573112007 | etot = -18.4194789731848 +523000 ekin = 2.2478363305578 | erot = 1.67442261891177 | epot = -23.3604551637841 | etot = -19.4381962143146 +524000 ekin = 2.34895041229461 | erot = 2.10078601700867 | epot = -23.381233923661 | etot = -18.9314974943577 +525000 ekin = 2.13155817393156 | erot = 2.07239357304026 | epot = -23.4395046885398 | etot = -19.235552941568 +526000 ekin = 2.50234900291801 | erot = 2.25431525777582 | epot = -23.4988198653879 | etot = -18.7421556046941 +527000 ekin = 3.03511403104629 | erot = 1.80504692374136 | epot = -23.5562539149297 | etot = -18.7160929601421 +528000 ekin = 2.56074044727573 | erot = 2.54331285469023 | epot = -23.5735936308822 | etot = -18.4695403289162 +529000 ekin = 2.37500349152887 | erot = 1.93006279746846 | epot = -23.5580125050353 | etot = -19.252946216038 +530000 ekin = 3.34194424343389 | erot = 3.41373524710891 | epot = -23.4507267657596 | etot = -16.6950472752168 +531000 ekin = 2.42341072166937 | erot = 2.35978455298084 | epot = -23.1501712562452 | etot = -18.366975981595 +532000 ekin = 2.58886764526949 | erot = 1.86996947608086 | epot = -23.1663546344342 | etot = -18.7075175130839 +533000 ekin = 2.18022742299593 | erot = 2.16045486833456 | epot = -23.380637574335 | etot = -19.0399552830045 +534000 ekin = 2.34791679374047 | erot = 2.03855517230123 | epot = -23.463831563993 | etot = -19.0773595979513 +535000 ekin = 2.37817813408508 | erot = 2.07397219148902 | epot = -23.4832900392636 | etot = -19.0311397136895 +536000 ekin = 2.46210672665338 | erot = 1.8947790016655 | epot = -23.4672059982835 | etot = -19.1103202699646 +537000 ekin = 1.71186030024847 | erot = 2.1344462698512 | epot = -23.5555571897054 | etot = -19.7092506196057 +538000 ekin = 2.16671541009104 | erot = 2.76559932728314 | epot = -23.6609154290595 | etot = -18.7286006916853 +539000 ekin = 2.16621132370208 | erot = 2.29104148484627 | epot = -23.7377569804062 | etot = -19.2805041718579 +540000 ekin = 2.37610335621453 | erot = 1.63780764528448 | epot = -23.7325177726622 | etot = -19.7186067711632 +541000 ekin = 2.61201541528826 | erot = 2.52498155703037 | epot = -23.6623419839272 | etot = -18.5253450116085 +542000 ekin = 2.72898292667725 | erot = 2.10989431729706 | epot = -23.7000798212983 | etot = -18.861202577324 +543000 ekin = 2.72070152721044 | erot = 1.85641764017256 | epot = -23.6069628280622 | etot = -19.0298436606792 +544000 ekin = 2.11779438939827 | erot = 1.50576740930398 | epot = -23.5826778503359 | etot = -19.9591160516337 +545000 ekin = 1.70778076743634 | erot = 2.56995673058895 | epot = -23.583343914622 | etot = -19.3056064165967 +546000 ekin = 2.3805758278215 | erot = 1.86648142267507 | epot = -23.6114100683877 | etot = -19.3643528178911 +547000 ekin = 2.45245186799104 | erot = 2.45758854207408 | epot = -23.6611856045782 | etot = -18.7511451945131 +548000 ekin = 2.39042546399151 | erot = 2.39603897463391 | epot = -23.6735607421256 | etot = -18.8870963035002 +549000 ekin = 2.59234094316699 | erot = 2.03286284306236 | epot = -23.6646331709071 | etot = -19.0394293846778 +550000 ekin = 1.99320521419403 | erot = 1.84894458030441 | epot = -23.6669378249973 | etot = -19.8247880304988 +551000 ekin = 2.44898809443739 | erot = 2.0219242208942 | epot = -23.6235443659669 | etot = -19.1526320506353 +552000 ekin = 2.69502802037877 | erot = 1.40870700355959 | epot = -23.4610294466586 | etot = -19.3572944227202 +553000 ekin = 1.76133393557171 | erot = 2.61023484195893 | epot = -23.254624102607 | etot = -18.8830553250764 +554000 ekin = 2.30411800065654 | erot = 2.33064249173903 | epot = -23.2181242479504 | etot = -18.5833637555548 +555000 ekin = 3.27047384641377 | erot = 1.6422371773255 | epot = -23.1973795659522 | etot = -18.2846685422129 +556000 ekin = 2.90314776795354 | erot = 2.59897046564306 | epot = -23.1460736374982 | etot = -17.6439554039016 +557000 ekin = 2.91673821282758 | erot = 3.16411852075219 | epot = -23.1459806883625 | etot = -17.0651239547827 +558000 ekin = 2.82902946234823 | erot = 2.71147602500681 | epot = -23.1195640745749 | etot = -17.5790585872199 +559000 ekin = 2.44501247164481 | erot = 3.2946921444891 | epot = -23.1638653139107 | etot = -17.4241606977768 +560000 ekin = 2.31903153876872 | erot = 2.34794389762528 | epot = -23.1221343768987 | etot = -18.4551589405047 +561000 ekin = 2.04778211145284 | erot = 2.88230317636058 | epot = -23.0254469759625 | etot = -18.0953616881491 +562000 ekin = 2.23097749779459 | erot = 3.71637560430596 | epot = -22.8954878936692 | etot = -16.9481347915687 +563000 ekin = 3.13589796296721 | erot = 2.30360204009239 | epot = -22.9672461823823 | etot = -17.5277461793227 +564000 ekin = 2.43468506100309 | erot = 2.37780089042927 | epot = -22.9400399192094 | etot = -18.127553967777 +565000 ekin = 2.74707381978168 | erot = 2.07635638038451 | epot = -22.9404100305402 | etot = -18.116979830374 +566000 ekin = 2.4222424655432 | erot = 2.23675573588529 | epot = -22.964317030412 | etot = -18.3053188289835 +567000 ekin = 2.66075150820169 | erot = 2.00813116398473 | epot = -23.0598382212572 | etot = -18.3909555490708 +568000 ekin = 3.04180913535304 | erot = 1.98452490185762 | epot = -23.1129541055894 | etot = -18.0866200683787 +569000 ekin = 3.57499094364799 | erot = 2.06992850387417 | epot = -23.117960007112 | etot = -17.4730405595898 +570000 ekin = 2.66020768003306 | erot = 2.34012507933247 | epot = -23.1339632056245 | etot = -18.133630446259 +571000 ekin = 1.94924082891001 | erot = 2.84220462440654 | epot = -23.0609933320748 | etot = -18.2695478787583 +572000 ekin = 2.41536650984725 | erot = 2.40871845587551 | epot = -23.0560879925718 | etot = -18.232003026849 +573000 ekin = 1.75696177901838 | erot = 2.31680084915611 | epot = -23.107424588529 | etot = -19.0336619603545 +574000 ekin = 2.1071071848933 | erot = 2.59270710144433 | epot = -23.1966129698341 | etot = -18.4967986834965 +575000 ekin = 2.37668274547159 | erot = 2.79832262601946 | epot = -23.2697902014998 | etot = -18.0947848300088 +576000 ekin = 2.17648663043414 | erot = 3.28534323951364 | epot = -23.3035961850707 | etot = -17.8417663151229 +577000 ekin = 2.48653402473871 | erot = 2.29382004189646 | epot = -23.3348256872303 | etot = -18.5544716205951 +578000 ekin = 2.63497646120015 | erot = 2.38541222697017 | epot = -23.3938829535157 | etot = -18.3734942653454 +579000 ekin = 2.68807604490538 | erot = 1.70832449354964 | epot = -23.3711370904455 | etot = -18.9747365519905 +580000 ekin = 2.35405412912148 | erot = 2.8553242408976 | epot = -23.3804498064804 | etot = -18.1710714364613 +581000 ekin = 2.45622900796811 | erot = 2.60461398742566 | epot = -23.3507481421638 | etot = -18.28990514677 +582000 ekin = 2.33821855888559 | erot = 3.20610340688907 | epot = -23.4193095100182 | etot = -17.8749875442436 +583000 ekin = 1.96183085357235 | erot = 2.81826367270291 | epot = -23.5872275727996 | etot = -18.8071330465243 +584000 ekin = 2.00096559581716 | erot = 1.71662185522173 | epot = -23.6766993596687 | etot = -19.9591119086298 +585000 ekin = 2.2650842350347 | erot = 2.08204874292297 | epot = -23.7234738719865 | etot = -19.3763408940288 +586000 ekin = 2.20207640113325 | erot = 1.96861811478536 | epot = -23.6859240119471 | etot = -19.5152294960285 +587000 ekin = 3.67938790357027 | erot = 1.82484412869377 | epot = -23.6634672548209 | etot = -18.1592352225569 +588000 ekin = 3.48089636122829 | erot = 2.30691916064612 | epot = -23.5643712718911 | etot = -17.7765557500167 +589000 ekin = 2.63030533099327 | erot = 2.9702466869305 | epot = -23.3767694123201 | etot = -17.7762173943963 +590000 ekin = 1.60813837628253 | erot = 2.03263132264272 | epot = -23.1946522249358 | etot = -19.5538825260106 +591000 ekin = 1.81653381805571 | erot = 1.75591263591366 | epot = -23.1302877005862 | etot = -19.5578412466168 +592000 ekin = 2.57247249135485 | erot = 2.59257155085885 | epot = -23.1533569826366 | etot = -17.9883129404229 +593000 ekin = 2.43678836763256 | erot = 1.78797409267748 | epot = -23.1035527853187 | etot = -18.8787903250087 +594000 ekin = 2.12126425466624 | erot = 2.16319102375819 | epot = -23.0537965790237 | etot = -18.7693413005993 +595000 ekin = 2.61494655403376 | erot = 2.04015446622256 | epot = -23.041588630948 | etot = -18.3864876106917 +596000 ekin = 2.58385979830463 | erot = 2.125984026295 | epot = -23.0987578414776 | etot = -18.388914016878 +597000 ekin = 3.0356528884646 | erot = 3.13920569000609 | epot = -23.0959220060406 | etot = -16.92106342757 +598000 ekin = 3.448018111133 | erot = 2.86438132305443 | epot = -23.1524961324829 | etot = -16.8400966982954 +599000 ekin = 2.14568317629689 | erot = 3.49762367929462 | epot = -23.1236320419091 | etot = -17.4803251863176 +600000 ekin = 2.20856388598401 | erot = 2.50873295237986 | epot = -23.1229244675557 | etot = -18.4056276291918 +601000 ekin = 2.82305805419651 | erot = 2.82785171484619 | epot = -23.093817009667 | etot = -17.4429072406243 +602000 ekin = 2.33756515640057 | erot = 2.3814563165261 | epot = -23.0592036595801 | etot = -18.3401821866535 +603000 ekin = 1.93163217766375 | erot = 1.95544716703194 | epot = -22.941151667404 | etot = -19.0540723227083 +604000 ekin = 2.67918576808855 | erot = 3.14415640026539 | epot = -22.9119901406973 | etot = -17.0886479723434 +605000 ekin = 2.72017891571417 | erot = 2.06410352610178 | epot = -22.9250944568005 | etot = -18.1408120149845 +606000 ekin = 2.99653903957879 | erot = 2.03201724640129 | epot = -22.8426486789921 | etot = -17.814092393012 +607000 ekin = 2.88290327274547 | erot = 2.37629823895312 | epot = -22.8265624505584 | etot = -17.5673609388598 +608000 ekin = 3.6564890765792 | erot = 2.46096427245297 | epot = -22.7637531347954 | etot = -16.6462997857633 +609000 ekin = 2.67772613172483 | erot = 2.28052588350936 | epot = -22.784032519386 | etot = -17.8257805041518 +610000 ekin = 2.96660977711584 | erot = 2.13935236193287 | epot = -22.7753012812081 | etot = -17.6693391421594 +611000 ekin = 3.84936812341098 | erot = 2.13515328821562 | epot = -22.7555358965927 | etot = -16.7710144849661 +612000 ekin = 2.85991416578252 | erot = 2.46799936153364 | epot = -22.6670923038619 | etot = -17.3391787765458 +613000 ekin = 2.93458428860956 | erot = 2.15612272200133 | epot = -22.6620509726505 | etot = -17.5713439620396 +614000 ekin = 2.80109550846435 | erot = 2.03413630963325 | epot = -22.735929073337 | etot = -17.9006972552394 +615000 ekin = 2.29275572188425 | erot = 2.37295436060996 | epot = -22.8265717932651 | etot = -18.1608617107709 +616000 ekin = 1.78880182339297 | erot = 2.46512387757483 | epot = -22.9181914142038 | etot = -18.664265713236 +617000 ekin = 2.58548247747108 | erot = 2.53734413400793 | epot = -22.9371325341202 | etot = -17.8143059226412 +618000 ekin = 2.31891017470357 | erot = 2.68587322473765 | epot = -22.8737927646705 | etot = -17.8690093652293 +619000 ekin = 1.95260275466613 | erot = 2.00546202293513 | epot = -22.8346556656307 | etot = -18.8765908880295 +620000 ekin = 2.9312355259843 | erot = 2.17154966265513 | epot = -22.9093263040915 | etot = -17.806541115452 +621000 ekin = 2.92251791603671 | erot = 1.69365790820559 | epot = -22.9491849521548 | etot = -18.3330091279125 +622000 ekin = 2.04583493083921 | erot = 2.52347309118728 | epot = -22.8885087146283 | etot = -18.3192006926018 +623000 ekin = 1.97949309574552 | erot = 3.07796024634624 | epot = -22.899088756596 | etot = -17.8416354145043 +624000 ekin = 2.09648243468335 | erot = 2.65430331108241 | epot = -22.914733999871 | etot = -18.1639482541052 +625000 ekin = 2.53179488470072 | erot = 2.36095144458489 | epot = -22.9722766139489 | etot = -18.0795302846633 +626000 ekin = 2.71471201325311 | erot = 2.038002303651 | epot = -23.0006194176227 | etot = -18.2479051007186 +627000 ekin = 2.22374294193216 | erot = 2.35282114621755 | epot = -22.9588355159151 | etot = -18.3822714277654 +628000 ekin = 2.28003968408293 | erot = 2.28859673286464 | epot = -22.8537881524811 | etot = -18.2851517355335 +629000 ekin = 2.52123014813329 | erot = 1.89624895610832 | epot = -22.7908976494591 | etot = -18.3734185452175 +630000 ekin = 3.09551469183927 | erot = 2.51634259883875 | epot = -22.7156574639271 | etot = -17.1038001732491 +631000 ekin = 2.38491234780997 | erot = 3.31746706623938 | epot = -22.7274824388449 | etot = -17.0251030247955 +632000 ekin = 2.58509546960735 | erot = 2.52764681234154 | epot = -22.6801845001954 | etot = -17.5674422182465 +633000 ekin = 2.43450196234921 | erot = 1.9074646477535 | epot = -22.6545806388637 | etot = -18.312614028761 +634000 ekin = 2.22577935817066 | erot = 2.00781737526926 | epot = -22.5723806994747 | etot = -18.3387839660348 +635000 ekin = 2.21833116743445 | erot = 1.98256884900851 | epot = -22.5422908112103 | etot = -18.3413907947673 +636000 ekin = 2.25207449335774 | erot = 2.77890466668274 | epot = -22.5736742647701 | etot = -17.5426951047296 +637000 ekin = 1.94359576469155 | erot = 2.6121109986752 | epot = -22.6035657643129 | etot = -18.0478590009461 +638000 ekin = 2.53947002676468 | erot = 3.14006412371943 | epot = -22.5826147275244 | etot = -16.9030805770402 +639000 ekin = 2.37745481188141 | erot = 2.49540365345358 | epot = -22.5449630195302 | etot = -17.6721045541952 +640000 ekin = 2.08212454926531 | erot = 2.21940536991445 | epot = -22.453303862966 | etot = -18.1517739437862 +641000 ekin = 2.47971433110368 | erot = 3.55852071727848 | epot = -22.3500233136602 | etot = -16.3117882652781 +642000 ekin = 3.38958957156561 | erot = 2.18184701440171 | epot = -22.2389727056174 | etot = -16.6675361196501 +643000 ekin = 2.84881174665207 | erot = 2.413254877821 | epot = -22.1927147648616 | etot = -16.9306481403886 +644000 ekin = 2.9788163296922 | erot = 1.93799042516405 | epot = -22.1764728944767 | etot = -17.2596661396204 +645000 ekin = 4.12550859701587 | erot = 1.89960014649319 | epot = -22.1706973334318 | etot = -16.1455885899228 +646000 ekin = 2.52696357860359 | erot = 2.00637360005821 | epot = -22.1102258356952 | etot = -17.5768886570333 +647000 ekin = 2.55512268942677 | erot = 2.20922204555245 | epot = -22.1538572894812 | etot = -17.389512554502 +648000 ekin = 3.02957533574521 | erot = 2.11325139659861 | epot = -22.1575349215939 | etot = -17.0147081892501 +649000 ekin = 2.58453912449214 | erot = 3.20631221677863 | epot = -22.1339073532352 | etot = -16.3430560119644 +650000 ekin = 3.77204744414227 | erot = 2.43066777037188 | epot = -22.0837500061792 | etot = -15.8810347916651 +651000 ekin = 3.31369677202991 | erot = 2.36221103045568 | epot = -21.9243902112032 | etot = -16.2484824087176 +652000 ekin = 2.49262898649827 | erot = 3.02155153905954 | epot = -21.7253342697997 | etot = -16.2111537442419 +653000 ekin = 2.82559687485827 | erot = 2.53899564631137 | epot = -21.7211782659414 | etot = -16.3565857447718 +654000 ekin = 2.35170683287638 | erot = 2.15925543988734 | epot = -21.9219546077978 | etot = -17.4109923350341 +655000 ekin = 2.2746913368331 | erot = 2.12498780379593 | epot = -21.9020101665877 | etot = -17.5023310259586 +656000 ekin = 2.33856358324454 | erot = 2.10525554685067 | epot = -21.9227166217961 | etot = -17.4788974917008 +657000 ekin = 2.74434355807405 | erot = 2.19006149870653 | epot = -22.1368388094875 | etot = -17.2024337527069 +658000 ekin = 3.04721032533817 | erot = 2.59752520159664 | epot = -22.2936626687419 | etot = -16.6489271418071 +659000 ekin = 2.86427564828999 | erot = 3.42151988715138 | epot = -22.2986314842237 | etot = -16.0128359487823 +660000 ekin = 2.92506899234012 | erot = 1.63381738879488 | epot = -22.3375917964994 | etot = -17.7787054153644 +661000 ekin = 3.22051797741487 | erot = 1.86658559874782 | epot = -22.4692759662967 | etot = -17.382172390134 +662000 ekin = 3.06008561550976 | erot = 2.20194497946945 | epot = -22.5616874184536 | etot = -17.2996568234744 +663000 ekin = 1.91383924631387 | erot = 2.47155788641765 | epot = -22.6270449564058 | etot = -18.2416478236743 +664000 ekin = 1.43175220258741 | erot = 1.36481827202384 | epot = -22.714938601816 | etot = -19.9183681272047 +665000 ekin = 1.55751729325324 | erot = 2.30904543593978 | epot = -22.7903483651339 | etot = -18.9237856359409 +666000 ekin = 2.44554812999981 | erot = 1.7728381640758 | epot = -22.9292683336281 | etot = -18.7108820395525 +667000 ekin = 2.81292959120154 | erot = 2.33182461186713 | epot = -23.1152300896738 | etot = -17.9704758866051 +668000 ekin = 2.71701517852366 | erot = 3.1927510370022 | epot = -23.1898047541379 | etot = -17.2800385386121 +669000 ekin = 3.4211844979108 | erot = 2.4483988547294 | epot = -23.2367567149657 | etot = -17.3671733623255 +670000 ekin = 2.540272537006 | erot = 1.98108817711494 | epot = -23.1773017073799 | etot = -18.655940993259 +671000 ekin = 2.38054183576284 | erot = 2.98341127846263 | epot = -23.1403357669317 | etot = -17.7763826527062 +672000 ekin = 3.02714775234025 | erot = 2.54429912094893 | epot = -23.1240813931427 | etot = -17.5526345198536 +673000 ekin = 3.42342714962536 | erot = 2.36764796314287 | epot = -23.0365834633316 | etot = -17.2455083505634 +674000 ekin = 3.1787369792725 | erot = 2.10003598211897 | epot = -22.9565366380298 | etot = -17.6777636766383 +675000 ekin = 2.35379506516488 | erot = 1.53509045481238 | epot = -22.8504434741329 | etot = -18.9615579541557 +676000 ekin = 2.44888744246419 | erot = 2.24653163842729 | epot = -22.7725645250621 | etot = -18.0771454441706 +677000 ekin = 2.75831894151647 | erot = 1.93124166774781 | epot = -22.8527844251281 | etot = -18.1632238158638 +678000 ekin = 2.86751481243524 | erot = 1.65310315497864 | epot = -22.8648869805436 | etot = -18.3442690131297 +679000 ekin = 2.34238342331609 | erot = 2.69036620616395 | epot = -22.9330609670147 | etot = -17.9003113375347 +680000 ekin = 2.47092831167294 | erot = 2.90821987338148 | epot = -22.9893989293305 | etot = -17.610250744276 +681000 ekin = 1.90592213851373 | erot = 2.57738203916981 | epot = -22.9226803153478 | etot = -18.4393761376642 +682000 ekin = 2.11776015116235 | erot = 2.69956516894844 | epot = -22.8385618600593 | etot = -18.0212365399485 +683000 ekin = 2.36569744411279 | erot = 2.12377742206911 | epot = -22.7248964050232 | etot = -18.2354215388413 +684000 ekin = 2.87481829504096 | erot = 2.65568540935019 | epot = -22.6557781340276 | etot = -17.1252744296364 +685000 ekin = 3.04590812681261 | erot = 2.17384411148381 | epot = -22.6239841629455 | etot = -17.4042319246491 +686000 ekin = 2.45732454887051 | erot = 2.42727693460545 | epot = -22.5554269158738 | etot = -17.6708254323979 +687000 ekin = 2.74615797772517 | erot = 1.80419114366277 | epot = -22.4906419692597 | etot = -17.9402928478718 +688000 ekin = 1.7920739822545 | erot = 2.04572898801195 | epot = -22.4080555397627 | etot = -18.5702525694962 +689000 ekin = 2.87658871003945 | erot = 1.89509928788519 | epot = -22.4597913998897 | etot = -17.6881034019651 +690000 ekin = 2.12362847773645 | erot = 2.42433705189552 | epot = -22.5737079170673 | etot = -18.0257423874353 +691000 ekin = 2.15963929746743 | erot = 2.52975117929537 | epot = -22.5896382204305 | etot = -17.9002477436677 +692000 ekin = 2.88714768351631 | erot = 2.65189982514091 | epot = -22.4796475018852 | etot = -16.9405999932279 +693000 ekin = 2.30934205113368 | erot = 2.51896960835911 | epot = -22.3454093965687 | etot = -17.5170977370759 +694000 ekin = 2.90083400146798 | erot = 2.34214046553658 | epot = -22.2620689836397 | etot = -17.0190945166351 +695000 ekin = 2.9577943585455 | erot = 2.23887088042094 | epot = -22.303054593607 | etot = -17.1063893546405 +696000 ekin = 2.65803880066321 | erot = 2.33953886943022 | epot = -22.3444459486844 | etot = -17.3468682785909 +697000 ekin = 1.89104688866877 | erot = 1.78290264315477 | epot = -22.3519476787994 | etot = -18.6779981469758 +698000 ekin = 2.22763370474282 | erot = 2.82521193129044 | epot = -22.374966668557 | etot = -17.3221210325237 +699000 ekin = 2.35357258316915 | erot = 2.06864522211151 | epot = -22.302995332199 | etot = -17.8807775269184 +700000 ekin = 2.58206368687336 | erot = 2.33093601350411 | epot = -22.2613878464485 | etot = -17.3483881460711 +701000 ekin = 2.99704307093403 | erot = 1.89954183386767 | epot = -22.3232249760621 | etot = -17.4266400712604 +702000 ekin = 2.67512006336489 | erot = 2.64729282748452 | epot = -22.3604874692709 | etot = -17.0380745784215 +703000 ekin = 2.02348242287829 | erot = 2.03755058248806 | epot = -22.4348344343157 | etot = -18.3738014289493 +704000 ekin = 1.59657624705204 | erot = 1.63613322855987 | epot = -22.4674717825454 | etot = -19.2347623069335 +705000 ekin = 2.34019771505867 | erot = 1.91006554831154 | epot = -22.5441024225864 | etot = -18.2938391592161 +706000 ekin = 2.47926998793354 | erot = 3.26999075651193 | epot = -22.5117539612542 | etot = -16.7624932168087 +707000 ekin = 2.38604341038216 | erot = 2.41699636933021 | epot = -22.604009927914 | etot = -17.8009701482016 +708000 ekin = 1.68115636633466 | erot = 2.34002138995268 | epot = -22.7466665621618 | etot = -18.7254888058744 +709000 ekin = 1.80992626994918 | erot = 2.57911114058356 | epot = -23.0637398035031 | etot = -18.6747023929704 +710000 ekin = 2.07665974484992 | erot = 1.83617776589231 | epot = -23.1977961917903 | etot = -19.2849586810481 +711000 ekin = 1.95352231029107 | erot = 2.41454578486037 | epot = -23.2358193849337 | etot = -18.8677512897822 +712000 ekin = 2.13370686414587 | erot = 1.78661700982467 | epot = -23.2645434465923 | etot = -19.3442195726217 +713000 ekin = 2.90695161716251 | erot = 1.55091931636559 | epot = -23.1835772351912 | etot = -18.7257063016631 +714000 ekin = 2.06629801094757 | erot = 1.86611085535956 | epot = -23.2239032864041 | etot = -19.2914944200969 +715000 ekin = 2.52903922778277 | erot = 1.94261958015835 | epot = -23.1658397986034 | etot = -18.6941809906622 +716000 ekin = 3.03498992772823 | erot = 2.21064066235538 | epot = -23.2216970852983 | etot = -17.9760664952147 +717000 ekin = 3.07971375394894 | erot = 2.47094593918087 | epot = -23.3639588975855 | etot = -17.8132992044557 +718000 ekin = 3.49703192209654 | erot = 2.27170758510088 | epot = -23.4199184473786 | etot = -17.6511789401811 +719000 ekin = 4.06139770605771 | erot = 3.10418818480813 | epot = -23.4072026156126 | etot = -16.2416167247468 +720000 ekin = 2.49828440590245 | erot = 1.90909738802778 | epot = -23.262316602338 | etot = -18.8549348084078 +721000 ekin = 2.57931762358207 | erot = 1.98570897250437 | epot = -23.1440560046385 | etot = -18.579029408552 +722000 ekin = 2.01081836336836 | erot = 2.2747167647488 | epot = -23.1040519922181 | etot = -18.8185168641009 +723000 ekin = 2.44097316114449 | erot = 2.07630856281912 | epot = -23.1828606158314 | etot = -18.6655788918678 +724000 ekin = 1.90797367222605 | erot = 1.93592443836535 | epot = -23.2376437089983 | etot = -19.3937455984069 +725000 ekin = 2.19373210936071 | erot = 2.80513028222362 | epot = -23.2888134461385 | etot = -18.2899510545542 +726000 ekin = 2.2764864004673 | erot = 2.54378150467671 | epot = -23.3354979947709 | etot = -18.5152300896268 +727000 ekin = 1.72219216954142 | erot = 2.62563304726333 | epot = -23.3703740298761 | etot = -19.0225488130713 +728000 ekin = 2.25087046178847 | erot = 3.59486012962608 | epot = -23.435416924773 | etot = -17.5896863333584 +729000 ekin = 2.68839033328484 | erot = 1.72111131116557 | epot = -23.4784810452544 | etot = -19.0689794008039 +730000 ekin = 2.5329756962683 | erot = 2.7666773813211 | epot = -23.4899025882625 | etot = -18.1902495106731 +731000 ekin = 2.6760609901083 | erot = 2.04579712240261 | epot = -23.5241973416199 | etot = -18.802339229109 +732000 ekin = 2.77848516459028 | erot = 1.88432734797838 | epot = -23.5774208145874 | etot = -18.9146083020187 +733000 ekin = 2.18895381088671 | erot = 2.63471719118119 | epot = -23.6107634586383 | etot = -18.7870924565704 +734000 ekin = 1.69467760927658 | erot = 2.30338410687055 | epot = -23.5936446347431 | etot = -19.595582918596 +735000 ekin = 2.17749689272956 | erot = 2.71618098412724 | epot = -23.5330417303215 | etot = -18.6393638534647 +736000 ekin = 2.29375858428166 | erot = 1.1740900723812 | epot = -23.503450790287 | etot = -20.0356021336242 +737000 ekin = 2.20827752624533 | erot = 3.11531250945766 | epot = -23.4552023795231 | etot = -18.1316123438201 +738000 ekin = 1.72303720787712 | erot = 2.28747842674015 | epot = -23.3309270174989 | etot = -19.3204113828816 +739000 ekin = 1.39492824364512 | erot = 2.17488386602882 | epot = -23.28548996576 | etot = -19.7156778560861 +740000 ekin = 1.90426261774289 | erot = 2.27825159935278 | epot = -23.2514184467463 | etot = -19.0689042296506 +741000 ekin = 2.02024508457136 | erot = 2.72073546284876 | epot = -23.1876217096301 | etot = -18.4466411622099 +742000 ekin = 1.97487019042321 | erot = 1.87541960482772 | epot = -23.0929182320365 | etot = -19.2426284367856 +743000 ekin = 1.96486238454688 | erot = 2.76982785281128 | epot = -22.9318899502109 | etot = -18.1971997128528 +744000 ekin = 2.04909521933131 | erot = 2.34373814592941 | epot = -22.8510525613065 | etot = -18.4582191960458 +745000 ekin = 1.66771130319646 | erot = 1.87270341329448 | epot = -22.7977076876185 | etot = -19.2572929711276 +746000 ekin = 2.11650515037838 | erot = 2.03542197982564 | epot = -22.7785820280378 | etot = -18.6266548978338 +747000 ekin = 3.07964448387158 | erot = 1.66910106460583 | epot = -22.8037757029139 | etot = -18.0550301544365 +748000 ekin = 3.03811477337698 | erot = 1.85631102018694 | epot = -22.8436239146773 | etot = -17.9491981211133 +749000 ekin = 2.53753852426481 | erot = 2.01199117356573 | epot = -22.860297041716 | etot = -18.3107673438855 +750000 ekin = 2.77210902960465 | erot = 2.32628560304478 | epot = -22.9528220918576 | etot = -17.8544274592082 +751000 ekin = 2.52040431872467 | erot = 2.34903725042469 | epot = -23.0127359055533 | etot = -18.1432943364039 +752000 ekin = 2.46408285580806 | erot = 1.68868786663082 | epot = -22.9901282704654 | etot = -18.8373575480265 +753000 ekin = 2.47364326188914 | erot = 1.55776271670366 | epot = -23.1135680684223 | etot = -19.0821620898295 +754000 ekin = 2.5278916038673 | erot = 2.29496804643662 | epot = -23.2403939606523 | etot = -18.4175343103483 +755000 ekin = 1.52934303772527 | erot = 2.21322404979637 | epot = -23.262110017443 | etot = -19.5195429299214 +756000 ekin = 2.10423967353423 | erot = 2.40303050505255 | epot = -23.1685739957517 | etot = -18.6613038171649 +757000 ekin = 2.92559629660516 | erot = 2.0691293568206 | epot = -23.1502917576405 | etot = -18.1555661042147 +758000 ekin = 2.37300490719645 | erot = 2.51363215153151 | epot = -23.0495756460038 | etot = -18.1629385872758 +759000 ekin = 2.6014595730178 | erot = 2.39657042348208 | epot = -22.9025259489071 | etot = -17.9044959524072 +760000 ekin = 3.23086874355225 | erot = 2.77072134903012 | epot = -22.8089299952235 | etot = -16.8073399026412 +761000 ekin = 3.41475369307092 | erot = 1.70180532416599 | epot = -22.7404708369396 | etot = -17.6239118197027 +762000 ekin = 3.40874473404401 | erot = 2.52147443954634 | epot = -22.5276669204419 | etot = -16.5974477468515 +763000 ekin = 2.64281892112082 | erot = 1.82464895439093 | epot = -22.3890167593186 | etot = -17.9215488838069 +764000 ekin = 2.38098664175603 | erot = 2.71455563654527 | epot = -22.2309521785191 | etot = -17.1354099002178 +765000 ekin = 2.24221473762586 | erot = 1.94826539133556 | epot = -22.122583392123 | etot = -17.9321032631616 +766000 ekin = 2.50645584526003 | erot = 1.96129579948818 | epot = -21.9857907119498 | etot = -17.5180390672015 +767000 ekin = 2.34028568638226 | erot = 2.64592471376141 | epot = -21.9051815399867 | etot = -16.918971139843 +768000 ekin = 1.86752761821211 | erot = 2.06138447840236 | epot = -21.8874171216963 | etot = -17.9585050250818 +769000 ekin = 3.03590459157853 | erot = 2.66440802561784 | epot = -21.8247140853503 | etot = -16.124401468154 +770000 ekin = 2.42567220683552 | erot = 1.97830158892933 | epot = -21.8110526122117 | etot = -17.4070788164468 +771000 ekin = 2.20056711884501 | erot = 2.53255190976195 | epot = -21.7341162461991 | etot = -17.0009972175921 +772000 ekin = 2.75016173617492 | erot = 1.98403019503999 | epot = -21.8164316952287 | etot = -17.0822397640138 +773000 ekin = 2.14723076845117 | erot = 2.41512334908793 | epot = -21.9576017041203 | etot = -17.3952475865812 +774000 ekin = 2.20536023895281 | erot = 1.98379412617599 | epot = -22.043759647449 | etot = -17.8546052823202 +775000 ekin = 2.53158393271132 | erot = 2.8225938280108 | epot = -22.2469056379858 | etot = -16.8927278772637 +776000 ekin = 3.15988726149912 | erot = 2.46223044860468 | epot = -22.4204382258798 | etot = -16.798320515776 +777000 ekin = 1.91542872566335 | erot = 1.75408058586262 | epot = -22.4517075164596 | etot = -18.7821982049336 +778000 ekin = 2.94665474162607 | erot = 2.31805831302194 | epot = -22.4632153304498 | etot = -17.1985022758018 +779000 ekin = 3.10970934270731 | erot = 2.04446179405629 | epot = -22.4851490287702 | etot = -17.3309778920066 +780000 ekin = 2.85215832341045 | erot = 3.13312086675091 | epot = -22.4501531708741 | etot = -16.4648739807127 +781000 ekin = 2.36733074493229 | erot = 3.56399648845806 | epot = -22.4171363625471 | etot = -16.4858091291567 +782000 ekin = 2.32796510372074 | erot = 2.86343667143255 | epot = -22.3438054250098 | etot = -17.1524036498565 +783000 ekin = 1.86439500745061 | erot = 3.05233385447291 | epot = -22.2079509833896 | etot = -17.2912221214661 +784000 ekin = 2.05476588420882 | erot = 2.29789997988689 | epot = -22.1006364427793 | etot = -17.7479705786836 +785000 ekin = 2.03879516593738 | erot = 2.15052527915338 | epot = -22.0056061371158 | etot = -17.816285692025 +786000 ekin = 2.3752160296601 | erot = 2.32156698168742 | epot = -21.9727988200248 | etot = -17.2760158086773 +787000 ekin = 2.76686314352376 | erot = 2.23625261993099 | epot = -21.8969600931556 | etot = -16.8938443297008 +788000 ekin = 2.13318993659091 | erot = 2.25162748275281 | epot = -21.8604178455632 | etot = -17.4756004262194 +789000 ekin = 1.98216852118508 | erot = 1.98058785261598 | epot = -21.844134033761 | etot = -17.8813776599599 +790000 ekin = 1.67847851427146 | erot = 1.42560334440858 | epot = -21.941301490604 | etot = -18.837219631924 +791000 ekin = 2.12689982203095 | erot = 2.53200907087448 | epot = -22.0864434478656 | etot = -17.4275345549602 +792000 ekin = 1.72797703494859 | erot = 2.22448376175168 | epot = -22.1854190028922 | etot = -18.2329582061919 +793000 ekin = 3.18409314211953 | erot = 1.94056710411296 | epot = -22.3760603901177 | etot = -17.2514001438852 +794000 ekin = 2.49071782059139 | erot = 3.01186430180266 | epot = -22.4315505782774 | etot = -16.9289684558833 +795000 ekin = 2.89844296027926 | erot = 3.07659510288655 | epot = -22.5164404652995 | etot = -16.5414024021337 +796000 ekin = 2.32845268798927 | erot = 1.62708270564126 | epot = -22.5660647482766 | etot = -18.6105293546461 +797000 ekin = 2.20766900620157 | erot = 3.6597733457204 | epot = -22.5351911425215 | etot = -16.6677487905995 +798000 ekin = 2.12139450500735 | erot = 2.94419809776829 | epot = -22.53586560158 | etot = -17.4702729988044 +799000 ekin = 2.48452434226029 | erot = 2.7415786036137 | epot = -22.4941328101442 | etot = -17.2680298642702 +800000 ekin = 2.17521613585505 | erot = 2.96480330538541 | epot = -22.3818079549674 | etot = -17.2417885137269 +801000 ekin = 2.54690065539559 | erot = 2.74966931670846 | epot = -22.3008594124712 | etot = -17.0042894403671 +802000 ekin = 3.02823775407486 | erot = 2.8915936784506 | epot = -22.2024149184001 | etot = -16.2825834858746 +803000 ekin = 2.21042161290743 | erot = 2.51594019231142 | epot = -22.1069208353333 | etot = -17.3805590301145 +804000 ekin = 2.91061289296152 | erot = 1.5830418961718 | epot = -22.0839512655924 | etot = -17.5902964764591 +805000 ekin = 2.67762522194669 | erot = 3.06970455948968 | epot = -22.0793101970619 | etot = -16.3319804156255 +806000 ekin = 2.75979804034939 | erot = 2.2176860954027 | epot = -22.0549669082474 | etot = -17.0774827724953 +807000 ekin = 2.11041519443391 | erot = 2.83915265443807 | epot = -22.1073292774231 | etot = -17.1577614285511 +808000 ekin = 1.84392510139081 | erot = 2.29797054411878 | epot = -22.0753255923415 | etot = -17.9334299468319 +809000 ekin = 1.93171652686567 | erot = 1.94021167949754 | epot = -22.0668297694372 | etot = -18.194901563074 +810000 ekin = 1.97774334424761 | erot = 2.6472977913531 | epot = -22.1020544833021 | etot = -17.4770133477014 +811000 ekin = 2.2417092413671 | erot = 1.75505259459069 | epot = -22.1062654329495 | etot = -18.1095035969917 +812000 ekin = 2.49053159164605 | erot = 2.33986799245713 | epot = -22.124141511127 | etot = -17.2937419270238 +813000 ekin = 3.01755249739549 | erot = 2.24004680047387 | epot = -22.1167722656682 | etot = -16.8591729677989 +814000 ekin = 2.86045886242639 | erot = 2.24119269343823 | epot = -22.1084535534804 | etot = -17.0068019976158 +815000 ekin = 2.57503557502156 | erot = 2.76212054641368 | epot = -21.9950519676046 | etot = -16.6578958461694 +816000 ekin = 2.19961906931023 | erot = 2.59194277056134 | epot = -22.0843443380244 | etot = -17.2927824981528 +817000 ekin = 1.75062364873707 | erot = 2.66165019507354 | epot = -22.3739862599355 | etot = -17.9617124161249 +818000 ekin = 2.24809257416679 | erot = 2.59026399650675 | epot = -22.5610524731389 | etot = -17.7226959024654 +819000 ekin = 2.12537334404071 | erot = 2.59618311382673 | epot = -22.5606510650104 | etot = -17.839094607143 +820000 ekin = 1.93414650390356 | erot = 2.29085663493509 | epot = -22.4839314706954 | etot = -18.2589283318568 +821000 ekin = 2.11382182469737 | erot = 2.38685226676536 | epot = -22.47627897247 | etot = -17.9756048810073 +822000 ekin = 2.2613431095799 | erot = 2.12056938305333 | epot = -22.370909843474 | etot = -17.9889973508408 +823000 ekin = 2.31560863750917 | erot = 2.60350436456086 | epot = -22.4988996092736 | etot = -17.5797866072036 +824000 ekin = 1.73697879038959 | erot = 1.5185057021212 | epot = -22.6200401147494 | etot = -19.3645556222386 +825000 ekin = 1.63614248894086 | erot = 1.97731468932685 | epot = -22.6198150724223 | etot = -19.0063578941546 +826000 ekin = 2.00841233147246 | erot = 2.17850248200248 | epot = -22.5466518143203 | etot = -18.3597370008454 +827000 ekin = 2.18457105279113 | erot = 2.44711764942285 | epot = -22.4005870169979 | etot = -17.7688983147839 +828000 ekin = 1.91039404464085 | erot = 2.73449242191012 | epot = -22.3948651441296 | etot = -17.7499786775786 +829000 ekin = 2.07228257188588 | erot = 2.97134747466499 | epot = -22.4347910090961 | etot = -17.3911609625452 +830000 ekin = 1.99293621346915 | erot = 2.15765133255911 | epot = -22.4843800017124 | etot = -18.3337924556842 +831000 ekin = 2.33241187954984 | erot = 2.37634533076884 | epot = -22.5757045912718 | etot = -17.8669473809531 +832000 ekin = 2.02856108052035 | erot = 1.94729581180225 | epot = -22.6670251626246 | etot = -18.691168270302 +833000 ekin = 2.28623411522758 | erot = 2.15108044390973 | epot = -22.7566850878713 | etot = -18.319370528734 +834000 ekin = 2.12105013529711 | erot = 1.5116778668129 | epot = -22.7735851481702 | etot = -19.1408571460602 +835000 ekin = 2.88531776933573 | erot = 2.74027641398136 | epot = -22.8585330533172 | etot = -17.2329388700001 +836000 ekin = 3.32070208623905 | erot = 2.42231134749978 | epot = -22.8959107751695 | etot = -17.1528973414306 +837000 ekin = 2.74149226799164 | erot = 2.32127198719276 | epot = -22.8906677110002 | etot = -17.8279034558158 +838000 ekin = 3.13302338440878 | erot = 3.19829232559053 | epot = -22.9166668544453 | etot = -16.585351144446 +839000 ekin = 2.73522885875602 | erot = 2.61100294075548 | epot = -22.8499426413711 | etot = -17.5037108418596 +840000 ekin = 2.97139629828009 | erot = 1.43157972743722 | epot = -22.7763904271576 | etot = -18.3734144014403 +841000 ekin = 2.9571795545775 | erot = 2.67280681737836 | epot = -22.7408850128302 | etot = -17.1108986408743 +842000 ekin = 2.17222575948606 | erot = 2.30478646820068 | epot = -22.7382440804492 | etot = -18.2612318527624 +843000 ekin = 2.83292824269634 | erot = 2.04165126380544 | epot = -22.7426687858571 | etot = -17.8680892793554 +844000 ekin = 2.95938970875204 | erot = 1.50198210425589 | epot = -22.783719790782 | etot = -18.3223479777741 +845000 ekin = 3.16076837184522 | erot = 2.28216144351779 | epot = -22.7913524647186 | etot = -17.3484226493555 +846000 ekin = 3.3398977708405 | erot = 2.53602189023877 | epot = -22.7943227793905 | etot = -16.9184031183113 +847000 ekin = 2.14145435242079 | erot = 2.75036267291773 | epot = -22.7255800042885 | etot = -17.83376297895 +848000 ekin = 2.48912550447967 | erot = 2.81875176956459 | epot = -22.5834297802211 | etot = -17.2755525061768 +849000 ekin = 1.98023552181666 | erot = 2.5692134285068 | epot = -22.4587431120173 | etot = -17.9092941616939 +850000 ekin = 2.0475383789703 | erot = 1.80627608629883 | epot = -22.442868440532 | etot = -18.5890539752628 +851000 ekin = 2.09704360250612 | erot = 1.85768640504848 | epot = -22.4344168330881 | etot = -18.4796868255335 +852000 ekin = 1.70813487206096 | erot = 1.42387059402563 | epot = -22.3764553852037 | etot = -19.2444499191171 +853000 ekin = 2.00140314580349 | erot = 3.04689599134399 | epot = -22.4103147041128 | etot = -17.3620155669653 +854000 ekin = 3.02149896921022 | erot = 2.22990677084323 | epot = -22.4965128093929 | etot = -17.2451070693394 +855000 ekin = 2.19607047478225 | erot = 2.83672007906388 | epot = -22.5083573431917 | etot = -17.4755667893456 +856000 ekin = 2.44947669543341 | erot = 1.52884872890501 | epot = -22.4898047833717 | etot = -18.5114793590332 +857000 ekin = 2.53345481305323 | erot = 2.80399799726174 | epot = -22.39864736443 | etot = -17.061194554115 +858000 ekin = 2.20266598505728 | erot = 2.82477658278041 | epot = -22.322749893257 | etot = -17.2953073254193 +859000 ekin = 2.30655855498922 | erot = 2.31428920065484 | epot = -22.299458676259 | etot = -17.6786109206149 +860000 ekin = 1.99697183524065 | erot = 1.95028062775308 | epot = -22.3156691349687 | etot = -18.3684166719749 +861000 ekin = 2.69687116915107 | erot = 2.24433771449493 | epot = -22.3086232893581 | etot = -17.3674144057121 +862000 ekin = 2.86022987586877 | erot = 2.41684736135787 | epot = -22.2874375572893 | etot = -17.0103603200626 +863000 ekin = 2.60871204568914 | erot = 3.3557366458487 | epot = -22.2313024399491 | etot = -16.2668537484113 +864000 ekin = 2.90978326967391 | erot = 2.29745178043259 | epot = -22.1985713670251 | etot = -16.9913363169186 +865000 ekin = 1.92892881804686 | erot = 2.15731715168145 | epot = -22.0984656787339 | etot = -18.0122197090056 +866000 ekin = 1.96990768776308 | erot = 1.64764578107637 | epot = -21.9980087709689 | etot = -18.3804553021294 +867000 ekin = 1.75218832670564 | erot = 3.37220276943672 | epot = -21.9060579112704 | etot = -16.781666815128 +868000 ekin = 1.82818126605702 | erot = 2.79449094294287 | epot = -21.9401796601767 | etot = -17.3175074511768 +869000 ekin = 2.38095838431442 | erot = 2.38587739965205 | epot = -22.0329803939138 | etot = -17.2661446099473 +870000 ekin = 1.91334960398162 | erot = 3.22058637313173 | epot = -22.0372634175766 | etot = -16.9033274404632 +871000 ekin = 3.11762256076551 | erot = 2.95337521110721 | epot = -21.9585521021423 | etot = -15.8875543302696 +872000 ekin = 2.97995457097216 | erot = 1.38589789821627 | epot = -21.8388140547637 | etot = -17.4729615855753 +873000 ekin = 2.75063242740213 | erot = 2.24384409185972 | epot = -21.7621446383558 | etot = -16.767668119094 +874000 ekin = 2.42548187796032 | erot = 2.11160399589529 | epot = -21.6726796153781 | etot = -17.1355937415225 +875000 ekin = 2.99029080863986 | erot = 2.74119845235593 | epot = -21.6681717382462 | etot = -15.9366824772504 +876000 ekin = 2.13275197859305 | erot = 2.233203194222 | epot = -21.6687594523732 | etot = -17.3028042795581 +877000 ekin = 1.83070162423874 | erot = 1.6010526911626 | epot = -21.6263742280813 | etot = -18.19461991268 +878000 ekin = 2.01997494895548 | erot = 2.72070409004295 | epot = -21.632105565574 | etot = -16.8914265265756 +879000 ekin = 1.43444833027133 | erot = 2.17422677437648 | epot = -21.5501867528963 | etot = -17.9415116482485 +880000 ekin = 2.09181862571921 | erot = 2.57771231025419 | epot = -21.4847603093162 | etot = -16.8152293733428 +881000 ekin = 1.54081572899847 | erot = 1.98591498012594 | epot = -21.5197472943257 | etot = -17.9930165852013 +882000 ekin = 2.2061903789583 | erot = 2.64808794630213 | epot = -21.6149395754995 | etot = -16.760661250239 +883000 ekin = 2.22398786469444 | erot = 2.23146516226547 | epot = -21.6814015671086 | etot = -17.2259485401487 +884000 ekin = 2.78668802039765 | erot = 2.10130089852047 | epot = -21.7272273228039 | etot = -16.8392384038858 +885000 ekin = 1.92361997638943 | erot = 1.77572378933155 | epot = -21.7696517903878 | etot = -18.0703080246668 +886000 ekin = 1.99836032534883 | erot = 3.11596676947403 | epot = -21.7879382713548 | etot = -16.673611176532 +887000 ekin = 1.98879909318866 | erot = 2.81589132946027 | epot = -21.7923091863043 | etot = -16.9876187636554 +888000 ekin = 1.92041141945741 | erot = 2.3252911526479 | epot = -21.8607011941373 | etot = -17.614998622032 +889000 ekin = 1.8806357075667 | erot = 2.46119753007268 | epot = -21.9506056361693 | etot = -17.6087723985299 +890000 ekin = 1.86005551534237 | erot = 2.25705356539098 | epot = -22.0523870894554 | etot = -17.9352780087221 +891000 ekin = 2.60384568426052 | erot = 2.35330960558484 | epot = -22.1900620535717 | etot = -17.2329067637263 +892000 ekin = 2.68682478776143 | erot = 2.69192226449536 | epot = -22.2913421142228 | etot = -16.9125950619661 +893000 ekin = 2.17360632388892 | erot = 2.98553431183659 | epot = -22.2913111245685 | etot = -17.132170488843 +894000 ekin = 2.52600330506545 | erot = 2.45861329518365 | epot = -22.2813523194117 | etot = -17.2967357191626 +895000 ekin = 2.51964265942842 | erot = 2.458508768977 | epot = -22.3090530666537 | etot = -17.3309016382482 +896000 ekin = 1.83970949418621 | erot = 2.7876698428861 | epot = -22.2816769795447 | etot = -17.6542976424724 +897000 ekin = 2.36177466310812 | erot = 2.0208895092276 | epot = -22.2244555724411 | etot = -17.8417914001054 +898000 ekin = 2.11475930620727 | erot = 1.90142689771282 | epot = -22.1399515435435 | etot = -18.1237653396234 +899000 ekin = 2.62628238826603 | erot = 2.33607509693707 | epot = -22.040854543184 | etot = -17.0784970579809 +900000 ekin = 2.1134311489616 | erot = 2.28923041198217 | epot = -22.042922147544 | etot = -17.6402605866003 +901000 ekin = 1.9156742929676 | erot = 1.81441237665855 | epot = -22.0776682049659 | etot = -18.3475815353397 +902000 ekin = 2.56902181313363 | erot = 2.49856756454338 | epot = -22.0065137105888 | etot = -16.9389243329118 +903000 ekin = 1.85774740371253 | erot = 2.17490444163848 | epot = -21.9440961512363 | etot = -17.9114443058853 +904000 ekin = 1.86493397406833 | erot = 2.32873873815716 | epot = -21.8931358584844 | etot = -17.6994631462589 +905000 ekin = 2.31979070947169 | erot = 2.14360558294755 | epot = -21.824385320242 | etot = -17.3609890278228 +906000 ekin = 2.49844805906095 | erot = 2.24842339845928 | epot = -21.8343155675942 | etot = -17.087444110074 +907000 ekin = 4.2050069684007 | erot = 2.50213003512293 | epot = -21.926981437738 | etot = -15.2198444342144 +908000 ekin = 3.27384188266606 | erot = 2.113986364986 | epot = -22.0851390841283 | etot = -16.6973108364762 +909000 ekin = 2.63126156907554 | erot = 1.92589592890071 | epot = -22.2067426627273 | etot = -17.649585164751 +910000 ekin = 2.59247391196527 | erot = 2.91530974700789 | epot = -22.3083595488238 | etot = -16.8005758898507 +911000 ekin = 2.58542931349158 | erot = 4.35273181589072 | epot = -22.3703725466068 | etot = -15.4322114172245 +912000 ekin = 3.05788115941417 | erot = 3.70629270837706 | epot = -22.3924331468687 | etot = -15.6282592790774 +913000 ekin = 2.82179099955174 | erot = 2.17271040546975 | epot = -22.3592523787226 | etot = -17.3647509737011 +914000 ekin = 2.15502438011904 | erot = 1.21668409626845 | epot = -22.2678100512732 | etot = -18.8961015748857 +915000 ekin = 1.59606663662058 | erot = 2.96270026674799 | epot = -22.1740650061606 | etot = -17.615298102792 +916000 ekin = 2.59113116114426 | erot = 3.74925276784446 | epot = -22.2376802645764 | etot = -15.8972963355877 +917000 ekin = 3.04931771481537 | erot = 2.87183708314021 | epot = -22.2631766381559 | etot = -16.3420218402004 +918000 ekin = 2.92188996322642 | erot = 2.63336986904281 | epot = -22.2586011448583 | etot = -16.7033413125891 +919000 ekin = 3.21078589975638 | erot = 2.75946192406924 | epot = -22.2354679015341 | etot = -16.2652200777085 +920000 ekin = 2.28588196467068 | erot = 2.37332214874002 | epot = -22.2033589800159 | etot = -17.5441548666052 +921000 ekin = 2.38962275209347 | erot = 2.43661594631483 | epot = -22.1850468087942 | etot = -17.3588081103859 +922000 ekin = 2.30444121290069 | erot = 2.41446680487179 | epot = -22.1364838134968 | etot = -17.4175757957243 +923000 ekin = 2.49328668364371 | erot = 2.66692739305866 | epot = -22.1214525565084 | etot = -16.961238479806 +924000 ekin = 1.53749552443357 | erot = 2.96826070169594 | epot = -22.0894201538095 | etot = -17.58366392768 +925000 ekin = 1.85840160112661 | erot = 1.96300614534087 | epot = -22.0261080308484 | etot = -18.2047002843809 +926000 ekin = 1.36444139420093 | erot = 2.1171911056521 | epot = -22.0105169062661 | etot = -18.5288844064131 +927000 ekin = 2.55080456695379 | erot = 2.08771192494034 | epot = -22.0296775970306 | etot = -17.3911611051365 +928000 ekin = 2.08687563155734 | erot = 2.73937352627042 | epot = -22.0655254209395 | etot = -17.2392762631117 +929000 ekin = 1.85842465674464 | erot = 1.85229951899858 | epot = -22.161879510768 | etot = -18.4511553350248 +930000 ekin = 1.98312460976539 | erot = 2.1107410982594 | epot = -22.14836282055 | etot = -18.0544971125252 +931000 ekin = 2.44403538776918 | erot = 1.87099700190232 | epot = -22.0455015122594 | etot = -17.7304691225879 +932000 ekin = 2.7450847259232 | erot = 2.34428750425033 | epot = -22.0610452671158 | etot = -16.9716730369423 +933000 ekin = 3.03611053551161 | erot = 2.51768120120295 | epot = -21.9625013660046 | etot = -16.4087096292901 +934000 ekin = 2.94656859108538 | erot = 2.48807299457996 | epot = -21.861427363924 | etot = -16.4267857782587 +935000 ekin = 2.79276097099932 | erot = 2.14683659927043 | epot = -21.8273092000012 | etot = -16.8877116297315 +936000 ekin = 2.97178317336133 | erot = 2.07585468409967 | epot = -21.8285263420326 | etot = -16.7808884845716 +937000 ekin = 3.04678623330025 | erot = 2.3469475727902 | epot = -21.7540111620946 | etot = -16.3602773560041 +938000 ekin = 2.98751343731959 | erot = 2.36094469095133 | epot = -21.6698990656412 | etot = -16.3214409373703 +939000 ekin = 2.58148991378899 | erot = 2.28540307033942 | epot = -21.641624391377 | etot = -16.7747314072486 +940000 ekin = 2.64449140269543 | erot = 2.76444805229845 | epot = -21.5519193090555 | etot = -16.1429798540616 +941000 ekin = 2.27119597888968 | erot = 2.6047011226429 | epot = -21.4613787017959 | etot = -16.5854816002633 +942000 ekin = 1.87372343217533 | erot = 2.80846718394805 | epot = -21.3627475231486 | etot = -16.6805569070252 +943000 ekin = 2.47144243861285 | erot = 2.33780411758964 | epot = -21.3635196463293 | etot = -16.5542730901269 +944000 ekin = 2.13395812695593 | erot = 1.92152946754219 | epot = -21.3250397924826 | etot = -17.2695521979844 +945000 ekin = 2.55906013749132 | erot = 2.2064112111687 | epot = -21.3688330068161 | etot = -16.6033616581561 +946000 ekin = 2.36057360323902 | erot = 2.87561909021941 | epot = -21.3642087487724 | etot = -16.128016055314 +947000 ekin = 2.0664007802554 | erot = 1.8712733843037 | epot = -21.3615863875836 | etot = -17.4239122230245 +948000 ekin = 1.84827298766581 | erot = 1.37746869479931 | epot = -21.4042186851624 | etot = -18.1784770026972 +949000 ekin = 1.76268582715986 | erot = 2.31704980534492 | epot = -21.4240851264671 | etot = -17.3443494939624 +950000 ekin = 1.71596526195605 | erot = 2.24238613701562 | epot = -21.4136184248624 | etot = -17.4552670258908 +951000 ekin = 1.97739431794919 | erot = 2.32356723589743 | epot = -21.4746626443703 | etot = -17.1737010905236 +952000 ekin = 2.93969915889367 | erot = 2.72641565709973 | epot = -21.5183559681327 | etot = -15.8522411521393 +953000 ekin = 2.94576770934606 | erot = 2.38856498634115 | epot = -21.5141407104899 | etot = -16.1798080148027 +954000 ekin = 3.09120782928501 | erot = 1.98547863545544 | epot = -21.4220978424351 | etot = -16.3454113776947 +955000 ekin = 3.57635302907509 | erot = 2.07344226252239 | epot = -21.3055276294275 | etot = -15.65573233783 +956000 ekin = 2.96199697760255 | erot = 3.68176573533001 | epot = -21.1569123839441 | etot = -14.5131496710115 +957000 ekin = 2.99343140156395 | erot = 2.6641673976979 | epot = -20.9767503534011 | etot = -15.3191515541393 +958000 ekin = 2.66519710291016 | erot = 2.94296730915348 | epot = -20.778322783175 | etot = -15.1701583711114 +959000 ekin = 1.92859078964251 | erot = 2.44737003089627 | epot = -20.7022563699757 | etot = -16.3262955494369 +960000 ekin = 1.49451727360012 | erot = 3.13583888779427 | epot = -20.7118848436939 | etot = -16.0815286822995 +961000 ekin = 1.95030797402212 | erot = 2.08601754519332 | epot = -20.7116280307748 | etot = -16.6753025115593 +962000 ekin = 2.02519672504697 | erot = 1.8993614904036 | epot = -20.7772856698007 | etot = -16.8527274543501 +963000 ekin = 1.81866098250674 | erot = 2.47413067985077 | epot = -20.8446590259958 | etot = -16.5518673636383 +964000 ekin = 2.82274927013719 | erot = 2.43518028535965 | epot = -20.9038261011269 | etot = -15.64589654563 +965000 ekin = 2.55107687208175 | erot = 2.29878175210651 | epot = -20.9717669792334 | etot = -16.1219083550452 +966000 ekin = 2.1200913755337 | erot = 2.2846988725502 | epot = -21.0606259488472 | etot = -16.6558357007633 +967000 ekin = 1.58229605946639 | erot = 3.55757301639252 | epot = -21.1224849810159 | etot = -15.982615905157 +968000 ekin = 1.95011274740584 | erot = 2.3752003899703 | epot = -21.1147445818894 | etot = -16.7894314445132 +969000 ekin = 2.19259033480515 | erot = 2.45911844664679 | epot = -21.0841141670188 | etot = -16.4324053855669 +970000 ekin = 1.87048608890169 | erot = 2.95646346755995 | epot = -21.0142741201673 | etot = -16.1873245637056 +971000 ekin = 1.950153162929 | erot = 3.0717285905854 | epot = -20.9854323440231 | etot = -15.9635505905087 +972000 ekin = 1.93197938125398 | erot = 2.56232300543577 | epot = -20.9700672251306 | etot = -16.4757648384409 +973000 ekin = 2.21536036218028 | erot = 2.92680374210101 | epot = -20.9735070987956 | etot = -15.8313429945143 +974000 ekin = 2.53787477442507 | erot = 2.68950390909793 | epot = -20.9249780227203 | etot = -15.6975993391973 +975000 ekin = 3.3832404833891 | erot = 2.33888514036507 | epot = -20.8975294326534 | etot = -15.1754038088992 +976000 ekin = 2.84644457799265 | erot = 3.11578234174529 | epot = -20.8919958508098 | etot = -14.9297689310719 +977000 ekin = 2.71728271399263 | erot = 2.50842582300821 | epot = -20.8689034899506 | etot = -15.6431949529497 +978000 ekin = 1.79447160570111 | erot = 2.0736426807417 | epot = -20.8420102217514 | etot = -16.9738959353086 +979000 ekin = 1.87121723303036 | erot = 2.21930404593537 | epot = -20.7748213462523 | etot = -16.6843000672865 +980000 ekin = 1.92329753072694 | erot = 1.58075512357095 | epot = -20.7449893755876 | etot = -17.2409367212897 +981000 ekin = 1.54378956643562 | erot = 2.05667260838343 | epot = -20.8055475552994 | etot = -17.2050853804803 +982000 ekin = 1.84106018589786 | erot = 1.96434982363189 | epot = -20.9115392638984 | etot = -17.1061292543687 +983000 ekin = 2.72419781781661 | erot = 1.79041192395563 | epot = -20.935370561762 | etot = -16.4207608199898 +984000 ekin = 3.62592878226169 | erot = 2.63360520982709 | epot = -21.0391300854773 | etot = -14.7795960933885 +985000 ekin = 2.94852029277516 | erot = 2.17123324675229 | epot = -21.210668025134 | etot = -16.0909144856065 +986000 ekin = 2.87308205004233 | erot = 2.17802315487852 | epot = -21.3375937115616 | etot = -16.2864885066408 +987000 ekin = 3.37012638403781 | erot = 2.51985184465596 | epot = -21.4043627880157 | etot = -15.514384559322 +988000 ekin = 3.46870329025365 | erot = 3.24288958557111 | epot = -21.4574256625201 | etot = -14.7458327866953 +989000 ekin = 2.84167714920458 | erot = 2.20794124486355 | epot = -21.6063889534189 | etot = -16.5567705593508 +990000 ekin = 2.79616762915596 | erot = 1.83962543905575 | epot = -21.6049428673847 | etot = -16.969149799173 +991000 ekin = 3.12376374867622 | erot = 3.19217780569165 | epot = -21.5124272449002 | etot = -15.1964856905324 +992000 ekin = 3.28266282243327 | erot = 2.63435990952508 | epot = -21.3973672594977 | etot = -15.4803445275393 +993000 ekin = 3.03845590773447 | erot = 2.22451011589011 | epot = -21.3214832241627 | etot = -16.0585172005382 +994000 ekin = 3.17417330085466 | erot = 2.79358287085479 | epot = -21.2400043434466 | etot = -15.2722481717371 +995000 ekin = 3.20646780888655 | erot = 1.72565517852613 | epot = -21.1372155372729 | etot = -16.2050925498602 +996000 ekin = 3.05109485375234 | erot = 3.18000631651671 | epot = -21.0952864235923 | etot = -14.8641852533233 +997000 ekin = 2.95625677593347 | erot = 3.15916554858247 | epot = -21.058148007987 | etot = -14.942725683471 +998000 ekin = 3.06605914614908 | erot = 1.97682176881012 | epot = -20.9834240684974 | etot = -15.9405431535382 +999000 ekin = 2.08919327368179 | erot = 2.76364485800616 | epot = -20.9705413117635 | etot = -16.1177031800756 +1000000 ekin = 2.11761701334905 | erot = 2.1409630347026 | epot = -20.9096627221725 | etot = -16.6510826741208 + 1000000 0.094116312 -1.3659956 0.059141691 -1.1745029 -3.0654283e-05 +Loop time of 43.6978 on 1 procs for 1000000 steps with 16 atoms + +Performance: 19772.150 tau/day, 22884.433 timesteps/s +98.6% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 32.769 | 32.769 | 32.769 | 0.0 | 74.99 +Bond | 0.93071 | 0.93071 | 0.93071 | 0.0 | 2.13 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.19584 | 0.19584 | 0.19584 | 0.0 | 0.45 +Output | 1e-05 | 1e-05 | 1e-05 | 0.0 | 0.00 +Modify | 9.4507 | 9.4507 | 9.4507 | 0.0 | 21.63 +Other | | 0.3515 | | | 0.80 + +Nlocal: 16 ave 16 max 16 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 116 ave 116 max 116 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 116 +Ave neighs/atom = 7.25 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:43 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.18Jun19.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.18Jun19.duplex2.g++.4 new file mode 100644 index 0000000000..8989bce5ef --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.18Jun19.duplex2.g++.4 @@ -0,0 +1,1173 @@ +LAMMPS (18 Jun 2019) +variable number equal 2 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex2 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 16 atoms + reading velocities ... + 16 velocities + 16 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 13 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 4 = max # of 1-4 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000162 secs + read_data CPU = 0.002971 secs + +set atom * mass 3.1575 + 16 settings made for mass + +group all type 1 4 +16 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqav ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqav 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +#fix 1 all nve/dot +fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 ${T} 0.03 457145 angmom 10 +fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.777 | 7.959 | 8.142 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.5358787 0.0096742456 -1.5262045 1.0127369e-05 +1000 ekin = 1.34554291364716 | erot = 2.30525041754444 | epot = -24.3924150888896 | etot = -20.741621757698 +2000 ekin = 2.15972469811184 | erot = 2.1628675965276 | epot = -24.3548203354875 | etot = -20.0322280408481 +3000 ekin = 3.26433550542939 | erot = 2.76107866472087 | epot = -24.2947953202752 | etot = -18.269381150125 +4000 ekin = 1.9203212531997 | erot = 2.133394384253 | epot = -24.234098584123 | etot = -20.1803829466703 +5000 ekin = 1.35481075814721 | erot = 2.00854026688447 | epot = -24.1768963201279 | etot = -20.8135452950963 +6000 ekin = 2.18974627635306 | erot = 1.73271671162436 | epot = -24.1096616118305 | etot = -20.1871986238531 +7000 ekin = 2.65472853187395 | erot = 1.73258720631297 | epot = -24.0561118130561 | etot = -19.6687960748691 +8000 ekin = 2.51192327964357 | erot = 2.34132844779952 | epot = -23.9708695663488 | etot = -19.1176178389058 +9000 ekin = 2.24554900802464 | erot = 2.0522939078286 | epot = -23.874757758319 | etot = -19.5769148424658 +10000 ekin = 2.36227360512089 | erot = 1.80185994066737 | epot = -23.7793375260418 | etot = -19.6152039802535 +11000 ekin = 2.03264234985168 | erot = 1.68707706801736 | epot = -23.7396221351636 | etot = -20.0199027172945 +12000 ekin = 2.66329111303325 | erot = 2.49804687909781 | epot = -23.7366995564469 | etot = -18.5753615643158 +13000 ekin = 1.89677055811531 | erot = 2.34624821263612 | epot = -23.6591067615901 | etot = -19.4160879908387 +14000 ekin = 1.91279445145792 | erot = 2.13129118502405 | epot = -23.6468743458148 | etot = -19.6027887093328 +15000 ekin = 2.41876331112169 | erot = 2.07362128417238 | epot = -23.5767792498568 | etot = -19.0843946545628 +16000 ekin = 2.76615310647131 | erot = 1.19495009524763 | epot = -23.4862363509196 | etot = -19.5251331492006 +17000 ekin = 2.45632569069911 | erot = 2.37627186077148 | epot = -23.500787861849 | etot = -18.6681903103784 +18000 ekin = 2.18348858414473 | erot = 2.46933014500077 | epot = -23.5223047738331 | etot = -18.8694860446876 +19000 ekin = 2.2074746303434 | erot = 2.45349372324724 | epot = -23.4618353655003 | etot = -18.8008670119096 +20000 ekin = 2.06964129991908 | erot = 1.80832666230414 | epot = -23.4930879797962 | etot = -19.615120017573 +21000 ekin = 2.26572194434983 | erot = 2.76680470094409 | epot = -23.5023070260553 | etot = -18.4697803807614 +22000 ekin = 2.69295306575102 | erot = 1.86984875574017 | epot = -23.4463493063166 | etot = -18.8835474848254 +23000 ekin = 1.99930153068661 | erot = 2.27735339437466 | epot = -23.3493214662276 | etot = -19.0726665411663 +24000 ekin = 2.20679650752062 | erot = 2.98147599881873 | epot = -23.273517698415 | etot = -18.0852451920757 +25000 ekin = 2.28085541692287 | erot = 2.99165466281124 | epot = -23.2072100929465 | etot = -17.9347000132124 +26000 ekin = 1.9530124305314 | erot = 2.81680126246586 | epot = -23.0636678500934 | etot = -18.2938541570962 +27000 ekin = 1.96948983508855 | erot = 2.69266617300682 | epot = -22.9870601707012 | etot = -18.3249041626058 +28000 ekin = 2.02061868464074 | erot = 2.37038530969117 | epot = -22.9383598315964 | etot = -18.5473558372645 +29000 ekin = 2.51387846128098 | erot = 2.0265039132053 | epot = -22.888959880923 | etot = -18.3485775064367 +30000 ekin = 1.95889729807242 | erot = 2.1170713545074 | epot = -22.7896312662562 | etot = -18.7136626136764 +31000 ekin = 1.81775203419098 | erot = 2.326796842935 | epot = -22.7561124537192 | etot = -18.6115635765932 +32000 ekin = 1.87947265787065 | erot = 2.0009346769358 | epot = -22.8533570528062 | etot = -18.9729497179997 +33000 ekin = 1.77435214491107 | erot = 1.82826131933673 | epot = -22.8632647352802 | etot = -19.2606512710324 +34000 ekin = 2.27098719472917 | erot = 3.11275511420439 | epot = -22.9527052663856 | etot = -17.5689629574521 +35000 ekin = 2.88921171289845 | erot = 1.82538384737236 | epot = -23.0316569923336 | etot = -18.3170614320628 +36000 ekin = 2.40471013682393 | erot = 2.59817148723643 | epot = -23.1277697887139 | etot = -18.1248881646536 +37000 ekin = 2.23499312928139 | erot = 1.74662115184433 | epot = -23.1542126827759 | etot = -19.1725984016501 +38000 ekin = 2.13875747252781 | erot = 3.07733571118648 | epot = -23.0916051545794 | etot = -17.8755119708651 +39000 ekin = 2.08901196654187 | erot = 2.81975762995374 | epot = -23.0796147800379 | etot = -18.1708451835423 +40000 ekin = 2.95155149177527 | erot = 2.19459039829335 | epot = -23.141500571363 | etot = -17.9953586812944 +41000 ekin = 2.49235596566196 | erot = 3.45295839915509 | epot = -23.115526015811 | etot = -17.1702116509939 +42000 ekin = 2.58401591894786 | erot = 3.0976076851145 | epot = -23.0181097727229 | etot = -17.3364861686605 +43000 ekin = 2.17593293893362 | erot = 2.65403748718844 | epot = -22.8962504257564 | etot = -18.0662799996343 +44000 ekin = 2.34068034665607 | erot = 3.294882771572 | epot = -22.8143844644656 | etot = -17.1788213462375 +45000 ekin = 1.87200112415306 | erot = 3.49863859200052 | epot = -22.6989374637074 | etot = -17.3282977475538 +46000 ekin = 2.60943921333194 | erot = 2.23170007842725 | epot = -22.5884035122493 | etot = -17.7472642204901 +47000 ekin = 1.89594756436345 | erot = 3.4002587629387 | epot = -22.4938472923117 | etot = -17.1976409650096 +48000 ekin = 2.49339593279701 | erot = 2.5104785556399 | epot = -22.5372062210456 | etot = -17.5333317326087 +49000 ekin = 3.2041407554348 | erot = 2.17669016194865 | epot = -22.5688036423094 | etot = -17.1879727249259 +50000 ekin = 2.93024070185999 | erot = 1.55416219951966 | epot = -22.6087903765995 | etot = -18.1243874752199 +51000 ekin = 2.8585759501124 | erot = 2.69193261792584 | epot = -22.6228353253324 | etot = -17.0723267572942 +52000 ekin = 2.3079418078843 | erot = 1.84260643306147 | epot = -22.6230480697441 | etot = -18.4724998287983 +53000 ekin = 3.1803685919024 | erot = 1.67451273370508 | epot = -22.6834814309773 | etot = -17.8286001053698 +54000 ekin = 2.6151376953128 | erot = 1.96091197875017 | epot = -22.7484551927013 | etot = -18.1724055186384 +55000 ekin = 3.1639577845443 | erot = 2.86286196426802 | epot = -22.7917236196438 | etot = -16.7649038708315 +56000 ekin = 2.52994034294643 | erot = 3.05544364249365 | epot = -22.7651844773103 | etot = -17.1798004918702 +57000 ekin = 2.40889871674401 | erot = 3.4525690879514 | epot = -22.7113139496974 | etot = -16.849846145002 +58000 ekin = 1.9363727739706 | erot = 2.52762778976703 | epot = -22.6468058892224 | etot = -18.1828053254848 +59000 ekin = 2.55505415922972 | erot = 3.52385701835933 | epot = -22.6037443858311 | etot = -16.5248332082421 +60000 ekin = 2.80945252332612 | erot = 2.88606183204889 | epot = -22.5227874119079 | etot = -16.8272730565329 +61000 ekin = 2.69750183117722 | erot = 2.55373633146433 | epot = -22.4306469225965 | etot = -17.1794087599549 +62000 ekin = 2.74494354639602 | erot = 2.23074517653766 | epot = -22.3675792436719 | etot = -17.3918905207383 +63000 ekin = 2.66335513293138 | erot = 2.46159865380861 | epot = -22.3527707145482 | etot = -17.2278169278082 +64000 ekin = 2.12832019835147 | erot = 2.78772793164811 | epot = -22.3048690294469 | etot = -17.3888208994473 +65000 ekin = 1.88429801911228 | erot = 2.70719871478483 | epot = -22.3342736701749 | etot = -17.7427769362778 +66000 ekin = 2.77106091929282 | erot = 1.94126620531915 | epot = -22.338257942783 | etot = -17.625930818171 +67000 ekin = 2.53561386235746 | erot = 2.45901054739082 | epot = -22.3780784743028 | etot = -17.3834540645545 +68000 ekin = 2.9678648663671 | erot = 1.95502711706149 | epot = -22.4420512915713 | etot = -17.5191593081427 +69000 ekin = 2.61501630036274 | erot = 2.2429513448561 | epot = -22.3607835407198 | etot = -17.502815895501 +70000 ekin = 2.41492598760663 | erot = 2.80885610657203 | epot = -22.2905725083407 | etot = -17.066790414162 +71000 ekin = 2.65062529541957 | erot = 2.88868401392431 | epot = -22.2951070257787 | etot = -16.7557977164349 +72000 ekin = 2.93273744051009 | erot = 2.82552508252073 | epot = -22.4016757930526 | etot = -16.6434132700218 +73000 ekin = 2.18922665452238 | erot = 3.03559183860538 | epot = -22.4509770394845 | etot = -17.2261585463568 +74000 ekin = 2.16074843540078 | erot = 2.83668185121384 | epot = -22.4374624006144 | etot = -17.4400321139998 +75000 ekin = 1.52329638473031 | erot = 1.91520672578907 | epot = -22.5623153080324 | etot = -19.123812197513 +76000 ekin = 1.89250964827726 | erot = 2.83358650938892 | epot = -22.6698326202442 | etot = -17.943736462578 +77000 ekin = 2.82066630152179 | erot = 3.19779433197964 | epot = -22.7402096770599 | etot = -16.7217490435584 +78000 ekin = 2.42603824235662 | erot = 2.82319136688957 | epot = -22.7334053911689 | etot = -17.4841757819227 +79000 ekin = 2.1571494738421 | erot = 1.67722302323495 | epot = -22.7616861631187 | etot = -18.9273136660417 +80000 ekin = 2.3760789053548 | erot = 2.58372913427157 | epot = -22.6889139769023 | etot = -17.729105937276 +81000 ekin = 2.73468961033338 | erot = 1.92748741387075 | epot = -22.6388260929897 | etot = -17.9766490687856 +82000 ekin = 1.90565370838817 | erot = 1.71715050303634 | epot = -22.5547415381056 | etot = -18.9319373266811 +83000 ekin = 1.63698443616271 | erot = 1.88092293220519 | epot = -22.4792739412377 | etot = -18.9613665728698 +84000 ekin = 1.65571812906993 | erot = 2.10290321918187 | epot = -22.4031972735297 | etot = -18.6445759252779 +85000 ekin = 2.40863681830855 | erot = 2.04741059095057 | epot = -22.321221903585 | etot = -17.8651744943259 +86000 ekin = 2.50560893716733 | erot = 1.80624308622105 | epot = -22.3789065133115 | etot = -18.0670544899231 +87000 ekin = 2.13576456371582 | erot = 1.97115993651017 | epot = -22.4335511413526 | etot = -18.3266266411266 +88000 ekin = 1.74897318407528 | erot = 2.37233945814529 | epot = -22.4142028246849 | etot = -18.2928901824643 +89000 ekin = 1.85559683216276 | erot = 3.29559734355419 | epot = -22.4519626048678 | etot = -17.3007684291509 +90000 ekin = 2.22181579992018 | erot = 2.33948779846394 | epot = -22.5289826258985 | etot = -17.9676790275144 +91000 ekin = 2.40596540834273 | erot = 3.11545124680293 | epot = -22.4975752624166 | etot = -16.9761586072709 +92000 ekin = 2.6773157744569 | erot = 3.00279439655287 | epot = -22.4834827179575 | etot = -16.8033725469477 +93000 ekin = 3.0427813598525 | erot = 3.03722776158512 | epot = -22.4121259471479 | etot = -16.3321168257103 +94000 ekin = 3.20507830840023 | erot = 1.86440047317737 | epot = -22.5079833350679 | etot = -17.4385045534903 +95000 ekin = 3.4839955648833 | erot = 2.87934575393031 | epot = -22.5675869456428 | etot = -16.2042456268292 +96000 ekin = 2.8873631080951 | erot = 2.38554372248299 | epot = -22.5453635283434 | etot = -17.2724566977653 +97000 ekin = 1.92899149350272 | erot = 2.09886479790579 | epot = -22.5208382020819 | etot = -18.4929819106733 +98000 ekin = 2.21420868967462 | erot = 3.66528252896999 | epot = -22.4426781355708 | etot = -16.5631869169262 +99000 ekin = 1.98238051924192 | erot = 2.77358159119584 | epot = -22.3579409961467 | etot = -17.6019788857089 +100000 ekin = 1.80278462349605 | erot = 2.65457154995031 | epot = -22.2926900475079 | etot = -17.8353338740616 +101000 ekin = 2.14042196591663 | erot = 2.38610603254675 | epot = -22.2789462117326 | etot = -17.7524182132692 +102000 ekin = 1.54923043145398 | erot = 2.30485616158943 | epot = -22.27519637673 | etot = -18.4211097836866 +103000 ekin = 1.66618004359352 | erot = 2.82192794888076 | epot = -22.3284746660305 | etot = -17.8403666735562 +104000 ekin = 1.8840390723585 | erot = 3.37607054348826 | epot = -22.4068162519772 | etot = -17.1467066361304 +105000 ekin = 2.08970806137592 | erot = 2.01278733908098 | epot = -22.450865561264 | etot = -18.3483701608071 +106000 ekin = 2.87186619049714 | erot = 1.95029477179727 | epot = -22.46479383237 | etot = -17.6426328700756 +107000 ekin = 2.28516102595382 | erot = 1.55115426482475 | epot = -22.420448971169 | etot = -18.5841336803904 +108000 ekin = 2.4440862469061 | erot = 1.71323205815914 | epot = -22.4934628688132 | etot = -18.336144563748 +109000 ekin = 2.33376449416318 | erot = 2.92962175925398 | epot = -22.4792154966925 | etot = -17.2158292432753 +110000 ekin = 2.7815613020599 | erot = 2.36483486971455 | epot = -22.4384263756784 | etot = -17.2920302039039 +111000 ekin = 2.32472851347632 | erot = 2.09554567134105 | epot = -22.3756448055424 | etot = -17.955370620725 +112000 ekin = 2.91126509700492 | erot = 1.8278781240038 | epot = -22.2278235937356 | etot = -17.4886803727269 +113000 ekin = 2.82522334536064 | erot = 1.67936756938672 | epot = -22.2030639545535 | etot = -17.6984730398062 +114000 ekin = 3.42964629994365 | erot = 2.67287683722422 | epot = -22.3274259722919 | etot = -16.224902835124 +115000 ekin = 3.0542495603856 | erot = 1.72370226125566 | epot = -22.3530732875163 | etot = -17.575121465875 +116000 ekin = 3.19934505541307 | erot = 3.20304074939432 | epot = -22.4112422200445 | etot = -16.0088564152371 +117000 ekin = 3.03942349360439 | erot = 2.40720645224432 | epot = -22.3646852618703 | etot = -16.9180553160216 +118000 ekin = 3.21704225120818 | erot = 1.46425401673931 | epot = -22.2864155249032 | etot = -17.6051192569557 +119000 ekin = 2.33989996826882 | erot = 3.07668030790319 | epot = -22.2283862990246 | etot = -16.8118060228526 +120000 ekin = 1.93772242476321 | erot = 2.20130457047854 | epot = -22.1620199969907 | etot = -18.022993001749 +121000 ekin = 1.94013950333198 | erot = 3.08987281123525 | epot = -22.1565667857742 | etot = -17.126554471207 +122000 ekin = 1.68663003450368 | erot = 1.73461876453175 | epot = -22.2565715090021 | etot = -18.8353227099667 +123000 ekin = 1.72841976989173 | erot = 2.32750063038672 | epot = -22.3665160016578 | etot = -18.3105956013793 +124000 ekin = 2.73468934475335 | erot = 1.93313584543739 | epot = -22.378088078826 | etot = -17.7102628886353 +125000 ekin = 2.77507735763211 | erot = 1.95244582221334 | epot = -22.3863676939847 | etot = -17.6588445141392 +126000 ekin = 2.04549959008918 | erot = 1.485897173428 | epot = -22.4226219879524 | etot = -18.8912252244352 +127000 ekin = 1.86410777734907 | erot = 1.58829497411524 | epot = -22.4027380289015 | etot = -18.9503352774372 +128000 ekin = 1.63329448006254 | erot = 1.88032753965974 | epot = -22.3918784566533 | etot = -18.8782564369311 +129000 ekin = 2.51522192674941 | erot = 2.38822614049102 | epot = -22.396225517968 | etot = -17.4927774507275 +130000 ekin = 1.61191166117177 | erot = 2.81688343133435 | epot = -22.341565060394 | etot = -17.9127699678878 +131000 ekin = 2.29569747740708 | erot = 2.2886876976091 | epot = -22.2184139794107 | etot = -17.6340288043945 +132000 ekin = 2.97393694467802 | erot = 2.3613525440602 | epot = -22.1410658382525 | etot = -16.8057763495143 +133000 ekin = 2.01357676743257 | erot = 2.125828419273 | epot = -22.1312019600638 | etot = -17.9917967733582 +134000 ekin = 1.56048037412857 | erot = 2.84208065022547 | epot = -22.0682869067536 | etot = -17.6657258823995 +135000 ekin = 1.79811942319758 | erot = 2.40075843487508 | epot = -22.0853555614258 | etot = -17.8864777033532 +136000 ekin = 1.63631696233012 | erot = 2.13166656554854 | epot = -22.0879615470249 | etot = -18.3199780191463 +137000 ekin = 2.36040439516093 | erot = 1.93785486632901 | epot = -22.1234845924018 | etot = -17.8252253309118 +138000 ekin = 2.94591421775872 | erot = 1.58866111192914 | epot = -22.1783168558241 | etot = -17.6437415261363 +139000 ekin = 3.17560544591524 | erot = 2.24933296614107 | epot = -22.2966418842012 | etot = -16.8717034721449 +140000 ekin = 2.24781162873235 | erot = 3.05934139328612 | epot = -22.4681108223249 | etot = -17.1609578003064 +141000 ekin = 1.89078628042285 | erot = 3.13246933186326 | epot = -22.730922227649 | etot = -17.7076666153629 +142000 ekin = 2.51033894675651 | erot = 2.4942894309123 | epot = -22.8404165502847 | etot = -17.8357881726159 +143000 ekin = 2.40438807844298 | erot = 2.71461817456284 | epot = -22.8207220890738 | etot = -17.7017158360679 +144000 ekin = 1.9307425487964 | erot = 2.67760329085926 | epot = -22.6973757396236 | etot = -18.0890298999679 +145000 ekin = 1.82681171280412 | erot = 1.73674169257736 | epot = -22.6628534675149 | etot = -19.0993000621335 +146000 ekin = 2.42423538163981 | erot = 2.0908776294658 | epot = -22.6072904345337 | etot = -18.0921774234281 +147000 ekin = 1.44607209743073 | erot = 1.8801263906251 | epot = -22.5001275476876 | etot = -19.1739290596318 +148000 ekin = 1.9349809420382 | erot = 2.57774390934154 | epot = -22.4721664357448 | etot = -17.9594415843651 +149000 ekin = 2.02370265642699 | erot = 3.3179576458013 | epot = -22.3745153112138 | etot = -17.0328550089855 +150000 ekin = 2.48124469844233 | erot = 2.68185291250579 | epot = -22.1950329772129 | etot = -17.0319353662648 +151000 ekin = 2.76319440452884 | erot = 1.87355938382631 | epot = -21.986630645846 | etot = -17.3498768574909 +152000 ekin = 2.77453107952051 | erot = 1.77016628972892 | epot = -21.7977108098427 | etot = -17.2530134405933 +153000 ekin = 3.08827014622555 | erot = 1.80976617511255 | epot = -21.6910123469878 | etot = -16.7929760256497 +154000 ekin = 2.32051051770812 | erot = 2.18004857730092 | epot = -21.6406733490634 | etot = -17.1401142540543 +155000 ekin = 1.95766873014157 | erot = 2.67064554154836 | epot = -21.7315745360126 | etot = -17.1032602643227 +156000 ekin = 2.69830438989808 | erot = 2.24987636164771 | epot = -21.7962907570244 | etot = -16.8481100054786 +157000 ekin = 3.89340900899948 | erot = 2.73733315325155 | epot = -21.8437967078712 | etot = -15.2130545456202 +158000 ekin = 2.84737207100033 | erot = 2.70157958556583 | epot = -21.878244439129 | etot = -16.3292927825628 +159000 ekin = 3.1312088996125 | erot = 2.65375527842548 | epot = -21.8350703791794 | etot = -16.0501062011414 +160000 ekin = 2.54316260055464 | erot = 3.27950281054041 | epot = -21.8888467298127 | etot = -16.0661813187176 +161000 ekin = 2.49549109190181 | erot = 2.45028506429479 | epot = -21.8585593359585 | etot = -16.9127831797619 +162000 ekin = 3.05200272259994 | erot = 2.59164651185653 | epot = -21.8439750046483 | etot = -16.2003257701918 +163000 ekin = 3.30374280597553 | erot = 2.24193960212662 | epot = -21.8717863279577 | etot = -16.3261039198555 +164000 ekin = 3.53081155329031 | erot = 2.22419322011391 | epot = -21.8162094860939 | etot = -16.0612047126897 +165000 ekin = 2.48919804649027 | erot = 2.59105984700639 | epot = -21.7395563276218 | etot = -16.6592984341251 +166000 ekin = 2.14880495285182 | erot = 3.05770380831398 | epot = -21.6850566092694 | etot = -16.4785478481036 +167000 ekin = 2.78181890034675 | erot = 2.90402826001928 | epot = -21.5971987360122 | etot = -15.9113515756462 +168000 ekin = 1.74726050172142 | erot = 2.76898886506121 | epot = -21.490566893224 | etot = -16.9743175264414 +169000 ekin = 1.8134289785439 | erot = 2.45780601602371 | epot = -21.4680710936728 | etot = -17.1968360991052 +170000 ekin = 1.69364478039988 | erot = 2.87928997590297 | epot = -21.4668806356843 | etot = -16.8939458793814 +171000 ekin = 2.14879448642638 | erot = 1.61442218455815 | epot = -21.3172106430715 | etot = -17.553993972087 +172000 ekin = 1.68431962963431 | erot = 2.36087816720612 | epot = -21.1539793618528 | etot = -17.1087815650124 +173000 ekin = 2.05784071815669 | erot = 2.17142592689102 | epot = -21.0926393885011 | etot = -16.8633727434534 +174000 ekin = 2.49611606122761 | erot = 3.09665692560806 | epot = -20.9460348670979 | etot = -15.3532618802622 +175000 ekin = 2.61673440848865 | erot = 2.88720331620426 | epot = -20.8525764091519 | etot = -15.348638684459 +176000 ekin = 2.16190213742438 | erot = 2.672518464664 | epot = -20.8442274508468 | etot = -16.0098068487584 +177000 ekin = 2.83236394902013 | erot = 2.81489135382763 | epot = -20.925759607446 | etot = -15.2785043045983 +178000 ekin = 3.17804494293424 | erot = 1.88346790512585 | epot = -21.0677853312893 | etot = -16.0062724832292 +179000 ekin = 2.33267448424065 | erot = 2.85731052069525 | epot = -21.1181390109479 | etot = -15.928154006012 +180000 ekin = 2.39061531304011 | erot = 2.93791308776 | epot = -21.1146449531392 | etot = -15.786116552339 +181000 ekin = 2.79990361156737 | erot = 3.28891520287386 | epot = -21.0834365456108 | etot = -14.9946177311695 +182000 ekin = 3.02616507870526 | erot = 2.3341432703009 | epot = -21.0600545808659 | etot = -15.6997462318597 +183000 ekin = 2.45290144562467 | erot = 2.21141617846262 | epot = -20.911866387917 | etot = -16.2475487638297 +184000 ekin = 2.56560515060991 | erot = 2.7739810551646 | epot = -20.6989716212004 | etot = -15.3593854154259 +185000 ekin = 2.17586139274635 | erot = 1.95913868179524 | epot = -20.5985322435751 | etot = -16.4635321690335 +186000 ekin = 2.07303044902321 | erot = 3.15122816264525 | epot = -20.4965070011281 | etot = -15.2722483894597 +187000 ekin = 2.44319481307615 | erot = 1.92784212082443 | epot = -20.5124982035642 | etot = -16.1414612696636 +188000 ekin = 2.28870879542405 | erot = 2.8871121346017 | epot = -20.6323506293031 | etot = -15.4565296992773 +189000 ekin = 1.68047280237829 | erot = 3.05535775765803 | epot = -20.6378101864803 | etot = -15.901979626444 +190000 ekin = 1.97184665786397 | erot = 2.95271452778009 | epot = -20.6376534135265 | etot = -15.7130922278825 +191000 ekin = 2.30626539196432 | erot = 2.64854814117512 | epot = -20.6037323569656 | etot = -15.6489188238262 +192000 ekin = 3.54976671698926 | erot = 2.91090725702116 | epot = -20.5525508832509 | etot = -14.0918769092405 +193000 ekin = 2.63938438600422 | erot = 3.14409581682352 | epot = -20.5892132844066 | etot = -14.8057330815789 +194000 ekin = 2.67903757365037 | erot = 2.30768318132376 | epot = -20.4753987179501 | etot = -15.488677962976 +195000 ekin = 1.89257615363314 | erot = 2.64508051866103 | epot = -20.4197880125065 | etot = -15.8821313402123 +196000 ekin = 2.29151017050607 | erot = 2.32636787964875 | epot = -20.4440761857987 | etot = -15.8261981356438 +197000 ekin = 2.48344018982905 | erot = 2.5654400941963 | epot = -20.516126938087 | etot = -15.4672466540616 +198000 ekin = 2.01386156849612 | erot = 1.52779840514975 | epot = -20.537160292649 | etot = -16.9955003190031 +199000 ekin = 1.50729232131931 | erot = 2.19878124720506 | epot = -20.5584754599868 | etot = -16.8524018914625 +200000 ekin = 1.64236235330806 | erot = 2.46736341802316 | epot = -20.5387924113648 | etot = -16.4290666400336 +201000 ekin = 2.627066472214 | erot = 2.61321940355396 | epot = -20.6089911163939 | etot = -15.3687052406259 +202000 ekin = 2.3129503751722 | erot = 2.54874856259559 | epot = -20.6732219111123 | etot = -15.8115229733445 +203000 ekin = 1.63961009223968 | erot = 2.10835750593015 | epot = -20.7002051999767 | etot = -16.9522376018069 +204000 ekin = 2.0558049009161 | erot = 1.9161072834091 | epot = -20.8154459612946 | etot = -16.8435337769694 +205000 ekin = 3.04603860094189 | erot = 3.24233043438682 | epot = -20.9297600758299 | etot = -14.6413910405012 +206000 ekin = 2.56775422508359 | erot = 2.20992928465512 | epot = -21.0192669133083 | etot = -16.2415834035696 +207000 ekin = 3.46597997409567 | erot = 2.48427015330086 | epot = -21.151399026488 | etot = -15.2011488990915 +208000 ekin = 2.51159742060494 | erot = 2.22948191756652 | epot = -21.2942477400986 | etot = -16.5531684019271 +209000 ekin = 3.78908644724162 | erot = 2.17660742759513 | epot = -21.4499700336111 | etot = -15.4842761587743 +210000 ekin = 3.03133642129733 | erot = 2.21595982730352 | epot = -21.5648709610245 | etot = -16.3175747124237 +211000 ekin = 1.63075564056512 | erot = 2.12650387194819 | epot = -21.6099552204253 | etot = -17.852695707912 +212000 ekin = 2.67694215598975 | erot = 2.47186432110288 | epot = -21.8481434074352 | etot = -16.6993369303425 +213000 ekin = 2.70688282449408 | erot = 1.96666534072978 | epot = -22.1170796448084 | etot = -17.4435314795845 +214000 ekin = 2.88993887341392 | erot = 3.16392577542175 | epot = -22.1689844550676 | etot = -16.1151198062319 +215000 ekin = 2.59587305508913 | erot = 1.84775314628517 | epot = -22.0799472955547 | etot = -17.6363210941804 +216000 ekin = 2.59710486720184 | erot = 2.79170232594871 | epot = -22.123050002636 | etot = -16.7342428094855 +217000 ekin = 2.50043297628753 | erot = 1.89569946865143 | epot = -22.2232445790842 | etot = -17.8271121341452 +218000 ekin = 2.42608117861514 | erot = 2.42380011003409 | epot = -22.2442965405807 | etot = -17.3944152519314 +219000 ekin = 2.31038806457503 | erot = 2.64910389607574 | epot = -22.2862511100887 | etot = -17.3267591494379 +220000 ekin = 1.69989575631519 | erot = 2.34717348369245 | epot = -22.2936253261379 | etot = -18.2465560861303 +221000 ekin = 2.0597604328414 | erot = 2.4617257870959 | epot = -22.2693428350923 | etot = -17.747856615155 +222000 ekin = 1.56778478035701 | erot = 2.12765432596982 | epot = -22.1639011265163 | etot = -18.4684620201895 +223000 ekin = 1.84761048251748 | erot = 1.88006246465219 | epot = -22.0932628941083 | etot = -18.3655899469387 +224000 ekin = 2.59436846043989 | erot = 2.94714248251079 | epot = -22.1101977210218 | etot = -16.5686867780711 +225000 ekin = 3.30446830369106 | erot = 2.86069163428051 | epot = -22.1130335717329 | etot = -15.9478736337614 +226000 ekin = 3.03148439961004 | erot = 2.0857715841185 | epot = -22.1515480756285 | etot = -17.0342920918999 +227000 ekin = 2.52473737037052 | erot = 3.1515233037479 | epot = -22.2272979755786 | etot = -16.5510373014602 +228000 ekin = 2.32773029487822 | erot = 2.67887550863523 | epot = -22.3289846157579 | etot = -17.3223788122445 +229000 ekin = 2.908632187774 | erot = 2.89972099244786 | epot = -22.4590990625921 | etot = -16.6507458823703 +230000 ekin = 2.30901008738396 | erot = 3.48892218468534 | epot = -22.5811133380347 | etot = -16.7831810659654 +231000 ekin = 2.09445974553368 | erot = 3.10137653837903 | epot = -22.6273628788262 | etot = -17.4315265949135 +232000 ekin = 2.11347252785341 | erot = 1.99214840222577 | epot = -22.6148559367411 | etot = -18.5092350066619 +233000 ekin = 2.31469131808302 | erot = 2.82702779723524 | epot = -22.573468078272 | etot = -17.4317489629538 +234000 ekin = 2.08691986790862 | erot = 2.09006771152617 | epot = -22.5768924885421 | etot = -18.3999049091073 +235000 ekin = 2.43602788311011 | erot = 2.79756094595935 | epot = -22.5841308018507 | etot = -17.3505419727812 +236000 ekin = 2.93232983655883 | erot = 3.05945149934941 | epot = -22.5011281720659 | etot = -16.5093468361576 +237000 ekin = 3.2236915032749 | erot = 3.26810349425041 | epot = -22.3869936414794 | etot = -15.8951986439541 +238000 ekin = 2.4674995923353 | erot = 2.31630563795609 | epot = -22.3210409459325 | etot = -17.5372357156411 +239000 ekin = 2.10887317283391 | erot = 2.47562990634415 | epot = -22.3008221039947 | etot = -17.7163190248166 +240000 ekin = 1.76092230208337 | erot = 2.62077674301801 | epot = -22.2503883436816 | etot = -17.8686892985802 +241000 ekin = 1.93966929781469 | erot = 1.41063904300121 | epot = -22.2367099354244 | etot = -18.8864015946085 +242000 ekin = 3.03220831764684 | erot = 2.02809667614523 | epot = -22.2529237351145 | etot = -17.1926187413224 +243000 ekin = 2.84396619393303 | erot = 1.7910064306681 | epot = -22.2768680265869 | etot = -17.6418954019858 +244000 ekin = 1.94630661585721 | erot = 2.3722540427007 | epot = -22.2272698315535 | etot = -17.9087091729956 +245000 ekin = 2.21268964174709 | erot = 2.75899365563147 | epot = -22.1926413343766 | etot = -17.2209580369981 +246000 ekin = 2.07547606015104 | erot = 2.22089229769683 | epot = -22.119471822751 | etot = -17.8231034649032 +247000 ekin = 1.58341517009487 | erot = 3.06778333448391 | epot = -22.0033087190277 | etot = -17.3521102144489 +248000 ekin = 2.1365138975527 | erot = 3.53502738921423 | epot = -21.8495423719646 | etot = -16.1780010851977 +249000 ekin = 2.17149547481658 | erot = 3.29316066315612 | epot = -21.813933670884 | etot = -16.3492775329113 +250000 ekin = 2.39365756609179 | erot = 2.39580124119371 | epot = -21.767733544404 | etot = -16.9782747371185 +251000 ekin = 1.2828204065042 | erot = 2.24293125468609 | epot = -21.7209613352709 | etot = -18.1952096740806 +252000 ekin = 1.76792385357404 | erot = 2.13774913157991 | epot = -21.715743646839 | etot = -17.8100706616851 +253000 ekin = 2.15844787240193 | erot = 2.59910839140098 | epot = -21.6939194867273 | etot = -16.9363632229244 +254000 ekin = 2.46988601582316 | erot = 1.99393049965303 | epot = -21.6738244724958 | etot = -17.2100079570196 +255000 ekin = 2.31014544453096 | erot = 2.03140480982291 | epot = -21.6888108217887 | etot = -17.3472605674348 +256000 ekin = 2.90570988017011 | erot = 2.61779108741197 | epot = -21.6304219101588 | etot = -16.1069209425767 +257000 ekin = 2.87227426842454 | erot = 2.08598550349753 | epot = -21.5998306482426 | etot = -16.6415708763206 +258000 ekin = 2.06365418401471 | erot = 2.33103720962373 | epot = -21.5019981919811 | etot = -17.1073067983427 +259000 ekin = 2.23106413601668 | erot = 2.88992031738565 | epot = -21.4929751490585 | etot = -16.3719906956562 +260000 ekin = 2.49064109684832 | erot = 2.38083177290805 | epot = -21.4659963710747 | etot = -16.5945235013183 +261000 ekin = 2.09140199827797 | erot = 2.40209752473156 | epot = -21.4076397934529 | etot = -16.9141402704433 +262000 ekin = 2.36091906713393 | erot = 2.66652490187927 | epot = -21.359937125592 | etot = -16.3324931565788 +263000 ekin = 2.2112169796158 | erot = 2.73059503173094 | epot = -21.4187723839513 | etot = -16.4769603726046 +264000 ekin = 2.28961718487933 | erot = 2.75455515229635 | epot = -21.370776058554 | etot = -16.3266037213783 +265000 ekin = 1.71596203334806 | erot = 1.76104932073225 | epot = -21.2034176623527 | etot = -17.7264063082724 +266000 ekin = 2.51424635704546 | erot = 2.09488481391075 | epot = -21.0818656942669 | etot = -16.4727345233107 +267000 ekin = 2.81393895925601 | erot = 2.14232705328249 | epot = -21.1259701200622 | etot = -16.1697041075237 +268000 ekin = 3.10191854871686 | erot = 2.80451383793942 | epot = -21.0933882633302 | etot = -15.1869558766739 +269000 ekin = 3.52550118014125 | erot = 2.35973600910593 | epot = -21.0585255577117 | etot = -15.1732883684645 +270000 ekin = 3.50731584216641 | erot = 1.86855463358785 | epot = -21.093710946541 | etot = -15.7178404707867 +271000 ekin = 3.5675331453682 | erot = 2.0823459971557 | epot = -21.1717850302959 | etot = -15.521905887772 +272000 ekin = 2.43382567191708 | erot = 3.09591378837425 | epot = -21.2584464912718 | etot = -15.7287070309805 +273000 ekin = 2.38177594135517 | erot = 3.14028416008422 | epot = -21.3418702267283 | etot = -15.8198101252889 +274000 ekin = 2.46408091312732 | erot = 2.01407385193325 | epot = -21.3513679347441 | etot = -16.8732131696836 +275000 ekin = 2.45653813926169 | erot = 3.06780010281641 | epot = -21.3769507768006 | etot = -15.8526125347225 +276000 ekin = 2.79508720985829 | erot = 2.87011619931109 | epot = -21.3368600634473 | etot = -15.671656654278 +277000 ekin = 2.21394865880382 | erot = 2.19504097967885 | epot = -21.2606836087454 | etot = -16.8516939702627 +278000 ekin = 2.75723780567064 | erot = 3.25107227641375 | epot = -21.1755556732391 | etot = -15.1672455911547 +279000 ekin = 2.50738352588257 | erot = 1.80312795092014 | epot = -21.119949297869 | etot = -16.8094378210662 +280000 ekin = 2.35419479075042 | erot = 1.7566104351529 | epot = -21.0612865360217 | etot = -16.9504813101184 +281000 ekin = 2.54091624756361 | erot = 2.29354970120309 | epot = -21.0950091005497 | etot = -16.260543151783 +282000 ekin = 2.99712896075656 | erot = 2.42094408338315 | epot = -21.2220089565004 | etot = -15.8039359123607 +283000 ekin = 2.56696810638689 | erot = 2.10068113035835 | epot = -21.403161576838 | etot = -16.7355123400928 +284000 ekin = 2.50149529685552 | erot = 3.12894850572552 | epot = -21.5256946024495 | etot = -15.8952507998684 +285000 ekin = 2.42104861452631 | erot = 1.7773884250687 | epot = -21.6343236201921 | etot = -17.4358865805971 +286000 ekin = 1.95703367775988 | erot = 2.02947038358402 | epot = -21.6777606373854 | etot = -17.6912565760415 +287000 ekin = 2.563069553437 | erot = 2.57822888294094 | epot = -21.7096788412169 | etot = -16.568380404839 +288000 ekin = 2.18408141161779 | erot = 1.69724000161796 | epot = -21.6059228036045 | etot = -17.7246013903687 +289000 ekin = 2.32975723406079 | erot = 1.67288237726622 | epot = -21.4690249265465 | etot = -17.4663853152195 +290000 ekin = 2.22773933829104 | erot = 2.00568808096403 | epot = -21.3936416309443 | etot = -17.1602142116892 +291000 ekin = 1.46140048209222 | erot = 2.68187349132486 | epot = -21.320309661152 | etot = -17.177035687735 +292000 ekin = 2.07752653885401 | erot = 2.42042811850752 | epot = -21.2225710152689 | etot = -16.7246163579074 +293000 ekin = 2.14598735312316 | erot = 1.87232699516306 | epot = -21.1503112105659 | etot = -17.1319968622797 +294000 ekin = 2.15249843510191 | erot = 2.17548638187737 | epot = -21.1209057143321 | etot = -16.7929208973528 +295000 ekin = 2.13417246804068 | erot = 2.31578295657371 | epot = -21.023273761855 | etot = -16.5733183372406 +296000 ekin = 1.52381700282724 | erot = 2.92433462308731 | epot = -21.0839283123442 | etot = -16.6357766864297 +297000 ekin = 2.45165869902145 | erot = 2.17953392904489 | epot = -21.0491333291916 | etot = -16.4179407011252 +298000 ekin = 1.77920935759369 | erot = 2.01251348063453 | epot = -21.0971977522748 | etot = -17.3054749140465 +299000 ekin = 1.87538650376616 | erot = 1.65135039658661 | epot = -21.119277949862 | etot = -17.5925410495092 +300000 ekin = 2.3167056751994 | erot = 1.510902648654 | epot = -21.178913099451 | etot = -17.3513047755976 +301000 ekin = 2.00567209290794 | erot = 2.01270349508404 | epot = -21.2857234594098 | etot = -17.2673478714178 +302000 ekin = 1.78598592595272 | erot = 2.2354055492879 | epot = -21.3905601140029 | etot = -17.3691686387622 +303000 ekin = 2.73278841880507 | erot = 1.64856089415774 | epot = -21.3608973804115 | etot = -16.9795480674487 +304000 ekin = 2.5809493598196 | erot = 2.00558555026353 | epot = -21.400198286629 | etot = -16.8136633765459 +305000 ekin = 2.43647384348742 | erot = 2.28275438290435 | epot = -21.3863075230184 | etot = -16.6670792966266 +306000 ekin = 2.14332823539982 | erot = 2.4338461634411 | epot = -21.3233075109442 | etot = -16.7461331121032 +307000 ekin = 3.21424191196812 | erot = 3.27591538479569 | epot = -21.289790084126 | etot = -14.7996327873622 +308000 ekin = 3.45838026839176 | erot = 2.68116130354006 | epot = -21.3419403426811 | etot = -15.2023987707493 +309000 ekin = 2.38041738433959 | erot = 2.92081370932153 | epot = -21.4463399141034 | etot = -16.1451088204423 +310000 ekin = 2.50977269558789 | erot = 2.34824464102402 | epot = -21.4648074532888 | etot = -16.6067901166769 +311000 ekin = 2.57488628819259 | erot = 2.293754673538 | epot = -21.5151382155269 | etot = -16.6464972537963 +312000 ekin = 2.09623150906876 | erot = 2.93795890592974 | epot = -21.6260240426366 | etot = -16.5918336276381 +313000 ekin = 1.8184499729194 | erot = 2.28463898505893 | epot = -21.6999003790643 | etot = -17.5968114210859 +314000 ekin = 2.3228324174232 | erot = 2.19580475273396 | epot = -21.6870491287185 | etot = -17.1684119585613 +315000 ekin = 1.84546653836013 | erot = 2.13886071139629 | epot = -21.7312132691438 | etot = -17.7468860193873 +316000 ekin = 2.1657114199577 | erot = 3.03124199276298 | epot = -21.7430929234306 | etot = -16.5461395107099 +317000 ekin = 2.42793755919909 | erot = 3.57187833839244 | epot = -21.8303487369249 | etot = -15.8305328393334 +318000 ekin = 2.31418145055206 | erot = 3.02858542885927 | epot = -21.9347898317926 | etot = -16.5920229523813 +319000 ekin = 2.35032973997068 | erot = 3.16078759112674 | epot = -22.0387665246751 | etot = -16.5276491935776 +320000 ekin = 1.78202525445684 | erot = 2.83297321443624 | epot = -22.1187616541783 | etot = -17.5037631852852 +321000 ekin = 2.87441941784728 | erot = 2.26223197636944 | epot = -22.1065455913123 | etot = -16.9698941970956 +322000 ekin = 2.79013397204362 | erot = 2.68769432639935 | epot = -22.1121405540937 | etot = -16.6343122556507 +323000 ekin = 2.070121980457 | erot = 2.31830584817612 | epot = -22.1539458855415 | etot = -17.7655180569083 +324000 ekin = 2.58383941134683 | erot = 2.58296807603305 | epot = -22.1539753505051 | etot = -16.9871678631253 +325000 ekin = 3.43451304817783 | erot = 2.45405386180802 | epot = -21.938960387404 | etot = -16.0503934774181 +326000 ekin = 3.49680929786584 | erot = 2.85196633398113 | epot = -21.8204400999953 | etot = -15.4716644681484 +327000 ekin = 2.68799300805475 | erot = 2.21805195956654 | epot = -21.7892073548558 | etot = -16.8831623872345 +328000 ekin = 1.81477491971657 | erot = 2.35891534842888 | epot = -21.7275637950057 | etot = -17.5538735268602 +329000 ekin = 2.19319322627006 | erot = 2.40717958919081 | epot = -21.6826095784948 | etot = -17.0822367630339 +330000 ekin = 1.87131927244382 | erot = 2.03694340108429 | epot = -21.5934239674847 | etot = -17.6851612939566 +331000 ekin = 2.37197683084608 | erot = 1.80087022346348 | epot = -21.5641185835514 | etot = -17.3912715292419 +332000 ekin = 1.69601394569048 | erot = 2.54947032294377 | epot = -21.5986464339748 | etot = -17.3531621653406 +333000 ekin = 1.59867443991714 | erot = 2.14911483871162 | epot = -21.7162173059518 | etot = -17.9684280273231 +334000 ekin = 2.25811733625553 | erot = 2.62323988136568 | epot = -21.7749416190679 | etot = -16.8935844014467 +335000 ekin = 2.93433632601273 | erot = 3.10350297573268 | epot = -21.7966831809595 | etot = -15.7588438792141 +336000 ekin = 2.76337640462581 | erot = 2.54930710489019 | epot = -21.7180312833467 | etot = -16.4053477738307 +337000 ekin = 3.19235531401951 | erot = 3.87146146874103 | epot = -21.8022396262892 | etot = -14.7384228435286 +338000 ekin = 2.33305125173566 | erot = 2.13094194678887 | epot = -21.8068682042896 | etot = -17.3428750057651 +339000 ekin = 1.71673308889604 | erot = 2.30964121170968 | epot = -21.7941224580796 | etot = -17.7677481574739 +340000 ekin = 1.59424151294027 | erot = 3.16324993863714 | epot = -21.7679173396748 | etot = -17.0104258880973 +341000 ekin = 1.69465464335694 | erot = 3.18694861883744 | epot = -21.7067352043109 | etot = -16.8251319421165 +342000 ekin = 1.81243763026219 | erot = 2.60448215582795 | epot = -21.5993126794634 | etot = -17.1823928933732 +343000 ekin = 3.08243814047349 | erot = 2.9217466333323 | epot = -21.5855979229594 | etot = -15.5814131491536 +344000 ekin = 2.94964594107348 | erot = 3.10231272046816 | epot = -21.5506154266351 | etot = -15.4986567650935 +345000 ekin = 2.34525111670595 | erot = 2.88045261854212 | epot = -21.530734043011 | etot = -16.3050303077629 +346000 ekin = 2.03136740406842 | erot = 3.44352096435563 | epot = -21.4703041890966 | etot = -15.9954158206726 +347000 ekin = 2.34515762081498 | erot = 1.91414074840886 | epot = -21.3488386855954 | etot = -17.0895403163716 +348000 ekin = 2.76763212340836 | erot = 2.78035348102326 | epot = -21.3102796687364 | etot = -15.7622940643048 +349000 ekin = 2.29342234253801 | erot = 3.14526664575919 | epot = -21.3922932631024 | etot = -15.9536042748052 +350000 ekin = 2.17828641691343 | erot = 2.38211689163937 | epot = -21.3570978647003 | etot = -16.7966945561475 +351000 ekin = 2.2787342054874 | erot = 2.85568682453813 | epot = -21.3165609660186 | etot = -16.182139935993 +352000 ekin = 2.70894563927919 | erot = 2.77656375044279 | epot = -21.3565059314145 | etot = -15.8709965416925 +353000 ekin = 1.74748047732915 | erot = 2.14191122851256 | epot = -21.3195625770357 | etot = -17.430170871194 +354000 ekin = 2.30492780756568 | erot = 2.37159952583724 | epot = -21.3742968901642 | etot = -16.6977695567612 +355000 ekin = 2.32493886573112 | erot = 2.38411746089983 | epot = -21.339340741587 | etot = -16.6302844149561 +356000 ekin = 2.9749649543268 | erot = 2.9916655517553 | epot = -21.2468948072712 | etot = -15.2802643011891 +357000 ekin = 1.79541671946026 | erot = 2.13971792108731 | epot = -21.2216819829681 | etot = -17.2865473424205 +358000 ekin = 2.06637919290965 | erot = 1.9076530715578 | epot = -21.2447441674953 | etot = -17.2707119030278 +359000 ekin = 2.02344077580052 | erot = 2.11726163321539 | epot = -21.2183688961264 | etot = -17.0776664871105 +360000 ekin = 2.64012587839158 | erot = 2.43776362828977 | epot = -21.1472477161847 | etot = -16.0693582095033 +361000 ekin = 2.41850555983882 | erot = 2.39054736245265 | epot = -21.2133787743639 | etot = -16.4043258520724 +362000 ekin = 2.2486199222758 | erot = 2.04489136793498 | epot = -21.2088914287919 | etot = -16.9153801385811 +363000 ekin = 3.21904252076974 | erot = 1.79717950163013 | epot = -21.2620537293498 | etot = -16.24583170695 +364000 ekin = 2.9845697448498 | erot = 2.18316673460243 | epot = -21.2883338312843 | etot = -16.120597351832 +365000 ekin = 2.49427392981412 | erot = 2.31205455481896 | epot = -21.4001153296815 | etot = -16.5937868450484 +366000 ekin = 2.61706523565788 | erot = 2.20229130507574 | epot = -21.4506718008962 | etot = -16.6313152601626 +367000 ekin = 2.24650816549397 | erot = 1.87906237362998 | epot = -21.5207044850599 | etot = -17.3951339459359 +368000 ekin = 2.46672276241562 | erot = 2.37638546053105 | epot = -21.5628581383216 | etot = -16.7197499153749 +369000 ekin = 2.03614635149851 | erot = 2.85426887707092 | epot = -21.6803034764487 | etot = -16.7898882478793 +370000 ekin = 2.13410724028005 | erot = 2.17304603842012 | epot = -21.7343761700058 | etot = -17.4272228913057 +371000 ekin = 2.21722409826115 | erot = 2.11058746733929 | epot = -21.6422617131998 | etot = -17.3144501475994 +372000 ekin = 1.88083333566673 | erot = 1.90617172826127 | epot = -21.6005499693118 | etot = -17.8135449053838 +373000 ekin = 1.98298204516521 | erot = 1.78267682128409 | epot = -21.5708808628646 | etot = -17.8052219964153 +374000 ekin = 2.88981201933268 | erot = 1.90326894499807 | epot = -21.4624711307906 | etot = -16.6693901664599 +375000 ekin = 2.31951869092549 | erot = 1.92779670517485 | epot = -21.3521768069862 | etot = -17.1048614108859 +376000 ekin = 2.60113015271722 | erot = 2.31181306588444 | epot = -21.34681055463 | etot = -16.4338673360283 +377000 ekin = 2.23867315344604 | erot = 1.65923992926403 | epot = -21.2611852709131 | etot = -17.363272188203 +378000 ekin = 2.38125181613766 | erot = 2.54002618279121 | epot = -21.2390275318703 | etot = -16.3177495329414 +379000 ekin = 2.06952281308678 | erot = 2.11888196225292 | epot = -21.194025606577 | etot = -17.0056208312373 +380000 ekin = 2.59961269461524 | erot = 2.3751200788503 | epot = -21.1885781090515 | etot = -16.2138453355859 +381000 ekin = 2.42019573552876 | erot = 2.20667402504614 | epot = -21.1989968748535 | etot = -16.5721271142786 +382000 ekin = 2.04746564398744 | erot = 3.34439482672214 | epot = -21.2903574441545 | etot = -15.8984969734449 +383000 ekin = 2.65699216362738 | erot = 1.56546061375907 | epot = -21.3572338418187 | etot = -17.1347810644322 +384000 ekin = 2.43156675693926 | erot = 2.00097327452753 | epot = -21.3434156392382 | etot = -16.9108756077714 +385000 ekin = 1.95152101616516 | erot = 3.28345377140313 | epot = -21.4173973675698 | etot = -16.1824225800015 +386000 ekin = 2.10919215730741 | erot = 2.90700736383436 | epot = -21.3963452767614 | etot = -16.3801457556197 +387000 ekin = 2.34448447096483 | erot = 2.50155013212484 | epot = -21.3487258248084 | etot = -16.5026912217187 +388000 ekin = 2.71771591111729 | erot = 2.76803950274557 | epot = -21.3515918112166 | etot = -15.8658363973537 +389000 ekin = 3.06825183100775 | erot = 3.06148533146046 | epot = -21.4826430036711 | etot = -15.3529058412029 +390000 ekin = 2.56997560639923 | erot = 2.05646161654304 | epot = -21.5623801506968 | etot = -16.9359429277546 +391000 ekin = 2.1110114400687 | erot = 2.44612603817531 | epot = -21.6052888202632 | etot = -17.0481513420191 +392000 ekin = 2.58328475785099 | erot = 2.75249392862464 | epot = -21.7336094646938 | etot = -16.3978307782182 +393000 ekin = 2.03977041996533 | erot = 1.67448219405536 | epot = -21.8740604202474 | etot = -18.1598078062267 +394000 ekin = 2.1229408356241 | erot = 2.43410977254954 | epot = -21.9094739378951 | etot = -17.3524233297214 +395000 ekin = 2.48696003315341 | erot = 2.48225062557349 | epot = -21.8799685903484 | etot = -16.9107579316215 +396000 ekin = 3.18909661029635 | erot = 1.62675064803775 | epot = -21.8520000277039 | etot = -17.0361527693698 +397000 ekin = 2.39161566907255 | erot = 2.17052346752458 | epot = -21.7939512244376 | etot = -17.2318120878404 +398000 ekin = 2.29946433742664 | erot = 2.18115834594542 | epot = -21.7285069861955 | etot = -17.2478843028235 +399000 ekin = 2.65449075133045 | erot = 2.80318185995816 | epot = -21.6503181327212 | etot = -16.1926455214325 +400000 ekin = 1.800915604111 | erot = 2.76596769548035 | epot = -21.6418619272709 | etot = -17.0749786276795 +401000 ekin = 2.35073130822393 | erot = 3.1229922205774 | epot = -21.6675586342212 | etot = -16.1938351054199 +402000 ekin = 3.95550191914708 | erot = 3.58855023837881 | epot = -21.5840051268208 | etot = -14.0399529692949 +403000 ekin = 3.59615502379622 | erot = 3.44558176696768 | epot = -21.5781150073617 | etot = -14.5363782165978 +404000 ekin = 2.50360365952137 | erot = 3.01285184176069 | epot = -21.6258060641303 | etot = -16.1093505628483 +405000 ekin = 2.77241560720113 | erot = 3.10596549510783 | epot = -21.704678917892 | etot = -15.826297815583 +406000 ekin = 2.33934923007339 | erot = 2.04671975867729 | epot = -21.819104286388 | etot = -17.4330352976373 +407000 ekin = 2.34277955096234 | erot = 1.89301717692526 | epot = -21.8450916691373 | etot = -17.6092949412497 +408000 ekin = 1.91561948833426 | erot = 2.19551604353608 | epot = -21.8744041835349 | etot = -17.7632686516646 +409000 ekin = 1.98819074442449 | erot = 1.93870533007334 | epot = -21.921903026697 | etot = -17.9950069521992 +410000 ekin = 1.59047218684375 | erot = 1.93259851333214 | epot = -21.969890787558 | etot = -18.4468200873821 +411000 ekin = 1.88305362601542 | erot = 2.47249081001963 | epot = -22.0985208042931 | etot = -17.742976368258 +412000 ekin = 2.51301623282815 | erot = 2.67550740966365 | epot = -22.2078537029906 | etot = -17.0193300604988 +413000 ekin = 2.81407439938451 | erot = 3.21402559358062 | epot = -22.1310120840187 | etot = -16.1029120910536 +414000 ekin = 2.79247479268938 | erot = 2.73425265524033 | epot = -22.0977113063587 | etot = -16.570983858429 +415000 ekin = 2.47916660937974 | erot = 2.2538291443672 | epot = -22.1646477745644 | etot = -17.4316520208175 +416000 ekin = 3.33232223339091 | erot = 1.56386062957 | epot = -22.1461937000839 | etot = -17.250010837123 +417000 ekin = 3.95877285814837 | erot = 2.43917045295873 | epot = -22.0789469190762 | etot = -15.6810036079691 +418000 ekin = 2.77978041892218 | erot = 2.67961998913593 | epot = -21.9429456651673 | etot = -16.4835452571092 +419000 ekin = 2.38024484823696 | erot = 2.99229133054455 | epot = -21.8677152868896 | etot = -16.4951791081081 +420000 ekin = 1.80871194953159 | erot = 1.84151089264678 | epot = -21.8596865313185 | etot = -18.2094636891401 +421000 ekin = 1.25971024821532 | erot = 1.84154088985399 | epot = -21.8144945739243 | etot = -18.713243435855 +422000 ekin = 1.38801644153196 | erot = 2.76287955544763 | epot = -21.9448046693442 | etot = -17.7939086723646 +423000 ekin = 1.61378102360038 | erot = 3.08643589903684 | epot = -21.9876910184367 | etot = -17.2874740957995 +424000 ekin = 2.38187559636676 | erot = 2.03497345340564 | epot = -22.0529622043822 | etot = -17.6361131546098 +425000 ekin = 2.30172600419957 | erot = 2.56124787306544 | epot = -22.0909144547264 | etot = -17.2279405774613 +426000 ekin = 2.08135734353848 | erot = 3.11029155110106 | epot = -22.0318884881515 | etot = -16.8402395935119 +427000 ekin = 2.14905284759742 | erot = 2.44063059706749 | epot = -21.9221859408584 | etot = -17.3325024961935 +428000 ekin = 1.77884336055357 | erot = 1.65616500997461 | epot = -21.9003025672496 | etot = -18.4652941967214 +429000 ekin = 1.64634843235491 | erot = 2.54977814749917 | epot = -21.8505053104909 | etot = -17.6543787306368 +430000 ekin = 2.66566369380165 | erot = 2.85826638798746 | epot = -21.8749831872768 | etot = -16.3510531054877 +431000 ekin = 2.77262842672213 | erot = 1.57008239418362 | epot = -21.8682859290024 | etot = -17.5255751080967 +432000 ekin = 2.55459213758159 | erot = 1.62943387255927 | epot = -21.8357562133881 | etot = -17.6517302032472 +433000 ekin = 1.99645419170627 | erot = 2.46386731011038 | epot = -21.9426115259012 | etot = -17.4822900240846 +434000 ekin = 3.03855037499723 | erot = 2.70114732868002 | epot = -22.0521183162706 | etot = -16.3124206125934 +435000 ekin = 3.56249359412514 | erot = 1.3916907800745 | epot = -22.1907087359577 | etot = -17.236524361758 +436000 ekin = 2.9919519436941 | erot = 2.00780906096746 | epot = -22.1944569501235 | etot = -17.194695945462 +437000 ekin = 3.22983002449305 | erot = 1.78457838368284 | epot = -22.2079862630257 | etot = -17.1935778548498 +438000 ekin = 2.89357954274282 | erot = 1.84712438388029 | epot = -22.1640149633625 | etot = -17.4233110367394 +439000 ekin = 2.43548109922482 | erot = 2.69725667220989 | epot = -22.15552566419 | etot = -17.0227878927552 +440000 ekin = 2.2623759777343 | erot = 3.0053291392984 | epot = -22.1911581748161 | etot = -16.9234530577834 +441000 ekin = 2.91169601545459 | erot = 2.87109172357543 | epot = -22.3349024428918 | etot = -16.5521147038618 +442000 ekin = 2.09099397022228 | erot = 1.73520313922453 | epot = -22.4051258365299 | etot = -18.5789287270831 +443000 ekin = 1.89190436364779 | erot = 2.00338805773041 | epot = -22.4571595679749 | etot = -18.5618671465967 +444000 ekin = 2.07260612589383 | erot = 2.15261859961606 | epot = -22.4762155543905 | etot = -18.2509908288806 +445000 ekin = 2.10794043544074 | erot = 2.27849500108989 | epot = -22.5289113655649 | etot = -18.1424759290343 +446000 ekin = 2.43249129570082 | erot = 2.85798785841701 | epot = -22.5578450371516 | etot = -17.2673658830337 +447000 ekin = 2.18427449291498 | erot = 2.99487058702881 | epot = -22.633209665243 | etot = -17.4540645852992 +448000 ekin = 2.33125251154888 | erot = 2.9537271150568 | epot = -22.6544934614541 | etot = -17.3695138348484 +449000 ekin = 2.34830834177129 | erot = 2.93433423081578 | epot = -22.6524261630772 | etot = -17.3697835904901 +450000 ekin = 1.83059864091627 | erot = 1.69583085832556 | epot = -22.5959718193007 | etot = -19.0695423200588 +451000 ekin = 1.97008420530444 | erot = 1.93005789483906 | epot = -22.6042016377466 | etot = -18.7040595376031 +452000 ekin = 1.36031716300771 | erot = 1.88416646481667 | epot = -22.5654500281941 | etot = -19.3209664003698 +453000 ekin = 2.08394677326601 | erot = 2.55637003071468 | epot = -22.3996731437447 | etot = -17.759356339764 +454000 ekin = 1.46122132979162 | erot = 2.1932504558799 | epot = -22.2559783518549 | etot = -18.6015065661834 +455000 ekin = 1.66159562683808 | erot = 2.72214658377912 | epot = -22.1100881227337 | etot = -17.7263459121165 +456000 ekin = 2.35139002285135 | erot = 1.99736695780608 | epot = -22.0265180206658 | etot = -17.6777610400084 +457000 ekin = 2.02337666353787 | erot = 2.36288174917835 | epot = -21.9870419865869 | etot = -17.6007835738707 +458000 ekin = 1.74388716034853 | erot = 2.25704341258625 | epot = -22.0124765184275 | etot = -18.0115459454927 +459000 ekin = 2.51302694941202 | erot = 2.31610812350976 | epot = -22.0905335599533 | etot = -17.2613984870315 +460000 ekin = 2.20235980851235 | erot = 2.00073208070752 | epot = -22.0624281815267 | etot = -17.8593362923069 +461000 ekin = 2.27697813860512 | erot = 2.92153186175593 | epot = -22.0043780203814 | etot = -16.8058680200203 +462000 ekin = 2.61751250591993 | erot = 1.79446367088042 | epot = -22.034566251344 | etot = -17.6225900745436 +463000 ekin = 2.59076396942114 | erot = 3.29959067151568 | epot = -21.9680597931617 | etot = -16.0777051522249 +464000 ekin = 2.18897688760924 | erot = 2.37342380725927 | epot = -21.9014176363544 | etot = -17.3390169414859 +465000 ekin = 2.55336811292171 | erot = 3.60208553232432 | epot = -21.8218243406516 | etot = -15.6663706954055 +466000 ekin = 1.98087073364117 | erot = 2.88377492118972 | epot = -21.8240279062597 | etot = -16.9593822514288 +467000 ekin = 1.63963444033068 | erot = 2.61720118783829 | epot = -21.9072568806945 | etot = -17.6504212525255 +468000 ekin = 1.11353612829142 | erot = 3.36362638075105 | epot = -21.9675488944805 | etot = -17.490386385438 +469000 ekin = 1.72228182007047 | erot = 2.77659856111655 | epot = -21.9967286251288 | etot = -17.4978482439417 +470000 ekin = 1.86957223270987 | erot = 2.88200736733016 | epot = -22.0532435258199 | etot = -17.3016639257798 +471000 ekin = 2.73889257490363 | erot = 2.33805868565127 | epot = -22.1018048913227 | etot = -17.0248536307678 +472000 ekin = 2.69336835751318 | erot = 2.14497398823592 | epot = -22.1783319655624 | etot = -17.3399896198133 +473000 ekin = 2.2834012228809 | erot = 2.08779065134065 | epot = -22.2062566289287 | etot = -17.8350647547071 +474000 ekin = 2.23753393343421 | erot = 2.18021358366907 | epot = -22.2186470965394 | etot = -17.8008995794361 +475000 ekin = 2.52144972759887 | erot = 2.10742888877791 | epot = -22.2200376200674 | etot = -17.5911590036907 +476000 ekin = 2.21750839437398 | erot = 1.76993465858266 | epot = -22.1228407781581 | etot = -18.1353977252014 +477000 ekin = 2.49639604606981 | erot = 2.38997154938614 | epot = -22.0914213950017 | etot = -17.2050537995458 +478000 ekin = 1.92476411077776 | erot = 2.05068061613981 | epot = -22.1165013146126 | etot = -18.141056587695 +479000 ekin = 2.27814065534966 | erot = 3.09902158675158 | epot = -22.1039609371193 | etot = -16.726798695018 +480000 ekin = 1.67684718675217 | erot = 2.75298455656157 | epot = -22.107572084908 | etot = -17.6777403415942 +481000 ekin = 1.82004035403442 | erot = 2.94243611851488 | epot = -22.0570042571709 | etot = -17.2945277846216 +482000 ekin = 2.15620792762657 | erot = 2.07225318674483 | epot = -22.0195504604851 | etot = -17.7910893461137 +483000 ekin = 1.49597937205778 | erot = 1.99748154603235 | epot = -21.9846691787552 | etot = -18.4912082606651 +484000 ekin = 1.84801031899852 | erot = 2.3383930614213 | epot = -22.057622803598 | etot = -17.8712194231781 +485000 ekin = 1.63994449952444 | erot = 2.49474020960602 | epot = -22.0873319631203 | etot = -17.9526472539898 +486000 ekin = 1.86878710017944 | erot = 2.15121977781065 | epot = -22.0738722433192 | etot = -18.0538653653291 +487000 ekin = 2.36575535267025 | erot = 3.10125401276719 | epot = -22.1449283981519 | etot = -16.6779190327145 +488000 ekin = 2.28442246943194 | erot = 3.25683393002513 | epot = -22.0988506325681 | etot = -16.557594233111 +489000 ekin = 2.42271484675 | erot = 2.54542145912102 | epot = -22.0089541135478 | etot = -17.0408178076768 +490000 ekin = 2.15700463004959 | erot = 3.54046810332719 | epot = -21.9046622319151 | etot = -16.2071894985383 +491000 ekin = 2.21877065503535 | erot = 2.48745097433189 | epot = -21.7908019627883 | etot = -17.084580333421 +492000 ekin = 2.42517437413502 | erot = 2.76311171529555 | epot = -21.7601749752715 | etot = -16.5718888858409 +493000 ekin = 1.78704503482097 | erot = 2.27560531894265 | epot = -21.8193757259442 | etot = -17.7567253721806 +494000 ekin = 2.08676036701357 | erot = 2.99995787427429 | epot = -21.8611051542237 | etot = -16.7743869129358 +495000 ekin = 2.13526814465422 | erot = 2.49327519100043 | epot = -21.9512664264056 | etot = -17.322723090751 +496000 ekin = 2.04396376951351 | erot = 2.616205394925 | epot = -21.9926597066748 | etot = -17.3324905422363 +497000 ekin = 2.5138400992253 | erot = 1.7082513952147 | epot = -21.9316573881385 | etot = -17.7095658936985 +498000 ekin = 2.15599563393455 | erot = 1.7954584756616 | epot = -21.8684844569259 | etot = -17.9170303473298 +499000 ekin = 3.01748439271979 | erot = 1.75754764004202 | epot = -21.8933218662966 | etot = -17.1182898335348 +500000 ekin = 2.75260982901106 | erot = 2.51842805388796 | epot = -21.8943946135574 | etot = -16.6233567306584 +501000 ekin = 2.67931288903133 | erot = 3.01160406637169 | epot = -21.7750232065095 | etot = -16.0841062511065 +502000 ekin = 1.89360306182664 | erot = 3.89791941021244 | epot = -21.6573468922303 | etot = -15.8658244201912 +503000 ekin = 1.79321931974651 | erot = 2.94204976962205 | epot = -21.4684952360274 | etot = -16.7332261466588 +504000 ekin = 1.67757593959819 | erot = 3.03667519772553 | epot = -21.3740498051044 | etot = -16.6597986677806 +505000 ekin = 2.71879314198246 | erot = 2.13553052885653 | epot = -21.3748517524097 | etot = -16.5205280815707 +506000 ekin = 2.26416011641767 | erot = 2.0398390357387 | epot = -21.3744734731022 | etot = -17.0704743209458 +507000 ekin = 3.1361217829786 | erot = 2.43598082432092 | epot = -21.4637546760327 | etot = -15.8916520687332 +508000 ekin = 2.50986106907072 | erot = 2.54739392181407 | epot = -21.6231060681634 | etot = -16.5658510772786 +509000 ekin = 2.11468804004737 | erot = 2.82565642150503 | epot = -21.7737120459513 | etot = -16.8333675843989 +510000 ekin = 2.15001055304937 | erot = 1.42727017491937 | epot = -21.8417870574445 | etot = -18.2645063294758 +511000 ekin = 2.52545394756595 | erot = 2.75161712587392 | epot = -21.9086876613652 | etot = -16.6316165879253 +512000 ekin = 2.30866784309731 | erot = 2.74554976662385 | epot = -21.9096028664776 | etot = -16.8553852567564 +513000 ekin = 2.48902345599678 | erot = 2.14823762928075 | epot = -21.8729373600799 | etot = -17.2356762748023 +514000 ekin = 2.80071109914887 | erot = 2.54489890263222 | epot = -22.0260959105663 | etot = -16.6804859087852 +515000 ekin = 2.54951114466539 | erot = 1.81830545608794 | epot = -22.1182236024141 | etot = -17.7504070016608 +516000 ekin = 2.82429114749713 | erot = 2.22223190254033 | epot = -22.2027443448738 | etot = -17.1562212948364 +517000 ekin = 2.0440652856654 | erot = 2.05268379810237 | epot = -22.2270328001489 | etot = -18.1302837163811 +518000 ekin = 2.19098614618396 | erot = 2.7523349010516 | epot = -22.2209877154936 | etot = -17.2776666682581 +519000 ekin = 2.24036502705842 | erot = 2.22532553600967 | epot = -22.3180679614818 | etot = -17.8523773984137 +520000 ekin = 1.89058003919379 | erot = 2.20041260684313 | epot = -22.4024099853452 | etot = -18.3114173393082 +521000 ekin = 2.59235690452872 | erot = 1.87867658572832 | epot = -22.562076955749 | etot = -18.0910434654919 +522000 ekin = 3.47612340255834 | erot = 1.7709131526267 | epot = -22.6560013672146 | etot = -17.4089648120295 +523000 ekin = 2.8697331156896 | erot = 2.45931135481363 | epot = -22.7015468187877 | etot = -17.3725023482845 +524000 ekin = 2.43256318748704 | erot = 2.35726786724124 | epot = -22.6382055947878 | etot = -17.8483745400596 +525000 ekin = 1.5862220801759 | erot = 2.67712917770356 | epot = -22.6016118927226 | etot = -18.3382606348432 +526000 ekin = 1.68941966580457 | erot = 1.5638733848976 | epot = -22.5489288531345 | etot = -19.2956358024323 +527000 ekin = 2.25322718958956 | erot = 1.91908592764601 | epot = -22.4417549635527 | etot = -18.2694418463171 +528000 ekin = 2.66412422381676 | erot = 2.81704928468163 | epot = -22.4249217233809 | etot = -16.9437482148825 +529000 ekin = 2.68379060052796 | erot = 3.01205280488721 | epot = -22.4295574265689 | etot = -16.7337140211537 +530000 ekin = 2.58073227215729 | erot = 2.12870295195894 | epot = -22.2883086480464 | etot = -17.5788734239302 +531000 ekin = 2.96770457160389 | erot = 2.35391742452841 | epot = -22.1856711738739 | etot = -16.8640491777416 +532000 ekin = 2.56038964370913 | erot = 2.30878740571672 | epot = -22.1997799918585 | etot = -17.3306029424327 +533000 ekin = 2.47143825522096 | erot = 2.96338918263318 | epot = -22.2065233272061 | etot = -16.7716958893519 +534000 ekin = 2.10112886915673 | erot = 2.06170735341251 | epot = -22.2366529232829 | etot = -18.0738167007137 +535000 ekin = 3.76894732289841 | erot = 2.64646203076619 | epot = -22.2276744548843 | etot = -15.8122651012197 +536000 ekin = 2.7696162230836 | erot = 1.95805234771211 | epot = -22.1654529173378 | etot = -17.4377843465421 +537000 ekin = 2.84154244437419 | erot = 2.62704512023094 | epot = -22.0849688339382 | etot = -16.6163812693331 +538000 ekin = 2.68442563578381 | erot = 2.11441739965432 | epot = -22.0125688846837 | etot = -17.2137258492456 +539000 ekin = 2.71421145807769 | erot = 2.40915133591281 | epot = -22.1313332530722 | etot = -17.0079704590817 +540000 ekin = 2.43518407250594 | erot = 2.49363815768251 | epot = -22.2749632551308 | etot = -17.3461410249423 +541000 ekin = 3.40444579850308 | erot = 2.79359613706622 | epot = -22.3466180642397 | etot = -16.1485761286704 +542000 ekin = 2.43275262454037 | erot = 2.8926712949891 | epot = -22.3556133688796 | etot = -17.0301894493501 +543000 ekin = 2.33375802900842 | erot = 2.87822266703542 | epot = -22.354503031092 | etot = -17.1425223350481 +544000 ekin = 2.20372430185484 | erot = 1.45976141003991 | epot = -22.3227611685585 | etot = -18.6592754566638 +545000 ekin = 2.44172510086271 | erot = 2.14426798374485 | epot = -22.3064237448696 | etot = -17.720430660262 +546000 ekin = 1.97339115566054 | erot = 2.22847557914697 | epot = -22.2636677476263 | etot = -18.0618010128188 +547000 ekin = 2.54002001617723 | erot = 1.88945501268906 | epot = -22.2158143598027 | etot = -17.7863393309365 +548000 ekin = 1.68526456618955 | erot = 1.65049155866197 | epot = -22.1214578510425 | etot = -18.785701726191 +549000 ekin = 1.87014690614356 | erot = 2.68376307045224 | epot = -22.3040985050477 | etot = -17.7501885284519 +550000 ekin = 1.81229877740871 | erot = 1.59166644509217 | epot = -22.4560870327802 | etot = -19.0521218102793 +551000 ekin = 2.18773128797504 | erot = 2.27087388044657 | epot = -22.5158361799812 | etot = -18.0572310115596 +552000 ekin = 2.05249497087455 | erot = 2.50761265901319 | epot = -22.5719393540102 | etot = -18.0118317241225 +553000 ekin = 2.95454924363313 | erot = 2.14558063826841 | epot = -22.6616695566088 | etot = -17.5615396747072 +554000 ekin = 2.82907288726943 | erot = 1.93583607418193 | epot = -22.8114472173086 | etot = -18.0465382558572 +555000 ekin = 2.39144194814065 | erot = 2.2690346714923 | epot = -22.8607776699892 | etot = -18.2003010503562 +556000 ekin = 2.29377130416531 | erot = 2.58082229477443 | epot = -22.9123559572369 | etot = -18.0377623582971 +557000 ekin = 2.83942594504113 | erot = 1.46630323732685 | epot = -22.9955247836668 | etot = -18.6897956012988 +558000 ekin = 2.74466783679159 | erot = 2.01704787654692 | epot = -23.0269943374553 | etot = -18.2652786241168 +559000 ekin = 3.32013685758138 | erot = 2.33070588278053 | epot = -23.0724440783111 | etot = -17.4216013379492 +560000 ekin = 3.06575014862304 | erot = 2.3240772361437 | epot = -23.058452120381 | etot = -17.6686247356143 +561000 ekin = 2.86678914129224 | erot = 2.08494050984238 | epot = -22.9757329649367 | etot = -18.0240033138021 +562000 ekin = 3.27279507804287 | erot = 2.51484206553918 | epot = -22.8763400547029 | etot = -17.0887029111208 +563000 ekin = 2.66038070150058 | erot = 1.64116530766161 | epot = -22.8496252506975 | etot = -18.5480792415353 +564000 ekin = 2.80463843262516 | erot = 2.5266606313835 | epot = -22.8040898690867 | etot = -17.4727908050781 +565000 ekin = 2.64623234011006 | erot = 2.04560086917498 | epot = -22.7528472206811 | etot = -18.061014011396 +566000 ekin = 2.31861442156789 | erot = 2.17941765713979 | epot = -22.7559143900141 | etot = -18.2578823113064 +567000 ekin = 1.93226018038665 | erot = 2.82020539323088 | epot = -22.7113049006743 | etot = -17.9588393270567 +568000 ekin = 2.20139908423163 | erot = 2.2173471641442 | epot = -22.7309883250972 | etot = -18.3122420767214 +569000 ekin = 2.47190977966691 | erot = 2.65968832242268 | epot = -22.6724326928842 | etot = -17.5408345907946 +570000 ekin = 2.43697670060318 | erot = 1.88669477532771 | epot = -22.6652860601546 | etot = -18.3416145842237 +571000 ekin = 2.89014026085716 | erot = 2.95617526869999 | epot = -22.6585089246084 | etot = -16.8121933950513 +572000 ekin = 1.93596118948626 | erot = 3.77290573984751 | epot = -22.617986049283 | etot = -16.9091191199493 +573000 ekin = 2.4045463471171 | erot = 2.31316721466246 | epot = -22.5941857447927 | etot = -17.8764721830131 +574000 ekin = 1.69171540489496 | erot = 2.32939319863948 | epot = -22.6485181547002 | etot = -18.6274095511658 +575000 ekin = 1.84147438222145 | erot = 1.86451086977537 | epot = -22.7257563443532 | etot = -19.0197710923563 +576000 ekin = 3.22125710715105 | erot = 2.95826776175095 | epot = -22.6735851458116 | etot = -16.4940602769096 +577000 ekin = 2.86653117003728 | erot = 2.88010628292138 | epot = -22.6061554079341 | etot = -16.8595179549754 +578000 ekin = 2.38032268318987 | erot = 2.76710196021751 | epot = -22.4015577816723 | etot = -17.2541331382649 +579000 ekin = 2.40088404436444 | erot = 1.99411758494037 | epot = -22.2441807849414 | etot = -17.8491791556366 +580000 ekin = 2.62022193893445 | erot = 1.97772953708398 | epot = -22.0981459564787 | etot = -17.5001944804602 +581000 ekin = 2.04609920382364 | erot = 3.0202197191752 | epot = -21.9713515823037 | etot = -16.9050326593048 +582000 ekin = 2.17556767215606 | erot = 3.10885810822424 | epot = -21.8451828402321 | etot = -16.5607570598518 +583000 ekin = 2.12792577884129 | erot = 2.7142175246668 | epot = -21.8090540347999 | etot = -16.9669107312918 +584000 ekin = 2.99197492146328 | erot = 2.6185428756741 | epot = -21.8014711662179 | etot = -16.1909533690805 +585000 ekin = 2.41600413666429 | erot = 2.49968403996098 | epot = -21.7582079751419 | etot = -16.8425197985166 +586000 ekin = 3.57880609498067 | erot = 1.99026777936244 | epot = -21.7793800190221 | etot = -16.210306144679 +587000 ekin = 3.53569318795882 | erot = 1.96660845702856 | epot = -21.7574182658133 | etot = -16.255116620826 +588000 ekin = 2.80385841316338 | erot = 1.58927534150911 | epot = -21.7290695763864 | etot = -17.3359358217139 +589000 ekin = 2.31178332958482 | erot = 2.19605556561577 | epot = -21.7771889269559 | etot = -17.2693500317553 +590000 ekin = 2.57159955455667 | erot = 1.71441305781987 | epot = -21.7801644206484 | etot = -17.4941518082718 +591000 ekin = 1.90027597697965 | erot = 3.80794292513097 | epot = -21.8693595444135 | etot = -16.1611406423028 +592000 ekin = 2.10287592275467 | erot = 2.85572724854609 | epot = -21.913245820329 | etot = -16.9546426490283 +593000 ekin = 1.6630679389305 | erot = 2.45937970675131 | epot = -21.9499391362603 | etot = -17.8274914905785 +594000 ekin = 1.85147249869391 | erot = 2.37596539021724 | epot = -22.0748010854883 | etot = -17.8473631965771 +595000 ekin = 1.62801913987931 | erot = 2.13760745860405 | epot = -22.2650343535207 | etot = -18.4994077550374 +596000 ekin = 1.8507787756783 | erot = 1.55277904845736 | epot = -22.3618759263936 | etot = -18.9583181022579 +597000 ekin = 2.21873580046471 | erot = 2.31247364510899 | epot = -22.4218283315557 | etot = -17.890618885982 +598000 ekin = 1.87152940931079 | erot = 3.02770945247868 | epot = -22.4928956008977 | etot = -17.5936567391082 +599000 ekin = 2.84160333456022 | erot = 2.19202304201413 | epot = -22.5210806388342 | etot = -17.4874542622599 +600000 ekin = 2.63824255094171 | erot = 2.13280883838531 | epot = -22.4361553764614 | etot = -17.6651039871344 +601000 ekin = 2.95991744971104 | erot = 3.20891387142304 | epot = -22.3089419175364 | etot = -16.1401105964023 +602000 ekin = 2.94287171911394 | erot = 2.6801544694314 | epot = -22.2205146380182 | etot = -16.5974884494729 +603000 ekin = 2.59651768027528 | erot = 2.70994674634417 | epot = -22.1626040385702 | etot = -16.8561396119508 +604000 ekin = 1.79237423166219 | erot = 2.11638057359598 | epot = -22.1934477586593 | etot = -18.2846929534011 +605000 ekin = 1.83068473031177 | erot = 2.2795743818689 | epot = -22.2254684973409 | etot = -18.1152093851602 +606000 ekin = 2.3318585405123 | erot = 2.19626289047853 | epot = -22.1692552740621 | etot = -17.6411338430713 +607000 ekin = 2.71184010988538 | erot = 2.97108975720824 | epot = -22.1536579122904 | etot = -16.4707280451968 +608000 ekin = 2.42009843612052 | erot = 2.41609650030392 | epot = -22.110570505977 | etot = -17.2743755695526 +609000 ekin = 1.88829617874732 | erot = 2.63290748875975 | epot = -21.9999822454274 | etot = -17.4787785779203 +610000 ekin = 3.00361337450473 | erot = 2.17709909276457 | epot = -21.9226199750059 | etot = -16.7419075077366 +611000 ekin = 2.45804405292799 | erot = 2.74756316868512 | epot = -21.9190479764513 | etot = -16.7134407548382 +612000 ekin = 2.52217588638913 | erot = 2.13391253924555 | epot = -21.9544188877756 | etot = -17.2983304621409 +613000 ekin = 3.03676008822021 | erot = 2.11841016157454 | epot = -22.0017416346015 | etot = -16.8465713848068 +614000 ekin = 2.28555718180926 | erot = 3.0054092802111 | epot = -22.0761965028491 | etot = -16.7852300408287 +615000 ekin = 1.68510287809685 | erot = 2.62386193001633 | epot = -22.0327006368424 | etot = -17.7237358287293 +616000 ekin = 1.93880828018173 | erot = 2.84237691352502 | epot = -22.0612297066235 | etot = -17.2800445129167 +617000 ekin = 2.16704933019324 | erot = 2.51662857724103 | epot = -22.0595683849495 | etot = -17.3758904775152 +618000 ekin = 3.09933970351517 | erot = 2.74545743402536 | epot = -22.0170483082271 | etot = -16.1722511706866 +619000 ekin = 3.43176670397203 | erot = 2.12195823326365 | epot = -21.9875785418916 | etot = -16.4338536046559 +620000 ekin = 4.28780554984769 | erot = 2.22709196760532 | epot = -21.9605251543896 | etot = -15.4456276369365 +621000 ekin = 3.08171244822519 | erot = 2.57159564010567 | epot = -21.9025163812385 | etot = -16.2492082929076 +622000 ekin = 2.7316886075754 | erot = 2.62820058118157 | epot = -21.8412338594045 | etot = -16.4813446706475 +623000 ekin = 2.85452079274903 | erot = 2.89943500147414 | epot = -21.6852443941174 | etot = -15.9312885998942 +624000 ekin = 2.03273271064347 | erot = 3.41737453659275 | epot = -21.5180611078538 | etot = -16.0679538606176 +625000 ekin = 2.93860287466086 | erot = 2.6777302302364 | epot = -21.3855450802948 | etot = -15.7692119753975 +626000 ekin = 2.62772208534213 | erot = 2.18165419852424 | epot = -21.3747765229082 | etot = -16.5654002390418 +627000 ekin = 2.31977818310487 | erot = 2.39484209061113 | epot = -21.4372090577008 | etot = -16.7225887839848 +628000 ekin = 2.22183190227213 | erot = 2.76412054255638 | epot = -21.5969078027883 | etot = -16.6109553579598 +629000 ekin = 2.21761787409423 | erot = 1.98066149405245 | epot = -21.7578561859453 | etot = -17.5595768177986 +630000 ekin = 2.47350494176362 | erot = 2.13931642231374 | epot = -21.7773766650218 | etot = -17.1645553009445 +631000 ekin = 2.05047278007876 | erot = 1.79296462014617 | epot = -21.7869475538217 | etot = -17.9435101535968 +632000 ekin = 1.64845667747476 | erot = 3.28396465847893 | epot = -21.8333012025329 | etot = -16.9008798665792 +633000 ekin = 2.3500132343185 | erot = 2.3390975332878 | epot = -21.9539301797825 | etot = -17.2648194121762 +634000 ekin = 2.35704893279043 | erot = 2.46483254513169 | epot = -22.0204072629832 | etot = -17.1985257850611 +635000 ekin = 1.98907577162676 | erot = 3.37071781675284 | epot = -22.0690924871448 | etot = -16.7092988987652 +636000 ekin = 2.50984196335062 | erot = 2.48688994533939 | epot = -22.0714906026256 | etot = -17.0747586939356 +637000 ekin = 2.77501317112847 | erot = 2.80709332215511 | epot = -21.9923972278242 | etot = -16.4102907345407 +638000 ekin = 2.43799129572064 | erot = 2.7900719850463 | epot = -22.0591413868446 | etot = -16.8310781060777 +639000 ekin = 1.88073995546173 | erot = 2.09679843998312 | epot = -22.0499554202513 | etot = -18.0724170248065 +640000 ekin = 2.08188045172846 | erot = 3.35894090591918 | epot = -21.9976614802368 | etot = -16.5568401225891 +641000 ekin = 2.09182367506332 | erot = 2.24091541077085 | epot = -22.0969663672431 | etot = -17.7642272814089 +642000 ekin = 2.29630816296813 | erot = 2.69496533496291 | epot = -22.1529742829376 | etot = -17.1617007850065 +643000 ekin = 2.73580847855276 | erot = 2.20074971448877 | epot = -22.0965451673466 | etot = -17.1599869743051 +644000 ekin = 2.877547382531 | erot = 3.41752705378106 | epot = -22.1314614085221 | etot = -15.8363869722101 +645000 ekin = 2.42917363330758 | erot = 2.10617126422418 | epot = -22.0684179655268 | etot = -17.533073067995 +646000 ekin = 2.69471397724187 | erot = 1.80009045225372 | epot = -21.8990804127739 | etot = -17.4042759832783 +647000 ekin = 2.47700110999565 | erot = 1.99221351689819 | epot = -21.6986646197608 | etot = -17.229449992867 +648000 ekin = 2.27330015032657 | erot = 1.67398094476719 | epot = -21.7984825454864 | etot = -17.8512014503927 +649000 ekin = 2.5628574039565 | erot = 1.74923984575743 | epot = -22.1937498986979 | etot = -17.881652648984 +650000 ekin = 2.76035969172866 | erot = 2.20984080080438 | epot = -22.3536470081185 | etot = -17.3834465155854 +651000 ekin = 2.262551545237 | erot = 3.27496991661067 | epot = -22.4274148303114 | etot = -16.8898933684638 +652000 ekin = 2.3727982819665 | erot = 2.29630046443082 | epot = -22.4456643066011 | etot = -17.7765655602038 +653000 ekin = 2.07651844100825 | erot = 2.14699861111497 | epot = -22.4487464586908 | etot = -18.2252294065676 +654000 ekin = 2.31499263290336 | erot = 1.84798657187726 | epot = -22.471548114837 | etot = -18.3085689100564 +655000 ekin = 2.12344600536595 | erot = 1.79742316518918 | epot = -22.4407504825061 | etot = -18.519881311951 +656000 ekin = 2.44238672537433 | erot = 2.33314467296101 | epot = -22.4050518721077 | etot = -17.6295204737724 +657000 ekin = 2.44684720738067 | erot = 2.87010904355218 | epot = -22.3954429054341 | etot = -17.0784866545012 +658000 ekin = 2.49369435044193 | erot = 2.86933833355583 | epot = -22.3577847118898 | etot = -16.9947520278921 +659000 ekin = 3.38707666874149 | erot = 2.79117377884123 | epot = -22.2233688708269 | etot = -16.0451184232442 +660000 ekin = 2.69464750718905 | erot = 1.98877163007961 | epot = -22.0868371976707 | etot = -17.403418060402 +661000 ekin = 2.2148438610813 | erot = 2.52686187560576 | epot = -21.9324475602905 | etot = -17.1907418236035 +662000 ekin = 2.04483468145689 | erot = 2.52786214958084 | epot = -21.8656118118386 | etot = -17.2929149808009 +663000 ekin = 2.25554994547888 | erot = 2.29981193022507 | epot = -21.812115133329 | etot = -17.256753257625 +664000 ekin = 2.38378154392877 | erot = 1.87242521142835 | epot = -21.7163692740767 | etot = -17.4601625187195 +665000 ekin = 2.64936843119576 | erot = 2.2989986114753 | epot = -21.6597356727187 | etot = -16.7113686300476 +666000 ekin = 1.64494457505824 | erot = 2.30638161556456 | epot = -21.5641898301393 | etot = -17.6128636395165 +667000 ekin = 1.65735220589392 | erot = 2.82614341732318 | epot = -21.4751653585362 | etot = -16.9916697353191 +668000 ekin = 2.49844825113869 | erot = 3.27950898400314 | epot = -21.3387145475146 | etot = -15.5607573123727 +669000 ekin = 1.61611201967415 | erot = 2.67203522811057 | epot = -21.2655442255718 | etot = -16.9773969777871 +670000 ekin = 2.23077474650818 | erot = 2.61363425835144 | epot = -21.2008892493679 | etot = -16.3564802445083 +671000 ekin = 2.26765830930916 | erot = 2.16388121545907 | epot = -21.1515274648835 | etot = -16.7199879401153 +672000 ekin = 1.94916146819698 | erot = 1.65479713709716 | epot = -21.0650678898704 | etot = -17.4611092845762 +673000 ekin = 1.92556066199439 | erot = 2.07900172108796 | epot = -21.0394363569888 | etot = -17.0348739739065 +674000 ekin = 2.12432357869025 | erot = 2.16781085660272 | epot = -21.0725830613714 | etot = -16.7804486260784 +675000 ekin = 2.06851819258986 | erot = 2.48317287761026 | epot = -21.1036073609477 | etot = -16.5519162907476 +676000 ekin = 2.45484997181755 | erot = 2.79183078710855 | epot = -21.1301283632782 | etot = -15.8834476043521 +677000 ekin = 2.20334154136532 | erot = 2.62444584525113 | epot = -21.1495626618894 | etot = -16.321775275273 +678000 ekin = 2.1472401432145 | erot = 2.79545747432262 | epot = -21.0405241444794 | etot = -16.0978265269423 +679000 ekin = 2.17033413623502 | erot = 2.18513653140294 | epot = -20.9421185444833 | etot = -16.5866478768454 +680000 ekin = 2.0995303513191 | erot = 2.68744418062154 | epot = -20.96987060062 | etot = -16.1828960686793 +681000 ekin = 2.18304447310098 | erot = 1.84812119436561 | epot = -21.0743862151371 | etot = -17.0432205476705 +682000 ekin = 3.04278123794939 | erot = 2.40409586716963 | epot = -21.0797568548333 | etot = -15.6328797497143 +683000 ekin = 2.86269023881706 | erot = 2.09728443896194 | epot = -21.0991655055583 | etot = -16.1391908277793 +684000 ekin = 1.98767037715953 | erot = 2.99591968828981 | epot = -21.1362036730577 | etot = -16.1526136076083 +685000 ekin = 1.57295457528713 | erot = 2.03034771002018 | epot = -21.146987158564 | etot = -17.5436848732567 +686000 ekin = 2.37743960028747 | erot = 2.54064910359146 | epot = -21.1479154694211 | etot = -16.2298267655421 +687000 ekin = 1.90905424981708 | erot = 2.87649471802563 | epot = -21.1390488337729 | etot = -16.3534998659302 +688000 ekin = 2.6274055742777 | erot = 2.25087525520177 | epot = -21.1259808926564 | etot = -16.2477000631769 +689000 ekin = 2.6802663035185 | erot = 2.65264291183039 | epot = -21.2405393346747 | etot = -15.9076301193258 +690000 ekin = 2.56393304559926 | erot = 2.48495065222978 | epot = -21.4016015121778 | etot = -16.3527178143488 +691000 ekin = 2.1927043501829 | erot = 2.52704457861404 | epot = -21.506826556612 | etot = -16.787077627815 +692000 ekin = 2.34077396593209 | erot = 3.24867065054243 | epot = -21.5176021816804 | etot = -15.9281575652059 +693000 ekin = 2.29029075483228 | erot = 3.0057489559252 | epot = -21.5358866889499 | etot = -16.2398469781924 +694000 ekin = 2.65674046511192 | erot = 2.58629868712489 | epot = -21.7490636357026 | etot = -16.5060244834658 +695000 ekin = 2.43126197328691 | erot = 1.19706323700546 | epot = -21.9401398969726 | etot = -18.3118146866802 +696000 ekin = 1.81474808623754 | erot = 1.46920096781106 | epot = -21.9089223337524 | etot = -18.6249732797038 +697000 ekin = 2.39476771383886 | erot = 2.11183502257124 | epot = -21.9420332766104 | etot = -17.4354305402003 +698000 ekin = 2.35926337724266 | erot = 1.92783320549514 | epot = -22.0277191263435 | etot = -17.7406225436058 +699000 ekin = 2.48176872675362 | erot = 2.56000644090342 | epot = -22.0212596021869 | etot = -16.9794844345298 +700000 ekin = 2.14129959772679 | erot = 2.29861037684922 | epot = -21.9318234409146 | etot = -17.4919134663386 +701000 ekin = 2.17049668499625 | erot = 2.20225192400486 | epot = -21.8245513288874 | etot = -17.4518027198863 +702000 ekin = 1.5627527155292 | erot = 2.01171151000641 | epot = -21.7865003044461 | etot = -18.2120360789105 +703000 ekin = 2.06065227779357 | erot = 2.17329473717683 | epot = -21.8026608939335 | etot = -17.5687138789631 +704000 ekin = 2.81952809577903 | erot = 1.94266087393333 | epot = -21.8212186788769 | etot = -17.0590297091645 +705000 ekin = 2.82050127519937 | erot = 2.18154028834385 | epot = -21.7752102636878 | etot = -16.7731687001446 +706000 ekin = 1.98267828238497 | erot = 2.32706466032389 | epot = -21.7893242385512 | etot = -17.4795812958423 +707000 ekin = 1.9119199256382 | erot = 2.05897787647106 | epot = -21.8430722730707 | etot = -17.8721744709615 +708000 ekin = 2.5016490217549 | erot = 2.18383615173375 | epot = -21.8544847432183 | etot = -17.1689995697297 +709000 ekin = 2.87304116461984 | erot = 2.56843564623617 | epot = -21.904442472254 | etot = -16.462965661398 +710000 ekin = 2.19867234802447 | erot = 2.26714812026436 | epot = -21.8819798989583 | etot = -17.4161594306695 +711000 ekin = 2.3389229861775 | erot = 1.44633862250317 | epot = -21.9197827259336 | etot = -18.1345211172529 +712000 ekin = 2.57005480809076 | erot = 2.28706559960511 | epot = -22.0346026838636 | etot = -17.1774822761678 +713000 ekin = 1.98393390580317 | erot = 2.33525788511068 | epot = -22.1280127822608 | etot = -17.8088209913469 +714000 ekin = 2.59844561627729 | erot = 2.10769412707773 | epot = -22.1916311346269 | etot = -17.4854913912719 +715000 ekin = 2.41851974197058 | erot = 3.7488852557719 | epot = -22.1607861798611 | etot = -15.9933811821187 +716000 ekin = 2.8418023132582 | erot = 2.85971600497616 | epot = -22.0686589684412 | etot = -16.3671406502068 +717000 ekin = 3.4484144493586 | erot = 3.22605040091157 | epot = -21.9727882885698 | etot = -15.2983234382996 +718000 ekin = 3.10436184228427 | erot = 3.94950630255782 | epot = -21.8709253031511 | etot = -14.817057158309 +719000 ekin = 2.37806574336789 | erot = 2.95502686702168 | epot = -21.8563367317646 | etot = -16.523244121375 +720000 ekin = 2.2124258408194 | erot = 3.13473166149202 | epot = -21.832964450767 | etot = -16.4858069484555 +721000 ekin = 1.6946894391771 | erot = 2.23193742756367 | epot = -21.7424084526643 | etot = -17.8157815859235 +722000 ekin = 1.90287140868432 | erot = 2.80483524098531 | epot = -21.7497487144859 | etot = -17.0420420648163 +723000 ekin = 2.36731223380046 | erot = 2.56327951769445 | epot = -21.6831418267135 | etot = -16.7525500752186 +724000 ekin = 1.73555921199202 | erot = 2.45238016332295 | epot = -21.6581802464112 | etot = -17.4702408710962 +725000 ekin = 2.29059437023039 | erot = 2.94575894857246 | epot = -21.7174261464808 | etot = -16.481072827678 +726000 ekin = 1.63483147798521 | erot = 2.30383185500799 | epot = -21.7564933587679 | etot = -17.8178300257747 +727000 ekin = 2.48240653489464 | erot = 3.20354227059193 | epot = -21.7912108634863 | etot = -16.1052620579997 +728000 ekin = 2.22769215153326 | erot = 2.1648907299462 | epot = -21.7890771091799 | etot = -17.3964942277004 +729000 ekin = 1.89768095869013 | erot = 1.65721672588089 | epot = -21.828690265207 | etot = -18.273792580636 +730000 ekin = 1.81050835100381 | erot = 2.15777747975243 | epot = -21.8264469741817 | etot = -17.8581611434255 +731000 ekin = 2.19898236908282 | erot = 2.98408098832205 | epot = -21.78613179764 | etot = -16.6030684402352 +732000 ekin = 2.43355047343304 | erot = 2.27170844305628 | epot = -21.6883863408736 | etot = -16.9831274243842 +733000 ekin = 3.07212273972684 | erot = 2.56783751855608 | epot = -21.7364921079322 | etot = -16.0965318496493 +734000 ekin = 2.38307322516835 | erot = 2.02726646964742 | epot = -21.7939757502944 | etot = -17.3836360554786 +735000 ekin = 2.14195880954704 | erot = 1.55624807241878 | epot = -21.8426856981853 | etot = -18.1444788162195 +736000 ekin = 2.14667447582536 | erot = 3.43698049451811 | epot = -21.9502105525335 | etot = -16.36655558219 +737000 ekin = 1.74866123585724 | erot = 3.5826697540454 | epot = -21.968815658378 | etot = -16.6374846684753 +738000 ekin = 2.03996249374858 | erot = 2.50844136963082 | epot = -22.0013918784186 | etot = -17.4529880150392 +739000 ekin = 1.85238190118677 | erot = 2.20010970404146 | epot = -22.0186271684577 | etot = -17.9661355632295 +740000 ekin = 2.8386294530065 | erot = 2.79090377324796 | epot = -22.0338814904879 | etot = -16.4043482642334 +741000 ekin = 2.46678702773208 | erot = 2.91050038280044 | epot = -22.0853235069127 | etot = -16.7080360963801 +742000 ekin = 2.7152902937519 | erot = 3.273956530725 | epot = -22.2140748190892 | etot = -16.2248279946123 +743000 ekin = 2.22536600879677 | erot = 3.2117924712642 | epot = -22.3431375024118 | etot = -16.9059790223509 +744000 ekin = 2.01371736615449 | erot = 3.7760139384218 | epot = -22.4261509869247 | etot = -16.6364196823485 +745000 ekin = 3.15730296333415 | erot = 2.31558796250712 | epot = -22.4108926873302 | etot = -16.9380017614889 +746000 ekin = 2.9774013013854 | erot = 2.63107362961469 | epot = -22.3694265664286 | etot = -16.7609516354285 +747000 ekin = 2.34209064832563 | erot = 2.04683419375202 | epot = -22.3628627944521 | etot = -17.9739379523744 +748000 ekin = 2.37156256463875 | erot = 2.40538773919509 | epot = -22.3979208424336 | etot = -17.6209705385998 +749000 ekin = 2.06136855553991 | erot = 2.76585915349199 | epot = -22.3831536512816 | etot = -17.5559259422497 +750000 ekin = 1.64656775002689 | erot = 2.38368935068671 | epot = -22.444703911786 | etot = -18.4144468110724 +751000 ekin = 1.78122844885826 | erot = 2.81833836133587 | epot = -22.533438976529 | etot = -17.9338721663349 +752000 ekin = 1.34730592473948 | erot = 1.45838401317446 | epot = -22.6090848823224 | etot = -19.8033949444084 +753000 ekin = 1.87571626319838 | erot = 2.4535466519722 | epot = -22.5588053116254 | etot = -18.2295423964548 +754000 ekin = 1.7497031355263 | erot = 2.74314075044427 | epot = -22.4698920344377 | etot = -17.9770481484671 +755000 ekin = 2.42081076696332 | erot = 2.41217357398055 | epot = -22.3964223120253 | etot = -17.5634379710815 +756000 ekin = 1.85475003398 | erot = 2.78259891044772 | epot = -22.3205962727121 | etot = -17.6832473282843 +757000 ekin = 1.97578050121357 | erot = 2.51781218539581 | epot = -22.1263927786386 | etot = -17.6328000920292 +758000 ekin = 1.22826853890876 | erot = 2.60763168332874 | epot = -21.9863700054334 | etot = -18.1504697831958 +759000 ekin = 2.21637457917735 | erot = 1.43949125248239 | epot = -22.1514665432947 | etot = -18.495600711635 +760000 ekin = 2.68033406797323 | erot = 2.41719679588396 | epot = -22.2590376675296 | etot = -17.1615068036724 +761000 ekin = 2.1753744063555 | erot = 2.27171718649737 | epot = -22.3344047362676 | etot = -17.8873131434147 +762000 ekin = 2.18577068124737 | erot = 1.66829735822053 | epot = -22.3621686129861 | etot = -18.5081005735182 +763000 ekin = 2.45478818575913 | erot = 3.35299551820638 | epot = -22.4281249366375 | etot = -16.620341232672 +764000 ekin = 2.82872579097199 | erot = 2.78775814269904 | epot = -22.4216595904294 | etot = -16.8051756567583 +765000 ekin = 1.82575545759014 | erot = 2.7623896973924 | epot = -22.3222506299713 | etot = -17.7341054749887 +766000 ekin = 2.64667028577447 | erot = 2.30816231818549 | epot = -22.1784504992491 | etot = -17.2236178952891 +767000 ekin = 2.5751886312018 | erot = 2.85636091304187 | epot = -22.0829371218307 | etot = -16.651387577587 +768000 ekin = 1.86419535586237 | erot = 2.77038508826208 | epot = -22.1032134089885 | etot = -17.4686329648641 +769000 ekin = 2.39682103653439 | erot = 2.30725355924694 | epot = -22.1808553751715 | etot = -17.4767807793902 +770000 ekin = 2.47007838986712 | erot = 3.23244425991329 | epot = -22.2845706013469 | etot = -16.5820479515665 +771000 ekin = 2.32978280625416 | erot = 2.29082247939232 | epot = -22.3223780040389 | etot = -17.7017727183924 +772000 ekin = 2.26109456847871 | erot = 3.00930315380545 | epot = -22.420252339108 | etot = -17.1498546168239 +773000 ekin = 2.23291379974972 | erot = 1.81993150945886 | epot = -22.4876821856977 | etot = -18.4348368764892 +774000 ekin = 2.82112723374611 | erot = 2.20399964233337 | epot = -22.478004597296 | etot = -17.4528777212165 +775000 ekin = 1.80765894464447 | erot = 1.85918506821001 | epot = -22.4072882679054 | etot = -18.7404442550509 +776000 ekin = 1.40021367363829 | erot = 3.15411215412014 | epot = -22.3650958887673 | etot = -17.8107700610088 +777000 ekin = 1.64184304615234 | erot = 2.80565056199556 | epot = -22.2758630382018 | etot = -17.8283694300539 +778000 ekin = 1.48552010960747 | erot = 2.23385655322065 | epot = -22.280627961357 | etot = -18.5612512985288 +779000 ekin = 1.8612416844269 | erot = 1.89467011122749 | epot = -22.3098169150752 | etot = -18.5539051194208 +780000 ekin = 1.69992943470698 | erot = 2.31253245347 | epot = -22.3678364729486 | etot = -18.3553745847716 +781000 ekin = 2.09952906112345 | erot = 2.56012058482576 | epot = -22.4462778123775 | etot = -17.7866281664283 +782000 ekin = 2.5656681981454 | erot = 1.9584872929859 | epot = -22.3478635193415 | etot = -17.8237080282102 +783000 ekin = 2.16529384416182 | erot = 2.88344914114146 | epot = -22.2446053910143 | etot = -17.1958624057111 +784000 ekin = 2.82003342353258 | erot = 2.22795791523759 | epot = -22.2211041777196 | etot = -17.1731128389495 +785000 ekin = 3.1175846654813 | erot = 2.90935771938994 | epot = -22.2344563156641 | etot = -16.2075139307928 +786000 ekin = 2.80016717549673 | erot = 3.42867564957491 | epot = -22.2496451559719 | etot = -16.0208023309003 +787000 ekin = 2.38498105317564 | erot = 3.01080705704523 | epot = -22.1644901078413 | etot = -16.7687019976204 +788000 ekin = 1.98689482841944 | erot = 2.00265266168408 | epot = -22.1102205855985 | etot = -18.120673095495 +789000 ekin = 2.4429381578802 | erot = 2.28303571912852 | epot = -22.0438356575627 | etot = -17.317861780554 +790000 ekin = 3.54942607073523 | erot = 2.80791853998027 | epot = -21.9672470303852 | etot = -15.6099024196697 +791000 ekin = 3.07978044254695 | erot = 2.4184479370232 | epot = -21.9558944305006 | etot = -16.4576660509305 +792000 ekin = 3.91878473045569 | erot = 1.9731825502165 | epot = -21.8851857762129 | etot = -15.9932184955407 +793000 ekin = 2.24379464034279 | erot = 2.58359475602037 | epot = -21.774610681239 | etot = -16.9472212848759 +794000 ekin = 2.14799943871595 | erot = 2.45378042225321 | epot = -21.6055963838422 | etot = -17.0038165228731 +795000 ekin = 1.62858645550717 | erot = 2.41208539626204 | epot = -21.4428264365968 | etot = -17.4021545848276 +796000 ekin = 2.20626767900772 | erot = 2.13905661758329 | epot = -21.3317362060421 | etot = -16.9864119094511 +797000 ekin = 1.82996184067328 | erot = 1.99906119944911 | epot = -21.3393574083459 | etot = -17.5103343682236 +798000 ekin = 2.25667499558209 | erot = 2.51245793531 | epot = -21.3768565865699 | etot = -16.6077236556778 +799000 ekin = 1.90911035219009 | erot = 2.87369878279891 | epot = -21.3617435253194 | etot = -16.5789343903304 +800000 ekin = 2.1677625897713 | erot = 2.34740172956008 | epot = -21.2761013083254 | etot = -16.7609369889941 +801000 ekin = 1.87638787205728 | erot = 1.64434088909028 | epot = -21.119685062831 | etot = -17.5989563016834 +802000 ekin = 2.22686790237101 | erot = 2.21112245128271 | epot = -21.0065136937552 | etot = -16.5685233401014 +803000 ekin = 2.68797844582697 | erot = 1.9055042783616 | epot = -20.977533512373 | etot = -16.3840507881845 +804000 ekin = 2.34860603481643 | erot = 2.89571698053518 | epot = -20.9203141084123 | etot = -15.6759910930607 +805000 ekin = 1.76197291834029 | erot = 2.71253740465393 | epot = -20.7889998983483 | etot = -16.3144895753541 +806000 ekin = 1.7473508020381 | erot = 2.06758975379032 | epot = -20.7361939926422 | etot = -16.9212534368137 +807000 ekin = 1.56935370454674 | erot = 1.70438269927346 | epot = -20.7922156879383 | etot = -17.5184792841181 +808000 ekin = 2.10918656723178 | erot = 2.39856508826456 | epot = -20.8730295437323 | etot = -16.3652778882359 +809000 ekin = 2.64218178293791 | erot = 1.51718119689586 | epot = -20.8620425969582 | etot = -16.7026796171244 +810000 ekin = 3.0961523233869 | erot = 2.66382304688042 | epot = -20.7945446198551 | etot = -15.0345692495878 +811000 ekin = 3.04477285154901 | erot = 3.63336291459452 | epot = -20.8540215443024 | etot = -14.1758857781589 +812000 ekin = 2.15160716251188 | erot = 2.79673763715996 | epot = -20.9409883926875 | etot = -15.9926435930157 +813000 ekin = 2.1868093512261 | erot = 3.1736283575579 | epot = -21.1408022790474 | etot = -15.7803645702634 +814000 ekin = 1.7209257269681 | erot = 2.995751260245 | epot = -21.2437075371712 | etot = -16.5270305499581 +815000 ekin = 2.15299829462668 | erot = 2.27035656487164 | epot = -21.2458654890398 | etot = -16.8225106295415 +816000 ekin = 2.708122450654 | erot = 1.52125307187336 | epot = -21.2616781989935 | etot = -17.0323026764662 +817000 ekin = 2.58901717437677 | erot = 2.58536627670115 | epot = -21.3956545078514 | etot = -16.2212710567734 +818000 ekin = 2.27875756856437 | erot = 2.24624264725757 | epot = -21.4318935062254 | etot = -16.9068932904035 +819000 ekin = 2.10656184615865 | erot = 3.01130039050673 | epot = -21.4327594058408 | etot = -16.3148971691754 +820000 ekin = 2.45661353119087 | erot = 2.7077529494413 | epot = -21.3798106611917 | etot = -16.2154441805595 +821000 ekin = 2.56789243532195 | erot = 2.54922758508947 | epot = -21.3170915318809 | etot = -16.1999715114695 +822000 ekin = 3.57333066089329 | erot = 2.21054956102185 | epot = -21.2861057645663 | etot = -15.5022255426512 +823000 ekin = 3.55383413213106 | erot = 2.72435850620162 | epot = -21.2727846567927 | etot = -14.99459201846 +824000 ekin = 4.1160622349429 | erot = 3.29139599112171 | epot = -21.2039659493683 | etot = -13.7965077233036 +825000 ekin = 2.91568774544338 | erot = 3.47057612959321 | epot = -21.0618933558847 | etot = -14.6756294808481 +826000 ekin = 1.71667097443836 | erot = 1.97830555981831 | epot = -20.8776766681461 | etot = -17.1827001338894 +827000 ekin = 1.87676981471836 | erot = 2.56467088925009 | epot = -20.7862250182709 | etot = -16.3447843143025 +828000 ekin = 2.38071607948713 | erot = 2.54624446499464 | epot = -20.7057379171108 | etot = -15.778777372629 +829000 ekin = 2.23087866970087 | erot = 1.78456567522682 | epot = -20.6078136299299 | etot = -16.5923692850022 +830000 ekin = 2.54758016482261 | erot = 2.32440405635605 | epot = -20.4881081818274 | etot = -15.6161239606488 +831000 ekin = 2.68445862644274 | erot = 2.08263260479755 | epot = -20.3542193485845 | etot = -15.5871281173442 +832000 ekin = 2.63412360308726 | erot = 2.01244922883234 | epot = -20.215817212176 | etot = -15.5692443802564 +833000 ekin = 2.52816532834198 | erot = 2.59604450500368 | epot = -20.1546011863619 | etot = -15.0303913530162 +834000 ekin = 2.89178882882708 | erot = 2.32656568068785 | epot = -20.154457994043 | etot = -14.9361034845281 +835000 ekin = 2.77377023733645 | erot = 2.76167763911259 | epot = -20.2925945781538 | etot = -14.7571467017048 +836000 ekin = 2.5461758373878 | erot = 2.86272526489883 | epot = -20.4572179712235 | etot = -15.0483168689368 +837000 ekin = 1.73852270651188 | erot = 1.97943492340463 | epot = -20.5100877279363 | etot = -16.7921300980198 +838000 ekin = 1.97190789156808 | erot = 2.79058337256635 | epot = -20.5305299708184 | etot = -15.7680387066839 +839000 ekin = 1.97773711155226 | erot = 2.72413991034567 | epot = -20.5265807034224 | etot = -15.8247036815245 +840000 ekin = 1.7232963874871 | erot = 2.96738113282628 | epot = -20.6321231069653 | etot = -15.9414455866519 +841000 ekin = 2.83071457484449 | erot = 2.84941397463216 | epot = -20.7926258530586 | etot = -15.112497303582 +842000 ekin = 2.59731855411368 | erot = 2.84178819703383 | epot = -20.8313063579289 | etot = -15.3921996067814 +843000 ekin = 2.04928376150596 | erot = 2.6128843549826 | epot = -20.8099267672999 | etot = -16.1477586508114 +844000 ekin = 1.54583411960153 | erot = 1.93893729147582 | epot = -20.8613105352918 | etot = -17.3765391242145 +845000 ekin = 2.313825406008 | erot = 2.32466241883302 | epot = -20.9823282893206 | etot = -16.3438404644796 +846000 ekin = 2.08903634512998 | erot = 2.31578856009952 | epot = -21.0646153757685 | etot = -16.659790470539 +847000 ekin = 2.4800137362118 | erot = 2.63006614696695 | epot = -21.0262265568772 | etot = -15.9161466736984 +848000 ekin = 2.15184282735255 | erot = 1.47311006297176 | epot = -21.0583979355086 | etot = -17.4334450451843 +849000 ekin = 2.01842760273387 | erot = 2.48110730715332 | epot = -21.0805165806607 | etot = -16.5809816707735 +850000 ekin = 2.55741512224125 | erot = 2.68263416508461 | epot = -21.0773082596903 | etot = -15.8372589723645 +851000 ekin = 2.18005669935449 | erot = 2.93569398882535 | epot = -21.0924777064982 | etot = -15.9767270183184 +852000 ekin = 2.4696261459638 | erot = 2.4702657660563 | epot = -21.121182921383 | etot = -16.1812910093629 +853000 ekin = 2.39950550338299 | erot = 2.98750142132015 | epot = -21.0612995182632 | etot = -15.67429259356 +854000 ekin = 2.33465924490093 | erot = 2.85274307519464 | epot = -20.968723969517 | etot = -15.7813216494214 +855000 ekin = 2.34227388182979 | erot = 2.06894784165371 | epot = -20.9841257021182 | etot = -16.5729039786347 +856000 ekin = 2.50117711580693 | erot = 2.74791206324422 | epot = -20.8738269143244 | etot = -15.6247377352733 +857000 ekin = 2.54090672086302 | erot = 3.01990349760065 | epot = -20.7453092144205 | etot = -15.1844989959569 +858000 ekin = 3.06946696795817 | erot = 2.15496603972173 | epot = -20.6851307548641 | etot = -15.4606977471842 +859000 ekin = 2.8502330341827 | erot = 2.24419946408453 | epot = -20.6787263175177 | etot = -15.5842938192505 +860000 ekin = 2.81341243833324 | erot = 1.5197461937082 | epot = -20.6783502445099 | etot = -16.3451916124685 +861000 ekin = 2.27419936469317 | erot = 2.84736568193217 | epot = -20.6476685348769 | etot = -15.5261034882516 +862000 ekin = 2.99814535919906 | erot = 1.87200304458178 | epot = -20.6714218686896 | etot = -15.8012734649088 +863000 ekin = 2.82320132781549 | erot = 1.77959785908837 | epot = -20.7642045825074 | etot = -16.1614053956036 +864000 ekin = 2.91892607599648 | erot = 2.64325528924267 | epot = -20.9317153856013 | etot = -15.3695340203621 +865000 ekin = 3.32989545880503 | erot = 2.25510784979563 | epot = -21.0557741374338 | etot = -15.4707708288331 +866000 ekin = 2.85710406140164 | erot = 3.16185395635697 | epot = -21.1425088224093 | etot = -15.1235508046507 +867000 ekin = 2.74742982523498 | erot = 3.06773761977147 | epot = -21.134531707449 | etot = -15.3193642624426 +868000 ekin = 2.1948650568198 | erot = 2.22458860510737 | epot = -21.0697126630058 | etot = -16.6502590010787 +869000 ekin = 2.92239964068215 | erot = 2.50065925324415 | epot = -21.0149378764857 | etot = -15.5918789825594 +870000 ekin = 2.48931117933877 | erot = 2.13038554226924 | epot = -20.9976655364141 | etot = -16.3779688148061 +871000 ekin = 2.19107246828585 | erot = 2.37839051284131 | epot = -20.8765191273408 | etot = -16.3070561462136 +872000 ekin = 1.55081886521514 | erot = 2.09762459684259 | epot = -20.8521940121747 | etot = -17.2037505501169 +873000 ekin = 1.3896067615701 | erot = 2.27757856660909 | epot = -20.9255865429236 | etot = -17.2584012147444 +874000 ekin = 1.41282979514325 | erot = 2.76881886831623 | epot = -21.0901483490343 | etot = -16.9084996855748 +875000 ekin = 1.18979270807644 | erot = 2.71872907877545 | epot = -21.2270266717576 | etot = -17.3185048849058 +876000 ekin = 1.81100671707876 | erot = 2.98963277694409 | epot = -21.2472610575188 | etot = -16.4466215634959 +877000 ekin = 2.36243541111364 | erot = 2.03609143795483 | epot = -21.3277863705839 | etot = -16.9292595215154 +878000 ekin = 2.1245196182468 | erot = 1.75451707226955 | epot = -21.3222506595257 | etot = -17.4432139690093 +879000 ekin = 2.2716997631568 | erot = 2.70191568133046 | epot = -21.3119311913778 | etot = -16.3383157468906 +880000 ekin = 2.68326313012635 | erot = 2.77340532358103 | epot = -21.3535728447366 | etot = -15.8969043910292 +881000 ekin = 2.87483307600208 | erot = 2.33652901733377 | epot = -21.3292700652532 | etot = -16.1179079719173 +882000 ekin = 2.32758906799515 | erot = 2.16795489269516 | epot = -21.2584233833351 | etot = -16.7628794226448 +883000 ekin = 2.35908631800798 | erot = 1.97904048991531 | epot = -21.0655746410777 | etot = -16.7274478331544 +884000 ekin = 2.52269362644082 | erot = 2.25025361307445 | epot = -20.9641879640375 | etot = -16.1912407245222 +885000 ekin = 2.8471189843883 | erot = 2.26506458535077 | epot = -20.9641383727441 | etot = -15.8519548030051 +886000 ekin = 3.18322288605135 | erot = 1.73470875511279 | epot = -21.0012427194847 | etot = -16.0833110783206 +887000 ekin = 2.68813414464725 | erot = 2.50204216522368 | epot = -21.067976555709 | etot = -15.8778002458381 +888000 ekin = 2.15187544250473 | erot = 2.83221089603913 | epot = -21.17639007923 | etot = -16.1923037406862 +889000 ekin = 2.16956995574787 | erot = 2.20198656261183 | epot = -21.1017572530618 | etot = -16.7302007347021 +890000 ekin = 1.78556825977743 | erot = 2.98410700070926 | epot = -21.186208638226 | etot = -16.4165333777393 +891000 ekin = 1.64917016933854 | erot = 2.27750403923458 | epot = -21.3189640243096 | etot = -17.3922898157365 +892000 ekin = 1.96583947510742 | erot = 2.36271973263346 | epot = -21.4596361006042 | etot = -17.1310768928633 +893000 ekin = 1.79314340564254 | erot = 1.8411107489992 | epot = -21.5470179462123 | etot = -17.9127637915705 +894000 ekin = 2.81442382935654 | erot = 2.80759818283316 | epot = -21.6538835081476 | etot = -16.0318614959579 +895000 ekin = 2.0070369904664 | erot = 2.75374249882318 | epot = -21.7499760057857 | etot = -16.9891965164961 +896000 ekin = 1.6507008342202 | erot = 2.56296228195539 | epot = -21.8927812332095 | etot = -17.6791181170339 +897000 ekin = 1.78139405234358 | erot = 2.35356223356246 | epot = -22.0286409132692 | etot = -17.8936846273632 +898000 ekin = 1.85207490030026 | erot = 2.3928555728648 | epot = -22.0495390022753 | etot = -17.8046085291102 +899000 ekin = 1.66216066819287 | erot = 3.04222938639382 | epot = -21.9579747350567 | etot = -17.25358468047 +900000 ekin = 2.15165827067079 | erot = 2.62356927804175 | epot = -21.9156104880732 | etot = -17.1403829393607 +901000 ekin = 2.41248642142908 | erot = 2.69714418093217 | epot = -21.9837417963999 | etot = -16.8741111940386 +902000 ekin = 2.57545214239909 | erot = 2.40635843208183 | epot = -21.996436412966 | etot = -17.0146258384851 +903000 ekin = 2.40335601179059 | erot = 2.4057541752901 | epot = -22.0230111828253 | etot = -17.2139009957446 +904000 ekin = 1.99365997109403 | erot = 3.12264199705152 | epot = -22.0954468558152 | etot = -16.9791448876697 +905000 ekin = 2.45160047861299 | erot = 2.11889478277434 | epot = -22.0620083174753 | etot = -17.4915130560879 +906000 ekin = 2.69446662881178 | erot = 1.66991631401456 | epot = -22.0555442490735 | etot = -17.6911613062471 +907000 ekin = 2.5734498863711 | erot = 2.16877319112329 | epot = -22.0376984236082 | etot = -17.2954753461138 +908000 ekin = 2.9646776076989 | erot = 2.40252252045294 | epot = -22.0191047803794 | etot = -16.6519046522276 +909000 ekin = 3.12793409264582 | erot = 2.12009742665766 | epot = -22.0610667288554 | etot = -16.8130352095519 +910000 ekin = 2.92206025021313 | erot = 3.50302372345592 | epot = -22.1277774480557 | etot = -15.7026934743867 +911000 ekin = 1.85381948048669 | erot = 2.73401011795404 | epot = -22.1683975531304 | etot = -17.5805679546896 +912000 ekin = 2.64405242900445 | erot = 1.86324838607163 | epot = -22.2002570143971 | etot = -17.692956199321 +913000 ekin = 2.46824283660223 | erot = 2.0308633546605 | epot = -22.3203806242275 | etot = -17.8212744329647 +914000 ekin = 2.01871966356282 | erot = 2.94283156821207 | epot = -22.3513452914152 | etot = -17.3897940596404 +915000 ekin = 2.82676643872102 | erot = 2.11643553756712 | epot = -22.3640471312087 | etot = -17.4208451549205 +916000 ekin = 2.54227707175729 | erot = 3.23335822897873 | epot = -22.4652663102875 | etot = -16.6896310095515 +917000 ekin = 2.31676859881433 | erot = 2.2427200582576 | epot = -22.463585281336 | etot = -17.9040966242641 +918000 ekin = 2.08681780124233 | erot = 2.05685815910104 | epot = -22.3748058531193 | etot = -18.231129892776 +919000 ekin = 2.60282015977208 | erot = 2.38968293687319 | epot = -22.3822670579485 | etot = -17.3897639613032 +920000 ekin = 3.21847224306531 | erot = 2.75010700480466 | epot = -22.4646189595793 | etot = -16.4960397117093 +921000 ekin = 2.67829101318104 | erot = 1.98386933580364 | epot = -22.5250186592845 | etot = -17.8628583102998 +922000 ekin = 1.43283799739773 | erot = 1.5210967069851 | epot = -22.5925015236451 | etot = -19.6385668192623 +923000 ekin = 1.69052063428542 | erot = 1.88300391650268 | epot = -22.66377714455 | etot = -19.0902525937619 +924000 ekin = 2.14340021014736 | erot = 1.52248843908134 | epot = -22.6402388027506 | etot = -18.9743501535219 +925000 ekin = 2.26091939109784 | erot = 1.33050454776921 | epot = -22.5227280014394 | etot = -18.9313040625724 +926000 ekin = 2.00930540350536 | erot = 2.07372939007629 | epot = -22.4428200376094 | etot = -18.3597852440277 +927000 ekin = 2.53289082621251 | erot = 1.99783542507574 | epot = -22.5727269691716 | etot = -18.0420007178833 +928000 ekin = 2.57275295957812 | erot = 2.50503787417693 | epot = -22.7397714760282 | etot = -17.6619806422732 +929000 ekin = 2.66131598383108 | erot = 1.82871097568713 | epot = -22.7889092091996 | etot = -18.2988822496814 +930000 ekin = 2.41369096322635 | erot = 2.00598415451171 | epot = -22.802343205586 | etot = -18.3826680878479 +931000 ekin = 3.02636364754007 | erot = 2.115962250161 | epot = -22.7562575819635 | etot = -17.6139316842625 +932000 ekin = 2.34573343934799 | erot = 1.88269819474441 | epot = -22.8028018252265 | etot = -18.5743701911341 +933000 ekin = 2.16951834533283 | erot = 2.85677231086964 | epot = -22.8240172791919 | etot = -17.7977266229894 +934000 ekin = 2.17177152489559 | erot = 2.1194660688678 | epot = -22.8652321779361 | etot = -18.5739945841727 +935000 ekin = 2.34485090948927 | erot = 2.23417606918545 | epot = -22.85888707632 | etot = -18.2798600976452 +936000 ekin = 2.28188124919415 | erot = 2.53015822921572 | epot = -22.9782518612072 | etot = -18.1662123827973 +937000 ekin = 2.3061925494295 | erot = 2.82857457174385 | epot = -23.071665648819 | etot = -17.9368985276457 +938000 ekin = 2.44229226509271 | erot = 2.00737414808353 | epot = -23.1363676072136 | etot = -18.6867011940373 +939000 ekin = 2.97744015155649 | erot = 2.1021287084213 | epot = -23.1206613400026 | etot = -18.0410924800248 +940000 ekin = 3.74219661265262 | erot = 2.68184060115531 | epot = -23.0494489680042 | etot = -16.6254117541962 +941000 ekin = 3.1130700754106 | erot = 2.2870034463699 | epot = -22.9451834918749 | etot = -17.5451099700944 +942000 ekin = 3.46654816859628 | erot = 1.87509182259239 | epot = -22.9048558084884 | etot = -17.5632158172997 +943000 ekin = 3.79224818385641 | erot = 2.70927084823339 | epot = -22.8698482349086 | etot = -16.3683292028188 +944000 ekin = 2.65995525590795 | erot = 2.74912726816423 | epot = -22.8317889960132 | etot = -17.422706471941 +945000 ekin = 2.54659137616624 | erot = 2.02239421261018 | epot = -22.725938832337 | etot = -18.1569532435606 +946000 ekin = 2.46388617435412 | erot = 1.67037983156324 | epot = -22.5545307163887 | etot = -18.4202647104713 +947000 ekin = 2.40803821488282 | erot = 1.99424876436282 | epot = -22.4581247656853 | etot = -18.0558377864397 +948000 ekin = 3.53604042034895 | erot = 2.57997877434838 | epot = -22.3226574127033 | etot = -16.206638218006 +949000 ekin = 2.98854271807069 | erot = 2.434764866082 | epot = -22.1081978358246 | etot = -16.6848902516719 +950000 ekin = 1.85098760333696 | erot = 3.0113849918017 | epot = -21.9481390655564 | etot = -17.0857664704178 +951000 ekin = 2.24140231384639 | erot = 2.36101456496684 | epot = -21.9054305662226 | etot = -17.3030136874094 +952000 ekin = 2.1767459614223 | erot = 1.66164476273624 | epot = -21.8857446244283 | etot = -18.0473539002697 +953000 ekin = 2.32434436644844 | erot = 1.96780923551529 | epot = -21.864089307184 | etot = -17.5719357052203 +954000 ekin = 1.49071594272054 | erot = 3.34931219540537 | epot = -21.7966718941878 | etot = -16.9566437560618 +955000 ekin = 1.88457697665867 | erot = 2.69006961792184 | epot = -21.7221575712775 | etot = -17.147510976697 +956000 ekin = 1.69307087749046 | erot = 2.16469646035311 | epot = -21.6721199805376 | etot = -17.814352642694 +957000 ekin = 1.73487330688787 | erot = 1.64307450157792 | epot = -21.6559256952543 | etot = -18.2779778867885 +958000 ekin = 1.60385894866933 | erot = 2.19168737006627 | epot = -21.6476897105175 | etot = -17.8521433917819 +959000 ekin = 2.59262245343361 | erot = 2.48219361032086 | epot = -21.6596277279706 | etot = -16.5848116642161 +960000 ekin = 2.55386671368679 | erot = 2.05771846301768 | epot = -21.6626200672138 | etot = -17.0510348905093 +961000 ekin = 2.27765806186204 | erot = 2.17958354193562 | epot = -21.6544957188758 | etot = -17.1972541150782 +962000 ekin = 1.66004639932187 | erot = 3.51004740828816 | epot = -21.6650529510449 | etot = -16.4949591434349 +963000 ekin = 1.98935936955203 | erot = 1.50490949194663 | epot = -21.6088711497269 | etot = -18.1146022882282 +964000 ekin = 2.17983717879189 | erot = 2.29031074234418 | epot = -21.5586262428098 | etot = -17.0884783216737 +965000 ekin = 2.10787439045543 | erot = 2.3221077885109 | epot = -21.5497920382512 | etot = -17.1198098592849 +966000 ekin = 3.1408040905672 | erot = 3.41823133718854 | epot = -21.5836404263088 | etot = -15.024604998553 +967000 ekin = 3.0568623124503 | erot = 2.1733206632131 | epot = -21.5260931467358 | etot = -16.2959101710724 +968000 ekin = 2.05064192877792 | erot = 2.14124924922397 | epot = -21.4479972163209 | etot = -17.256106038319 +969000 ekin = 2.21517858837652 | erot = 2.21735686304378 | epot = -21.3822587820383 | etot = -16.949723330618 +970000 ekin = 2.44665062708039 | erot = 2.63919176763313 | epot = -21.3192840477868 | etot = -16.2334416530733 +971000 ekin = 2.47241679333997 | erot = 2.68621090896417 | epot = -21.3036698600044 | etot = -16.1450421577003 +972000 ekin = 3.18976408247808 | erot = 2.45901954667695 | epot = -21.2523934460448 | etot = -15.6036098168898 +973000 ekin = 3.35475115149161 | erot = 2.61012752320778 | epot = -21.183068859057 | etot = -15.2181901843576 +974000 ekin = 2.71127807449815 | erot = 2.12974355852032 | epot = -21.0816906098712 | etot = -16.2406689768528 +975000 ekin = 1.81295894463494 | erot = 2.0759564976921 | epot = -20.9964165264669 | etot = -17.1075010841398 +976000 ekin = 2.37619926790761 | erot = 1.37981441384236 | epot = -20.8930101654836 | etot = -17.1369964837336 +977000 ekin = 2.85555210767404 | erot = 3.03619369635208 | epot = -21.0095574945917 | etot = -15.1178116905656 +978000 ekin = 3.13849116757388 | erot = 3.01118356119965 | epot = -21.0732326779663 | etot = -14.9235579491928 +979000 ekin = 3.64170438280054 | erot = 2.4612126795782 | epot = -20.9593695826044 | etot = -14.8564525202257 +980000 ekin = 3.43680535726821 | erot = 3.27333588575053 | epot = -20.9004670674903 | etot = -14.1903258244715 +981000 ekin = 2.95806185202903 | erot = 2.46811293942083 | epot = -20.9868038459701 | etot = -15.5606290545202 +982000 ekin = 2.05823037945997 | erot = 2.23573651589999 | epot = -21.0420814071854 | etot = -16.7481145118254 +983000 ekin = 2.5553610304344 | erot = 1.97272050888114 | epot = -21.0434200461188 | etot = -16.5153385068032 +984000 ekin = 2.32140326985734 | erot = 2.58284655378618 | epot = -21.0826601835729 | etot = -16.1784103599294 +985000 ekin = 2.30327577152247 | erot = 3.01569210622987 | epot = -21.1731422974947 | etot = -15.8541744197424 +986000 ekin = 2.0247579133688 | erot = 2.17885674714069 | epot = -21.2745593334952 | etot = -17.0709446729857 +987000 ekin = 2.38610984160001 | erot = 1.60437579739602 | epot = -21.2569575649582 | etot = -17.2664719259622 +988000 ekin = 2.73926231299059 | erot = 2.71146350841208 | epot = -21.1552791211025 | etot = -15.7045532996999 +989000 ekin = 2.26697151561908 | erot = 2.87750604798637 | epot = -21.0937789068058 | etot = -15.9493013432004 +990000 ekin = 2.20943106152859 | erot = 2.59684886899357 | epot = -21.0203331776818 | etot = -16.2140532471596 +991000 ekin = 2.18249266283082 | erot = 2.54649657411172 | epot = -20.9130337682104 | etot = -16.1840445312679 +992000 ekin = 1.6979885228163 | erot = 2.49592807829765 | epot = -20.97584958751 | etot = -16.781932986396 +993000 ekin = 1.37413745875443 | erot = 1.97736806672932 | epot = -21.0653195519547 | etot = -17.713814026471 +994000 ekin = 1.46489942286098 | erot = 2.9578292103502 | epot = -21.126186746174 | etot = -16.7034581129629 +995000 ekin = 2.313206084368 | erot = 1.68064795849453 | epot = -21.1907262676309 | etot = -17.1968722247684 +996000 ekin = 2.91635623044139 | erot = 2.86817278212845 | epot = -21.1749728841882 | etot = -15.3904438716184 +997000 ekin = 3.14117227050211 | erot = 2.13892951607983 | epot = -21.1714996184258 | etot = -15.8913978318439 +998000 ekin = 2.24297046385175 | erot = 3.02327291553881 | epot = -21.1032039558864 | etot = -15.8369605764958 +999000 ekin = 2.61553981530106 | erot = 1.7387289184571 | epot = -21.0217257279766 | etot = -16.6674569942185 +1000000 ekin = 2.34012577497833 | erot = 2.86436388995813 | epot = -21.0201566044041 | etot = -15.8156669394676 + 1000000 0.10400559 -1.3746133 0.060853481 -1.1675019 0.00013752759 +Loop time of 59.4195 on 4 procs for 1000000 steps with 16 atoms + +Performance: 14540.686 tau/day, 16829.497 timesteps/s +96.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.0304 | 20.212 | 37.839 | 369.5 | 34.02 +Bond | 0.12844 | 0.57006 | 0.95643 | 49.6 | 0.96 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 4.3935 | 5.5635 | 6.7052 | 44.2 | 9.36 +Output | 2.3e-05 | 3.575e-05 | 4.1e-05 | 0.0 | 0.00 +Modify | 0.3513 | 3.4695 | 6.4366 | 144.3 | 5.84 +Other | | 29.6 | | | 49.82 + +Nlocal: 4 ave 8 max 0 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 11 ave 14 max 8 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Neighs: 46 ave 89 max 0 min +Histogram: 1 1 0 0 0 0 0 0 0 2 + +Total # of neighbors = 184 +Ave neighs/atom = 11.5 +Ave special neighs/atom = 3.75 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:59 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 deleted file mode 100644 index ba36d696fb..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.1 +++ /dev/null @@ -1,178 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 3.025 | 3.025 | 3.025 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5358787 0.0096742456 -1.5262045 -7.9568629e-05 -1000 ekin = 1.54282272464468 | erot = 1.71757897250772 | epot = -24.4403527731341 | etot = -21.1799510759817 -2000 ekin = 1.86109566690716 | erot = 1.93804145796026 | epot = -24.3759816748265 | etot = -20.5768445499591 -3000 ekin = 2.68769182431188 | erot = 2.14559269500086 | epot = -24.2916556822451 | etot = -19.4583711629324 -4000 ekin = 2.04710303757243 | erot = 1.48774072590987 | epot = -24.190371461807 | etot = -20.6555276983247 -5000 ekin = 1.77654023802719 | erot = 2.534186505221 | epot = -24.1246365663843 | etot = -19.8139098231361 -6000 ekin = 3.12253137872527 | erot = 2.04028266818831 | epot = -24.0491248750916 | etot = -18.886310828178 -7000 ekin = 3.22418765752177 | erot = 2.72037570174023 | epot = -23.9458569915548 | etot = -18.0012936322928 -8000 ekin = 2.83204202112963 | erot = 2.67060276413777 | epot = -23.9211291529766 | etot = -18.4184843677092 -9000 ekin = 2.69585642754481 | erot = 2.59559820250212 | epot = -23.8340823338302 | etot = -18.5426277037833 -10000 ekin = 2.66058119525512 | erot = 1.95965933336077 | epot = -23.7132443170725 | etot = -19.0930037884566 - 10000 0.11824805 -1.4953627 0.013284973 -1.3157914 -0.00012999454 -Loop time of 0.32781 on 1 procs for 10000 steps with 16 atoms - -Performance: 26356.746 tau/day, 30505.493 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.24211 | 0.24211 | 0.24211 | 0.0 | 73.86 -Bond | 0.0075173 | 0.0075173 | 0.0075173 | 0.0 | 2.29 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0014515 | 0.0014515 | 0.0014515 | 0.0 | 0.44 -Output | 5.4836e-06 | 5.4836e-06 | 5.4836e-06 | 0.0 | 0.00 -Modify | 0.073331 | 0.073331 | 0.073331 | 0.0 | 22.37 -Other | | 0.003398 | | | 1.04 - -Nlocal: 16 ave 16 max 16 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 116 ave 116 max 116 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 116 -Ave neighs/atom = 7.25 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 deleted file mode 100644 index 3237d4849e..0000000000 --- a/examples/USER/cgdna/examples/oxDNA2/duplex2/log.27Nov18.duplex2.g++.4 +++ /dev/null @@ -1,178 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -variable number equal 2 -variable ofreq equal 1000 -variable efreq equal 1000 - -units lj - -dimension 3 - -newton off - -boundary p p p - -atom_style hybrid bond ellipsoid -atom_modify sort 0 1.0 - -# Pair interactions require lists of neighbours to be calculated -neighbor 1.0 bin -neigh_modify every 1 delay 0 check yes - -read_data data.duplex2 - orthogonal box = (-20 -20 -20) to (20 20 20) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 16 atoms - reading velocities ... - 16 velocities - 16 ellipsoids - scanning bonds ... - 2 = max bonds/atom - reading bonds ... - 13 bonds - 2 = max # of 1-2 neighbors - 2 = max # of 1-3 neighbors - 4 = max # of 1-4 neighbors - 6 = max # of special neighbors - -set atom * mass 3.1575 - 16 settings made for mass - -group all type 1 4 -16 atoms in group all - -# oxDNA bond interactions - FENE backbone -bond_style oxdna2/fene -bond_coeff * 2.0 0.25 0.7564 - -# oxDNA pair interactions -pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh -pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 -pair_coeff * * oxdna2/stk seqav 0.1 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 -pair_coeff * * oxdna2/hbond seqav 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 1 4 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff 2 3 oxdna2/hbond seqav 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 -pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 -pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 -pair_coeff * * oxdna2/dh 0.1 1.0 0.815 - -# NVE ensemble -#fix 1 all nve/dot -fix 1 all nve/dotc/langevin 0.1 0.1 0.03 457145 angmom 10 -#fix 1 all nve/asphere -#fix 2 all langevin 0.1 0.1 0.03 457145 angmom 10 - -timestep 1e-5 - -#comm_style tiled -#fix 3 all balance 10000 1.1 rcb - -#compute mol all chunk/atom molecule -#compute mychunk all vcm/chunk mol -#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector - -#dump pos all xyz ${ofreq} traj.${number}.xyz - -#compute quat all property/atom quatw quati quatj quatk -#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] -#dump_modify quat sort id -#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" - -compute erot all erotate/asphere -compute ekin all ke -compute epot all pe -variable erot equal c_erot -variable ekin equal c_ekin -variable epot equal c_epot -variable etot equal c_erot+c_ekin+c_epot -fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes -fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes - -#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz -#dump_modify out sort id -#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.6274 - ghost atom cutoff = 2.6274 - binsize = 1.3137, bins = 31 31 31 - 6 neighbor lists, perpetual/occasional/extra = 6 0 0 - (1) pair oxdna2/excv, perpetual - attributes: half, newton off - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard - (2) pair oxdna2/stk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (3) pair oxdna2/hbond, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (4) pair oxdna2/xstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (5) pair oxdna2/coaxstk, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none - (6) pair oxdna2/dh, perpetual, copy from (1) - attributes: half, newton off - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.777 | 7.959 | 8.142 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 0 -1.5358787 0.0096742456 -1.5262045 -7.9568629e-05 -1000 ekin = 1.34554291364716 | erot = 2.30525041754444 | epot = -24.3924150888896 | etot = -20.741621757698 -2000 ekin = 2.15972469811184 | erot = 2.1628675965276 | epot = -24.3548203354875 | etot = -20.0322280408481 -3000 ekin = 3.26433550542939 | erot = 2.76107866472085 | epot = -24.2947953202752 | etot = -18.269381150125 -4000 ekin = 1.9203212531997 | erot = 2.13339438425299 | epot = -24.234098584123 | etot = -20.1803829466703 -5000 ekin = 1.35481075814721 | erot = 2.00854026688447 | epot = -24.1768963201279 | etot = -20.8135452950963 -6000 ekin = 2.18974627635306 | erot = 1.73271671162435 | epot = -24.1096616118305 | etot = -20.1871986238531 -7000 ekin = 2.65472853187395 | erot = 1.73258720631296 | epot = -24.0561118130561 | etot = -19.6687960748691 -8000 ekin = 2.51192327964357 | erot = 2.34132844779952 | epot = -23.9708695663488 | etot = -19.1176178389058 -9000 ekin = 2.24554900802464 | erot = 2.0522939078286 | epot = -23.874757758319 | etot = -19.5769148424658 -10000 ekin = 2.36227360512089 | erot = 1.80185994066737 | epot = -23.7793375260418 | etot = -19.6152039802535 - 10000 0.10498994 -1.5020657 0.015857071 -1.3385665 -8.8930899e-05 -Loop time of 0.291642 on 4 procs for 10000 steps with 16 atoms - -Performance: 29625.313 tau/day, 34288.557 timesteps/s -96.6% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.0035026 | 0.1107 | 0.20674 | 28.3 | 37.96 -Bond | 0.00062203 | 0.0029532 | 0.0049176 | 3.6 | 1.01 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.016712 | 0.018041 | 0.01914 | 0.7 | 6.19 -Output | 5.0306e-05 | 5.424e-05 | 5.579e-05 | 0.0 | 0.02 -Modify | 0.0013862 | 0.020914 | 0.039594 | 11.7 | 7.17 -Other | | 0.139 | | | 47.65 - -Nlocal: 4 ave 8 max 0 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Nghost: 11 ave 14 max 8 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Neighs: 46 ave 89 max 0 min -Histogram: 1 1 0 0 0 0 0 0 0 2 - -Total # of neighbors = 184 -Ave neighs/atom = 11.5 -Ave special neighs/atom = 3.75 -Neighbor list builds = 0 -Dangerous builds = 0 - -#write_restart config.${number}.* -Total wall time: 0:00:00 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex3/data.duplex3 b/examples/USER/cgdna/examples/oxDNA2/duplex3/data.duplex3 new file mode 100644 index 0000000000..bbd584163b --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex3/data.duplex3 @@ -0,0 +1,73 @@ +# LAMMPS data file +10 atoms +10 ellipsoids +8 bonds + +4 atom types +1 bond types + +# System size +-20.000000 20.000000 xlo xhi +-20.000000 20.000000 ylo yhi +-20.000000 20.000000 zlo zhi + +Masses + +1 1.0 +2 1.0 +3 1.0 +4 1.0 + +# Atom-ID, type, position, molecule-ID, ellipsoid flag, density +Atoms + +1 1 -6.000000000000001e-01 0.000000000000000e+00 0.000000000000000e+00 1 1 1 +2 2 -4.860249842674776e-01 -3.518234140414736e-01 3.897628551303122e-01 1 1 1 +3 3 -1.874009511073395e-01 -5.699832309147915e-01 7.795257102606244e-01 1 1 1 +4 4 1.824198365552941e-01 -5.715968887521518e-01 1.169288565390937e+00 1 1 1 +5 1 4.829362784135484e-01 -3.560513319622209e-01 1.559051420521249e+00 1 1 1 +6 4 -4.829362784135484e-01 3.560513319622209e-01 1.559051420521249e+00 2 1 1 +7 1 -1.824198365552941e-01 5.715968887521516e-01 1.169288565390937e+00 2 1 1 +8 2 1.874009511073395e-01 5.699832309147913e-01 7.795257102606243e-01 2 1 1 +9 3 4.860249842674775e-01 3.518234140414733e-01 3.897628551303121e-01 2 1 1 +10 4 5.999999999999996e-01 -1.332267629550188e-16 -1.110223024625157e-16 2 1 1 + +# Atom-ID, translational velocity, angular momentum +Velocities + +1 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +2 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +3 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +4 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +5 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +6 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +7 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +8 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +9 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +10 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + +# Atom-ID, shape, quaternion +Ellipsoids + +1 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +2 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 9.513258223252946e-01 0.000000000000000e+00 0.000000000000000e+00 3.081869234362515e-01 +3 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 8.100416404457962e-01 0.000000000000000e+00 0.000000000000000e+00 5.863723567357894e-01 +4 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 5.899012371043606e-01 0.000000000000000e+00 0.000000000000000e+00 8.074754054847398e-01 +5 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 3.123349185122326e-01 0.000000000000000e+00 0.000000000000000e+00 9.499720515246527e-01 +6 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 0.000000000000000e+00 9.499720515246527e-01 -3.123349185122326e-01 -0.000000000000000e+00 +7 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 0.000000000000000e+00 8.074754054847401e-01 -5.899012371043604e-01 0.000000000000000e+00 +8 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 0.000000000000000e+00 5.863723567357896e-01 -8.100416404457959e-01 0.000000000000000e+00 +9 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 -0.000000000000000e+00 -3.081869234362514e-01 9.513258223252947e-01 0.000000000000000e+00 +10 3.1622776601683795+00 3.1622776601683795+00 3.1622776601683795+00 -0.000000000000000e+00 1.110223024625157e-16 1.000000000000000e+00 -0.000000000000000e+00 + +# Bond topology +Bonds + +1 1 1 2 +2 1 2 3 +3 1 3 4 +4 1 4 5 +5 1 6 7 +6 1 7 8 +7 1 8 9 +8 1 9 10 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex3/in.duplex3 b/examples/USER/cgdna/examples/oxDNA2/duplex3/in.duplex3 new file mode 100644 index 0000000000..51d6334f55 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex3/in.duplex3 @@ -0,0 +1,79 @@ +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex3 + +set atom * mass 1.0 + +group all type 1 4 + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqdep ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqdep 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 + +#write_restart config.${number}.* diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex3/log.18Jun19.duplex3.g++.1 b/examples/USER/cgdna/examples/oxDNA2/duplex3/log.18Jun19.duplex3.g++.1 new file mode 100644 index 0000000000..6b8b7161d5 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex3/log.18Jun19.duplex3.g++.1 @@ -0,0 +1,1172 @@ +LAMMPS (18 Jun 2019) +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex3 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + special bonds CPU = 0.000113 secs + read_data CPU = 0.00275 secs + +set atom * mass 1.0 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqdep ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqdep 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqdep 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.023 | 3.023 | 3.023 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4720158 0.009525411 -1.4624904 3.1370518e-06 +1000 ekin = 0.00366431201929618 | erot = 0.00193726360267488 | epot = -14.630505317301 | etot = -14.624903741679 +2000 ekin = 0.0144775076075466 | erot = 0.00770914672938582 | epot = -14.6470903960565 | etot = -14.6249037417196 +3000 ekin = 0.0319122186081549 | erot = 0.0171972328649101 | epot = -14.6740131932573 | etot = -14.6249037417842 +4000 ekin = 0.0551283043509704 | erot = 0.0302085305548002 | epot = -14.7102405767754 | etot = -14.6249037418696 +5000 ekin = 0.0830285165715823 | erot = 0.0464820547541705 | epot = -14.7544143132963 | etot = -14.6249037419705 +6000 ekin = 0.114331121546757 | erot = 0.0656980211282096 | epot = -14.8049328847556 | etot = -14.6249037420806 +7000 ekin = 0.147653866561892 | erot = 0.0874894888755386 | epot = -14.860047097631 | etot = -14.6249037421936 +8000 ekin = 0.181602099560207 | erot = 0.111456095727703 | epot = -14.9179619375911 | etot = -14.6249037423032 +9000 ekin = 0.214852894725919 | erot = 0.137179311245174 | epot = -14.9769359483746 | etot = -14.6249037424035 +10000 ekin = 0.246227151956033 | erot = 0.164238435218395 | epot = -15.0353693296648 | etot = -14.6249037424904 +11000 ekin = 0.274743080419051 | erot = 0.192226420003239 | epot = -15.0918732429829 | etot = -14.6249037425607 +12000 ekin = 0.2996471417657 | erot = 0.220764512146651 | epot = -15.1453153965252 | etot = -14.6249037426128 +13000 ekin = 0.320421918860966 | erot = 0.249514690530541 | epot = -15.1948403520385 | etot = -14.624903742647 +14000 ekin = 0.33677373488436 | erot = 0.27818893373049 | epot = -15.2398664112793 | etot = -14.6249037426645 +15000 ekin = 0.348605413762901 | erot = 0.306554508009418 | epot = -15.2800636644399 | etot = -14.6249037426675 +16000 ekin = 0.355980829097854 | erot = 0.334434770083744 | epot = -15.3153193418402 | etot = -14.6249037426586 +17000 ekin = 0.35908770105941 | erot = 0.361705441666512 | epot = -15.3456968853664 | etot = -14.6249037426405 +18000 ekin = 0.358203710992239 | erot = 0.388286889516313 | epot = -15.3713943431242 | etot = -14.6249037426156 +19000 ekin = 0.353668912555234 | erot = 0.414133518537107 | epot = -15.3927061736788 | etot = -14.6249037425864 +20000 ekin = 0.345865220775291 | erot = 0.439221805285432 | epot = -15.4099907686153 | etot = -14.6249037425546 +21000 ekin = 0.335201981146472 | erot = 0.463538642606515 | epot = -15.4236443662748 | etot = -14.6249037425218 +22000 ekin = 0.322105588834903 | erot = 0.487071492273063 | epot = -15.4340808235971 | etot = -14.6249037424892 +23000 ekin = 0.307010918596165 | erot = 0.509801406229371 | epot = -15.4417160672832 | etot = -14.6249037424577 +24000 ekin = 0.290352786033169 | erot = 0.531699400501692 | epot = -15.446955928963 | etot = -14.6249037424281 +25000 ekin = 0.272556500902037 | erot = 0.552726088759198 | epot = -15.4501863320622 | etot = -14.624903742401 +26000 ekin = 0.254027484079049 | erot = 0.572834017299018 | epot = -15.4517652437547 | etot = -14.6249037423766 +27000 ekin = 0.23514066521633 | erot = 0.591971851501221 | epot = -15.4520162590729 | etot = -14.6249037423553 +28000 ekin = 0.216230835846198 | erot = 0.610089455964333 | epot = -15.4512240341478 | etot = -14.6249037423373 +29000 ekin = 0.197585285158555 | erot = 0.627142960082633 | epot = -15.4496319875635 | etot = -14.6249037423223 +30000 ekin = 0.179439940173318 | erot = 0.643099062793407 | epot = -15.4474427452769 | etot = -14.6249037423102 +31000 ekin = 0.161979935826124 | erot = 0.657938056392308 | epot = -15.4448217345186 | etot = -14.6249037423001 +32000 ekin = 0.145345108983022 | erot = 0.671655297433962 | epot = -15.4419041487086 | etot = -14.6249037422916 +33000 ekin = 0.12964040034519 | erot = 0.684261083518556 | epot = -15.4388052261475 | etot = -14.6249037422838 +34000 ekin = 0.114950474500008 | erot = 0.695779112936504 | epot = -15.4356333297121 | etot = -14.6249037422756 +35000 ekin = 0.10135710346033 | erot = 0.706243888527894 | epot = -15.4325047342544 | etot = -14.6249037422662 +36000 ekin = 0.088957633457107 | erot = 0.715697403164625 | epot = -15.4295587788764 | etot = -14.6249037422546 +37000 ekin = 0.0778817390290652 | erot = 0.72418563863568 | epot = -15.4269711199052 | etot = -14.6249037422404 +38000 ekin = 0.068303709154812 | erot = 0.731755309647473 | epot = -15.4249627610255 | etot = -14.6249037422232 +39000 ekin = 0.0604476327394706 | erot = 0.738451228922909 | epot = -15.4238026038659 | etot = -14.6249037422035 +40000 ekin = 0.0545835914676979 | erot = 0.7443145576821 | epot = -15.4238018913318 | etot = -14.624903742182 +41000 ekin = 0.0510142787133839 | erot = 0.749382063190735 | epot = -15.4253000840641 | etot = -14.6249037421599 +42000 ekin = 0.0500531571157636 | erot = 0.753686350478931 | epot = -15.428643249734 | etot = -14.6249037421393 +43000 ekin = 0.0519969858278391 | erot = 0.757256889238991 | epot = -15.4341576171885 | etot = -14.6249037421217 +44000 ekin = 0.0570968352184469 | erot = 0.760121540481399 | epot = -15.4421221178085 | etot = -14.6249037421087 +45000 ekin = 0.065532155346979 | erot = 0.762308219230476 | epot = -15.4527441166789 | etot = -14.6249037421014 +46000 ekin = 0.077391880036746 | erot = 0.763846321567568 | epot = -15.4661419437049 | etot = -14.6249037421006 +47000 ekin = 0.0926650518887463 | erot = 0.764767599959976 | epot = -15.4823363939546 | etot = -14.6249037421059 +48000 ekin = 0.111241466891021 | erot = 0.76510628368957 | epot = -15.5012514926977 | etot = -14.6249037421171 +49000 ekin = 0.132920935183101 | erot = 0.764898395951945 | epot = -15.5227230732685 | etot = -14.6249037421334 +50000 ekin = 0.157428432862297 | erot = 0.764180392178817 | epot = -15.5465125671951 | etot = -14.624903742154 +51000 ekin = 0.184431879186394 | erot = 0.762987403181186 | epot = -15.5723230245453 | etot = -14.6249037421777 +52000 ekin = 0.213559336999611 | erot = 0.761351471408957 | epot = -15.5998145506125 | etot = -14.6249037422039 +53000 ekin = 0.244412677541745 | erot = 0.759300175100897 | epot = -15.6286165948748 | etot = -14.6249037422322 +54000 ekin = 0.276574826726797 | erot = 0.756855909736049 | epot = -15.6583344787255 | etot = -14.6249037422626 +55000 ekin = 0.30960770869724 | erot = 0.754035838659133 | epot = -15.6885472896526 | etot = -14.6249037422962 +56000 ekin = 0.343038597242155 | erot = 0.750852192167397 | epot = -15.7187945317444 | etot = -14.6249037423348 +57000 ekin = 0.376334705011604 | erot = 0.747312289063754 | epot = -15.7485507364561 | etot = -14.6249037423808 +58000 ekin = 0.408870193943412 | erot = 0.743417624903535 | epot = -15.7771915612832 | etot = -14.6249037424363 +59000 ekin = 0.439895666476021 | erot = 0.739161690570186 | epot = -15.803961099549 | etot = -14.6249037425028 +60000 ekin = 0.468524372325726 | erot = 0.734526514748657 | epot = -15.8279546296536 | etot = -14.6249037425792 +61000 ekin = 0.493750804630799 | erot = 0.729479048550173 | epot = -15.8481335958428 | etot = -14.6249037426618 +62000 ekin = 0.514511417905549 | erot = 0.723968952963015 | epot = -15.8633841136119 | etot = -14.6249037427433 +63000 ekin = 0.529785687820656 | erot = 0.717929490923262 | epot = -15.8726189215586 | etot = -14.6249037428146 +64000 ekin = 0.538722043349821 | erot = 0.711282639870032 | epot = -15.874908426086 | etot = -14.6249037428661 +65000 ekin = 0.540763046401741 | erot = 0.703948378732647 | epot = -15.8696151680245 | etot = -14.6249037428901 +66000 ekin = 0.535742115226795 | erot = 0.69585678068686 | epot = -15.856502638796 | etot = -14.6249037428824 +67000 ekin = 0.523930969354056 | erot = 0.686960578434575 | epot = -15.8357952906315 | etot = -14.6249037428429 +68000 ekin = 0.506029704478054 | erot = 0.677245632040232 | epot = -15.8081790792936 | etot = -14.6249037427753 +69000 ekin = 0.483104826199992 | erot = 0.666737270644537 | epot = -15.774745839531 | etot = -14.6249037426865 +70000 ekin = 0.456490218293252 | erot = 0.655501536743317 | epot = -15.7368954976212 | etot = -14.6249037425847 +71000 ekin = 0.427669918862549 | erot = 0.643641521526345 | epot = -15.6962151828672 | etot = -14.6249037424783 +72000 ekin = 0.398160338931557 | erot = 0.631289876691081 | epot = -15.654353957998 | etot = -14.6249037423754 +73000 ekin = 0.369405258276815 | erot = 0.618599034382849 | epot = -15.6129080349415 | etot = -14.6249037422819 +74000 ekin = 0.342691749042209 | erot = 0.605730669564501 | epot = -15.5733261608092 | etot = -14.6249037422025 +75000 ekin = 0.31909052680686 | erot = 0.59284563490598 | epot = -15.5368399038529 | etot = -14.62490374214 +76000 ekin = 0.299420611427412 | erot = 0.580095163563671 | epot = -15.5044195170868 | etot = -14.6249037420957 +77000 ekin = 0.284235504574989 | erot = 0.567613716752661 | epot = -15.4767529633973 | etot = -14.6249037420697 +78000 ekin = 0.273826140866561 | erot = 0.555513536864305 | epot = -15.454243419792 | etot = -14.6249037420611 +79000 ekin = 0.268234635497613 | erot = 0.54388078034572 | epot = -15.4370191579124 | etot = -14.624903742069 +80000 ekin = 0.267272602906451 | erot = 0.532773036269929 | epot = -15.4249493812687 | etot = -14.6249037420923 +81000 ekin = 0.270538934182559 | erot = 0.522218059775773 | epot = -15.4176607360884 | etot = -14.6249037421301 +82000 ekin = 0.277434574359295 | erot = 0.512213638248342 | epot = -15.4145519547894 | etot = -14.6249037421818 +83000 ekin = 0.287175732620333 | erot = 0.50272864056942 | epot = -15.414808115436 | etot = -14.6249037422462 +84000 ekin = 0.298811175848678 | erot = 0.493705451301681 | epot = -15.4174203694717 | etot = -14.6249037423214 +85000 ekin = 0.311252369949697 | erot = 0.485064122067565 | epot = -15.4212202344211 | etot = -14.6249037424038 +86000 ekin = 0.323325626375984 | erot = 0.476708618161036 | epot = -15.424937987025 | etot = -14.624903742488 +87000 ekin = 0.333851795518747 | erot = 0.468535420697862 | epot = -15.4272909587828 | etot = -14.6249037425662 +88000 ekin = 0.341751109758396 | erot = 0.460444399763919 | epot = -15.427099252152 | etot = -14.6249037426296 +89000 ekin = 0.346159825920001 | erot = 0.452351304178873 | epot = -15.4234148727693 | etot = -14.6249037426704 +90000 ekin = 0.346534667470265 | erot = 0.444200535918399 | epot = -15.4156389460718 | etot = -14.6249037426831 +91000 ekin = 0.342715665475867 | erot = 0.435976333753397 | epot = -15.4035957418967 | etot = -14.6249037426674 +92000 ekin = 0.3349227158513 | erot = 0.427710377227648 | epot = -15.3875368357071 | etot = -14.6249037426282 +93000 ekin = 0.323677844433752 | erot = 0.419484336039963 | epot = -15.3680659230484 | etot = -14.6249037425747 +94000 ekin = 0.30966978292125 | erot = 0.411426964072553 | epot = -15.3460004895119 | etot = -14.6249037425181 +95000 ekin = 0.293600014861622 | erot = 0.403706586473099 | epot = -15.3222103438021 | etot = -14.6249037424674 +96000 ekin = 0.276058284884091 | erot = 0.396520701306161 | epot = -15.2974827286175 | etot = -14.6249037424272 +97000 ekin = 0.25746445629565 | erot = 0.390084510982946 | epot = -15.2724527096753 | etot = -14.6249037423967 +98000 ekin = 0.238086767082953 | erot = 0.384619533405539 | epot = -15.2476100428595 | etot = -14.624903742371 +99000 ekin = 0.218116994125883 | erot = 0.380342481668092 | epot = -15.2233632181382 | etot = -14.6249037423442 +100000 ekin = 0.197764845956536 | erot = 0.377453964065333 | epot = -15.2001225523339 | etot = -14.624903742312 +101000 ekin = 0.177333852671335 | erot = 0.376126621697227 | epot = -15.1783642166414 | etot = -14.6249037422728 +102000 ekin = 0.157255732179445 | erot = 0.376493003927733 | epot = -15.1586524783356 | etot = -14.6249037422284 +103000 ekin = 0.138079925448889 | erot = 0.378634329970018 | epot = -15.1416179976015 | etot = -14.6249037421826 +104000 ekin = 0.120430234291316 | erot = 0.382571791335251 | epot = -15.1279057677665 | etot = -14.6249037421399 +105000 ekin = 0.10494672239352 | erot = 0.388261944551333 | epot = -15.118112409049 | etot = -14.6249037421041 +106000 ekin = 0.0922291289493497 | erot = 0.395597086392468 | epot = -15.11272995742 | etot = -14.6249037420782 +107000 ekin = 0.0827918191991084 | erot = 0.404410579138465 | epot = -15.112106140401 | etot = -14.6249037420634 +108000 ekin = 0.0770336430609741 | erot = 0.414486225075992 | epot = -15.116423610197 | etot = -14.62490374206 +109000 ekin = 0.075221312117861 | erot = 0.425570202879186 | epot = -15.1256952570646 | etot = -14.6249037420675 +110000 ekin = 0.0774826364247882 | erot = 0.437383858086522 | epot = -15.1397702365965 | etot = -14.6249037420852 +111000 ekin = 0.0838057148048547 | erot = 0.449635759436015 | epot = -15.1583452163526 | etot = -14.6249037421117 +112000 ekin = 0.0940411317710077 | erot = 0.462031808376879 | epot = -15.1809766822946 | etot = -14.6249037421467 +113000 ekin = 0.107905661684195 | erot = 0.474282718869093 | epot = -15.2070921227426 | etot = -14.6249037421893 +114000 ekin = 0.124987416380568 | erot = 0.486108767327343 | epot = -15.2359999259468 | etot = -14.6249037422389 +115000 ekin = 0.14475347442169 | erot = 0.497242253023055 | epot = -15.2668994697394 | etot = -14.6249037422947 +116000 ekin = 0.166561593123301 | erot = 0.507428522971045 | epot = -15.2988938584499 | etot = -14.6249037423555 +117000 ekin = 0.189677527330859 | erot = 0.516426638198687 | epot = -15.3310079079495 | etot = -14.6249037424199 +118000 ekin = 0.213298790897302 | erot = 0.524010758771369 | epot = -15.3622132921543 | etot = -14.6249037424857 +119000 ekin = 0.23658457696156 | erot = 0.529973112381439 | epot = -15.3914614318934 | etot = -14.6249037425504 +120000 ekin = 0.25869030185824 | erot = 0.534129034925715 | epot = -15.4177230793952 | etot = -14.6249037426113 +121000 ekin = 0.278804196532859 | erot = 0.536324108799716 | epot = -15.4400320479982 | etot = -14.6249037426656 +122000 ekin = 0.296182819519396 | erot = 0.536442962870823 | epot = -15.4575295251008 | etot = -14.6249037427106 +123000 ekin = 0.310182446405815 | erot = 0.534418915104236 | epot = -15.4695051042542 | etot = -14.6249037427442 +124000 ekin = 0.320283972930007 | erot = 0.530243389137678 | epot = -15.4754311048322 | etot = -14.6249037427645 +125000 ekin = 0.326110081462184 | erot = 0.523973945236141 | epot = -15.474987769469 | etot = -14.6249037427707 +126000 ekin = 0.327434709614433 | erot = 0.515739832556637 | epot = -15.4680782849335 | etot = -14.6249037427625 +127000 ekin = 0.324186046690112 | erot = 0.505744172152634 | epot = -15.4548339615826 | etot = -14.6249037427399 +128000 ekin = 0.316445106703942 | erot = 0.49426218578474 | epot = -15.4356110351922 | etot = -14.6249037427035 +129000 ekin = 0.304442167762443 | erot = 0.481635256753056 | epot = -15.4109811671698 | etot = -14.6249037426543 +130000 ekin = 0.288552887156219 | erot = 0.468261006625427 | epot = -15.381717636375 | etot = -14.6249037425933 +131000 ekin = 0.269294696165104 | erot = 0.454579955598623 | epot = -15.3487783942857 | etot = -14.624903742522 +132000 ekin = 0.247322351785515 | erot = 0.44105966132284 | epot = -15.3132857555502 | etot = -14.6249037424419 +133000 ekin = 0.223419723871429 | erot = 0.428177456066543 | epot = -15.276500922293 | etot = -14.6249037423551 +134000 ekin = 0.198483666316777 | erot = 0.416402982921072 | epot = -15.2397903915022 | etot = -14.6249037422644 +135000 ekin = 0.173495806295108 | erot = 0.40618164100245 | epot = -15.2045811894712 | etot = -14.6249037421736 +136000 ekin = 0.149479658252647 | erot = 0.397919790440824 | epot = -15.1723031907806 | etot = -14.6249037420871 +137000 ekin = 0.127443476996608 | erot = 0.391972186713592 | epot = -15.1443194057199 | etot = -14.6249037420097 +138000 ekin = 0.10831297052536 | erot = 0.388631700836367 | epot = -15.1218484133082 | etot = -14.6249037419464 +139000 ekin = 0.0928612988418002 | erot = 0.388121053034821 | epot = -15.1058860937783 | etot = -14.6249037419017 +140000 ekin = 0.0816456573910084 | erot = 0.390586148388801 | epot = -15.0971355476587 | etot = -14.6249037418789 +141000 ekin = 0.0749596349872437 | erot = 0.396090706683564 | epot = -15.0959540835505 | etot = -14.6249037418797 +142000 ekin = 0.0728085537690405 | erot = 0.404612196534891 | epot = -15.1023244922084 | etot = -14.6249037419044 +143000 ekin = 0.0749117535383842 | erot = 0.416039504837645 | epot = -15.1158550003269 | etot = -14.6249037419509 +144000 ekin = 0.0807320498020964 | erot = 0.43017313668478 | epot = -15.1358089285024 | etot = -14.6249037420156 +145000 ekin = 0.08952902558338 | erot = 0.446728893938156 | epot = -15.1611616616151 | etot = -14.6249037420935 +146000 ekin = 0.100429851263191 | erot = 0.465345829669622 | epot = -15.1906794231115 | etot = -14.6249037421787 +147000 ekin = 0.112509264558581 | erot = 0.485598823528122 | epot = -15.2230118303515 | etot = -14.6249037422648 +148000 ekin = 0.124869425792591 | erot = 0.507015469189552 | epot = -15.2567886373282 | etot = -14.6249037423461 +149000 ekin = 0.136710750658436 | erot = 0.529096273051187 | epot = -15.290710766127 | etot = -14.6249037424174 +150000 ekin = 0.147386480806171 | erot = 0.551336607352345 | epot = -15.323626830634 | etot = -14.6249037424755 +151000 ekin = 0.156436378416032 | erot = 0.573248570645276 | epot = -15.3545886915794 | etot = -14.6249037425181 +152000 ekin = 0.163597998371653 | erot = 0.594380933602923 | epot = -15.3828826745196 | etot = -14.624903742545 +153000 ekin = 0.168796920199611 | erot = 0.614335653334474 | epot = -15.4080363160912 | etot = -14.6249037425571 +154000 ekin = 0.172119667637745 | erot = 0.63277992909172 | epot = -15.4298033392862 | etot = -14.6249037425567 +155000 ekin = 0.173774602206285 | erot = 0.649453329865168 | epot = -15.448131674618 | etot = -14.6249037425466 +156000 ekin = 0.174046854480021 | erot = 0.664170048550552 | epot = -15.4631206455605 | etot = -14.62490374253 +157000 ekin = 0.173253451016122 | erot = 0.676816762702534 | epot = -15.4749739562284 | etot = -14.6249037425097 +158000 ekin = 0.171704281293749 | erot = 0.687346881268012 | epot = -15.48395490505 | etot = -14.6249037424883 +159000 ekin = 0.169673443699862 | erot = 0.695772131173121 | epot = -15.4903493173403 | etot = -14.6249037424673 +160000 ekin = 0.167383826014546 | erot = 0.702152502586509 | epot = -15.4944400710487 | etot = -14.6249037424476 +161000 ekin = 0.165005624031702 | erot = 0.706585545944493 | epot = -15.4964949124054 | etot = -14.6249037424292 +162000 ekin = 0.162667154471752 | erot = 0.709195914790859 | epot = -15.4967668116741 | etot = -14.6249037424115 +163000 ekin = 0.160474189581485 | erot = 0.710125892129829 | epot = -15.4955038241048 | etot = -14.6249037423935 +164000 ekin = 0.158532578972596 | erot = 0.709527441008927 | epot = -15.4929637623557 | etot = -14.6249037423742 +165000 ekin = 0.156968465370669 | erot = 0.707556101121189 | epot = -15.4894283088449 | etot = -14.624903742353 +166000 ekin = 0.155941053191124 | erot = 0.704366832058078 | epot = -15.4852116275794 | etot = -14.6249037423302 +167000 ekin = 0.155644496809548 | erot = 0.700111698658369 | epot = -15.4806599377741 | etot = -14.6249037423062 +168000 ekin = 0.156297672988182 | erot = 0.694939119112873 | epot = -15.4761405343834 | etot = -14.6249037422823 +169000 ekin = 0.158122923325456 | erot = 0.688994262094025 | epot = -15.4720209276801 | etot = -14.6249037422606 +170000 ekin = 0.161316852937676 | erot = 0.682420091513849 | epot = -15.4686406866943 | etot = -14.6249037422428 +171000 ekin = 0.166017619146822 | erot = 0.675358520304806 | epot = -15.4662798816825 | etot = -14.6249037422309 +172000 ekin = 0.172273671159511 | erot = 0.667951149520835 | epot = -15.4651285629069 | etot = -14.6249037422266 +173000 ekin = 0.180018623556049 | erot = 0.660339136127854 | epot = -15.4652615019149 | etot = -14.624903742231 +174000 ekin = 0.189056055744924 | erot = 0.65266185183192 | epot = -15.4666216498214 | etot = -14.6249037422445 +175000 ekin = 0.199056860650113 | erot = 0.645054167286172 | epot = -15.4690147702031 | etot = -14.6249037422668 +176000 ekin = 0.209570701317552 | erot = 0.637642422787005 | epot = -15.4721168664013 | etot = -14.6249037422967 +177000 ekin = 0.220052442974625 | erot = 0.630539423737628 | epot = -15.4754956090443 | etot = -14.6249037423321 +178000 ekin = 0.229904071991194 | erot = 0.623839102439311 | epot = -15.4786469168001 | etot = -14.6249037423696 +179000 ekin = 0.238532114427982 | erot = 0.617611757777875 | epot = -15.4810476146108 | etot = -14.624903742405 +180000 ekin = 0.245419064060292 | erot = 0.611900922402653 | epot = -15.4822237288957 | etot = -14.6249037424328 +181000 ekin = 0.250203926055771 | erot = 0.606722796615248 | epot = -15.4818304651186 | etot = -14.6249037424476 +182000 ekin = 0.252761402919565 | erot = 0.602068750131856 | epot = -15.4797338954959 | etot = -14.6249037424445 +183000 ekin = 0.253262634974054 | erot = 0.597910660168588 | epot = -15.4760770375641 | etot = -14.6249037424214 +184000 ekin = 0.252195762131878 | erot = 0.594208023726969 | epot = -15.4713075282387 | etot = -14.6249037423799 +185000 ekin = 0.250326113306321 | erot = 0.59091517967259 | epot = -15.4661450353052 | etot = -14.6249037423263 +186000 ekin = 0.248586758541649 | erot = 0.587986907734566 | epot = -15.4614774085478 | etot = -14.6249037422716 +187000 ekin = 0.247909630265846 | erot = 0.585381224303701 | epot = -15.4581945967982 | etot = -14.6249037422286 +188000 ekin = 0.2490290523945 | erot = 0.583059148733781 | epot = -15.4569919433378 | etot = -14.6249037422095 +189000 ekin = 0.252303803181127 | erot = 0.580982165409763 | epot = -15.4581897108128 | etot = -14.6249037422219 +190000 ekin = 0.25760376351551 | erot = 0.579108718145144 | epot = -15.4616162239281 | etot = -14.6249037422675 +191000 ekin = 0.264292655598098 | erot = 0.577391223758838 | epot = -15.4665876216975 | etot = -14.6249037423406 +192000 ekin = 0.271315385056409 | erot = 0.575774831089113 | epot = -15.4719939585751 | etot = -14.6249037424296 +193000 ekin = 0.277374539132748 | erot = 0.574198584868256 | epot = -15.4764768665202 | etot = -14.6249037425192 +194000 ekin = 0.281161076019677 | erot = 0.572598913484698 | epot = -15.478663732098 | etot = -14.6249037425936 +195000 ekin = 0.281592637347121 | erot = 0.570914645865623 | epot = -15.4774110258523 | etot = -14.6249037426396 +196000 ekin = 0.278011867235596 | erot = 0.569092314484759 | epot = -15.4720079243693 | etot = -14.624903742649 +197000 ekin = 0.270307527592762 | erot = 0.567090473639989 | epot = -15.4623017438531 | etot = -14.6249037426204 +198000 ekin = 0.258940359975855 | erot = 0.564882125458807 | epot = -15.4487262279927 | etot = -14.6249037425581 +199000 ekin = 0.244877476699234 | erot = 0.562454912721902 | epot = -15.4322361318925 | etot = -14.6249037424713 +200000 ekin = 0.229456931018641 | erot = 0.559809284042077 | epot = -15.4141699574324 | etot = -14.6249037423716 +201000 ekin = 0.214214012278847 | erot = 0.556955381706859 | epot = -15.3960731362566 | etot = -14.6249037422709 +202000 ekin = 0.200701376135036 | erot = 0.553909032488863 | epot = -15.3795141508034 | etot = -14.6249037421795 +203000 ekin = 0.190329688710817 | erot = 0.550687503827512 | epot = -15.3659209346435 | etot = -14.6249037421052 +204000 ekin = 0.184246973275337 | erot = 0.547306655840007 | epot = -15.356457371168 | etot = -14.6249037420527 +205000 ekin = 0.183262973705813 | erot = 0.543779043729278 | epot = -15.3519457594592 | etot = -14.6249037420241 +206000 ekin = 0.187816949073515 | erot = 0.540113432736619 | epot = -15.3528341238291 | etot = -14.624903742019 +207000 ekin = 0.197980929490512 | erot = 0.536315658388676 | epot = -15.3592003299145 | etot = -14.6249037420353 +208000 ekin = 0.213487612677366 | erot = 0.53239049820727 | epot = -15.3707818529549 | etot = -14.6249037420703 +209000 ekin = 0.233772362712521 | erot = 0.528344018725095 | epot = -15.3870201235584 | etot = -14.6249037421208 +210000 ekin = 0.258021408692355 | erot = 0.524185756556833 | epot = -15.4071109074329 | etot = -14.6249037421837 +211000 ekin = 0.285222208429996 | erot = 0.519930104708342 | epot = -15.4300560553942 | etot = -14.6249037422558 +212000 ekin = 0.314215813604987 | erot = 0.515596398128489 | epot = -15.454715954067 | etot = -14.6249037423335 +213000 ekin = 0.343753634043937 | erot = 0.511207450608882 | epot = -15.4798648270658 | etot = -14.624903742413 +214000 ekin = 0.372561594270316 | erot = 0.506786560075337 | epot = -15.5042518968352 | etot = -14.6249037424895 +215000 ekin = 0.399412456462858 | erot = 0.502353347158712 | epot = -15.5266695461799 | etot = -14.6249037425583 +216000 ekin = 0.423202666203616 | erot = 0.497919155944113 | epot = -15.5460255647623 | etot = -14.6249037426146 +217000 ekin = 0.443025226540025 | erot = 0.493483013679004 | epot = -15.5614119828738 | etot = -14.6249037426548 +218000 ekin = 0.458227302378849 | erot = 0.489029294856436 | epot = -15.5721603399122 | etot = -14.6249037426769 +219000 ekin = 0.46844301918404 | erot = 0.484528125251435 | epot = -15.5778748871159 | etot = -14.6249037426804 +220000 ekin = 0.473598483116685 | erot = 0.479939108990801 | epot = -15.5784413347739 | etot = -14.6249037426664 +221000 ekin = 0.473894168318713 | erot = 0.475218183432529 | epot = -15.5740160943878 | etot = -14.6249037426366 +222000 ekin = 0.46977401404952 | erot = 0.470326483973494 | epot = -15.565004240616 | etot = -14.624903742593 +223000 ekin = 0.461887320397438 | erot = 0.465239349169368 | epot = -15.552030412105 | etot = -14.6249037425382 +224000 ekin = 0.45104133642262 | erot = 0.459953336121611 | epot = -15.5358984150202 | etot = -14.624903742476 +225000 ekin = 0.438137198422833 | erot = 0.454489515561399 | epot = -15.5175304563959 | etot = -14.6249037424116 +226000 ekin = 0.424086332826247 | erot = 0.448892294163513 | epot = -15.4978823693413 | etot = -14.6249037423516 +227000 ekin = 0.409717105195145 | erot = 0.443224250669953 | epot = -15.4778450981665 | etot = -14.6249037423014 +228000 ekin = 0.395692916861505 | erot = 0.437558473222737 | epot = -15.4581551323492 | etot = -14.6249037422649 +229000 ekin = 0.382463318564619 | erot = 0.431970318931211 | epot = -15.4393373797385 | etot = -14.6249037422426 +230000 ekin = 0.370258116730603 | erot = 0.426530223272752 | epot = -15.421692082236 | etot = -14.6249037422326 +231000 ekin = 0.359118625017489 | erot = 0.421298440292615 | epot = -15.4053208075415 | etot = -14.6249037422314 +232000 ekin = 0.348949729121418 | erot = 0.416321816462733 | epot = -15.3901752878198 | etot = -14.6249037422357 +233000 ekin = 0.339575284188205 | erot = 0.411632247273789 | epot = -15.3761112737045 | etot = -14.6249037422425 +234000 ekin = 0.330784909163314 | erot = 0.407246384303571 | epot = -15.362935035717 | etot = -14.6249037422501 +235000 ekin = 0.322367248495157 | erot = 0.403166248673602 | epot = -15.350437239426 | etot = -14.6249037422572 +236000 ekin = 0.314129851889501 | erot = 0.399380677843556 | epot = -15.3384142719966 | etot = -14.6249037422635 +237000 ekin = 0.305908300164827 | erot = 0.395867600047935 | epot = -15.3266796424818 | etot = -14.624903742269 +238000 ekin = 0.297568064657773 | erot = 0.39259715720464 | epot = -15.3150689641361 | etot = -14.6249037422737 +239000 ekin = 0.289002756414808 | erot = 0.389535643317172 | epot = -15.3034421420093 | etot = -14.6249037422773 +240000 ekin = 0.280132201614557 | erot = 0.386650129641611 | epot = -15.291686073536 | etot = -14.6249037422798 +241000 ekin = 0.270903172980175 | erot = 0.383913574227223 | epot = -15.2797204894877 | etot = -14.6249037422803 +242000 ekin = 0.261294311101929 | erot = 0.381310019034114 | epot = -15.2675080724141 | etot = -14.624903742278 +243000 ekin = 0.251325265433967 | erot = 0.378839435319614 | epot = -15.255068443025 | etot = -14.6249037422714 +244000 ekin = 0.241068460184099 | erot = 0.376521662813181 | epot = -15.2424938652571 | etot = -14.6249037422598 +245000 ekin = 0.230660579660543 | erot = 0.374398842117411 | epot = -15.2299631640205 | etot = -14.6249037422425 +246000 ekin = 0.220310176855077 | erot = 0.372535772164605 | epot = -15.2177496912391 | etot = -14.6249037422194 +247000 ekin = 0.21029792040831 | erot = 0.371017759432739 | epot = -15.2062194220324 | etot = -14.6249037421913 +248000 ekin = 0.200966973970282 | erot = 0.369945779906298 | epot = -15.1958164960366 | etot = -14.62490374216 +249000 ekin = 0.19270275205643 | erot = 0.369429135338942 | epot = -15.1870356295232 | etot = -14.6249037421279 +250000 ekin = 0.18590352409262 | erot = 0.369576201101644 | epot = -15.1803834672921 | etot = -14.6249037420978 +251000 ekin = 0.180945546219597 | erot = 0.370484246994953 | epot = -15.1763335352872 | etot = -14.6249037420727 +252000 ekin = 0.178147956309677 | erot = 0.372229589272508 | epot = -15.1752812876371 | etot = -14.624903742055 +253000 ekin = 0.177743031465493 | erot = 0.374859230993345 | epot = -15.1775060045052 | etot = -14.6249037420463 +254000 ekin = 0.179856300055144 | erot = 0.378385037101541 | epot = -15.1831450792041 | etot = -14.6249037420475 +255000 ekin = 0.184498455786623 | erot = 0.382781080046676 | epot = -15.1921832778916 | etot = -14.6249037420583 +256000 ekin = 0.191568141873245 | erot = 0.387983970946509 | epot = -15.2044558548979 | etot = -14.6249037420781 +257000 ekin = 0.200862084874684 | erot = 0.39389562099413 | epot = -15.2196614479746 | etot = -14.6249037421058 +258000 ekin = 0.212087875567067 | erot = 0.400387498987617 | epot = -15.2373791166953 | etot = -14.6249037421406 +259000 ekin = 0.22487530619229 | erot = 0.407305396776974 | epot = -15.2570844451511 | etot = -14.6249037421818 +260000 ekin = 0.238784314763371 | erot = 0.414473950040919 | epot = -15.2781620070334 | etot = -14.6249037422291 +261000 ekin = 0.253310397642053 | erot = 0.42170059668304 | epot = -15.2999147366073 | etot = -14.6249037422822 +262000 ekin = 0.267890750412286 | erot = 0.428779149459046 | epot = -15.3215736422117 | etot = -14.6249037423403 +263000 ekin = 0.281915541777785 | erot = 0.435493571930371 | epot = -15.3423128561102 | etot = -14.6249037424021 +264000 ekin = 0.294748319449044 | erot = 0.441622773940652 | epot = -15.3612748358547 | etot = -14.624903742465 +265000 ekin = 0.305757851305137 | erot = 0.446947232466447 | epot = -15.3776088262971 | etot = -14.6249037425255 +266000 ekin = 0.314361275702132 | erot = 0.451257984268096 | epot = -15.3905230025497 | etot = -14.6249037425794 +267000 ekin = 0.320075758813841 | erot = 0.454368036195507 | epot = -15.3993475376314 | etot = -14.624903742622 +268000 ekin = 0.322573111285627 | erot = 0.456125517716869 | epot = -15.403602371651 | etot = -14.6249037426485 +269000 ekin = 0.321728949456794 | erot = 0.456427019949868 | epot = -15.403059712062 | etot = -14.6249037426553 +270000 ekin = 0.31765519820333 | erot = 0.45522869606994 | epot = -15.3977876369143 | etot = -14.624903742641 +271000 ekin = 0.310703151367432 | erot = 0.452552178355822 | epot = -15.3881590723309 | etot = -14.6249037426077 +272000 ekin = 0.301426233536413 | erot = 0.448482664562071 | epot = -15.3748126406594 | etot = -14.6249037425609 +273000 ekin = 0.290499502093209 | erot = 0.443158007811074 | epot = -15.3585612524138 | etot = -14.6249037425095 +274000 ekin = 0.278606962226069 | erot = 0.436750209657617 | epot = -15.3402609143468 | etot = -14.6249037424631 +275000 ekin = 0.26632348034077 | erot = 0.429443553158618 | epot = -15.3206707759287 | etot = -14.6249037424293 +276000 ekin = 0.254026977158081 | erot = 0.421415402004818 | epot = -15.3003461215739 | etot = -14.624903742411 +277000 ekin = 0.241871064453538 | erot = 0.412825312322111 | epot = -15.2796001191811 | etot = -14.6249037424054 +278000 ekin = 0.229828041579721 | erot = 0.403815416629946 | epot = -15.2585472006151 | etot = -14.6249037424054 +279000 ekin = 0.217786141146189 | erot = 0.394521119096963 | epot = -15.2372110026452 | etot = -14.624903742402 +280000 ekin = 0.205666064593732 | erot = 0.38508770303191 | epot = -15.2156575100133 | etot = -14.6249037423876 +281000 ekin = 0.19351860427424 | erot = 0.375686870762611 | epot = -15.194109217395 | etot = -14.6249037423581 +282000 ekin = 0.181576720747694 | erot = 0.366527860021383 | epot = -15.1730083230829 | etot = -14.6249037423139 +283000 ekin = 0.170254050626048 | erot = 0.357859944223912 | epot = -15.1530177371086 | etot = -14.6249037422586 +284000 ekin = 0.16009863107041 | erot = 0.349965713705531 | epot = -15.1349680869742 | etot = -14.6249037421982 +285000 ekin = 0.151720356670754 | erot = 0.343146625519695 | epot = -15.1197707243297 | etot = -14.6249037421393 +286000 ekin = 0.145712559183906 | erot = 0.337703485420487 | epot = -15.1083197866921 | etot = -14.6249037420877 +287000 ekin = 0.142584250545045 | erot = 0.33391483609244 | epot = -15.1014028286853 | etot = -14.6249037420479 +288000 ekin = 0.14271294134083 | erot = 0.33201595204223 | epot = -15.0996326354053 | etot = -14.6249037420222 +289000 ekin = 0.146320998448773 | erot = 0.332180585089635 | epot = -15.1034053255502 | etot = -14.6249037420118 +290000 ekin = 0.153472816921521 | erot = 0.334506983378674 | epot = -15.1128835423164 | etot = -14.6249037420162 +291000 ekin = 0.16408646566307 | erot = 0.339009144348004 | epot = -15.1279993520452 | etot = -14.6249037420341 +292000 ekin = 0.177952173600894 | erot = 0.345613807734655 | epot = -15.1484697233998 | etot = -14.6249037420642 +293000 ekin = 0.194750859969321 | erot = 0.354163344443058 | epot = -15.1738179465174 | etot = -14.624903742105 +294000 ekin = 0.214068309159694 | erot = 0.364424408222029 | epot = -15.2033964595369 | etot = -14.6249037421551 +295000 ekin = 0.23540371040359 | erot = 0.376101928511103 | epot = -15.2364093811279 | etot = -14.6249037422133 +296000 ekin = 0.258174229753498 | erot = 0.388857685536646 | epot = -15.2719356575678 | etot = -14.6249037422776 +297000 ekin = 0.281719360135706 | erot = 0.402332315571764 | epot = -15.3089554180538 | etot = -14.6249037423463 +298000 ekin = 0.305309684523697 | erot = 0.416169191335652 | epot = -15.3463826182759 | etot = -14.6249037424165 +299000 ekin = 0.328164426016654 | erot = 0.430038291827268 | epot = -15.3831064603292 | etot = -14.6249037424853 +300000 ekin = 0.349480947255048 | erot = 0.443657997414315 | epot = -15.4180426872181 | etot = -14.6249037425488 +301000 ekin = 0.368477349759193 | erot = 0.456812763608568 | epot = -15.4501938559701 | etot = -14.6249037426023 +302000 ekin = 0.384446573101124 | erot = 0.469364841860938 | epot = -15.4787151576043 | etot = -14.6249037426422 +303000 ekin = 0.396817065634558 | erot = 0.481258609604811 | epot = -15.5029794179039 | etot = -14.6249037426646 +304000 ekin = 0.405211709647007 | erot = 0.492516637287636 | epot = -15.5226320896017 | etot = -14.624903742667 +305000 ekin = 0.409494186865868 | erot = 0.503227368870062 | epot = -15.5376252983853 | etot = -14.6249037426493 +306000 ekin = 0.409791521882642 | erot = 0.513525227982917 | epot = -15.5482204924792 | etot = -14.6249037426137 +307000 ekin = 0.406484029567507 | erot = 0.523565033268454 | epot = -15.5549528054007 | etot = -14.6249037425647 +308000 ekin = 0.400159443093576 | erot = 0.533493670193517 | epot = -15.5585568557963 | etot = -14.6249037425092 +309000 ekin = 0.391535685673409 | erot = 0.543422788904487 | epot = -15.5598622170328 | etot = -14.6249037424549 +310000 ekin = 0.381364662749467 | erot = 0.553406603763533 | epot = -15.559675008922 | etot = -14.624903742409 +311000 ekin = 0.370335174700701 | erot = 0.563428434509133 | epot = -15.5586673515868 | etot = -14.624903742377 +312000 ekin = 0.358994462073939 | erot = 0.573398378860855 | epot = -15.5572965832959 | etot = -14.6249037423611 +313000 ekin = 0.347704062021925 | erot = 0.583162598674903 | epot = -15.5557704030573 | etot = -14.6249037423605 +314000 ekin = 0.33663740290675 | erot = 0.592522528333923 | epot = -15.5540636736116 | etot = -14.6249037423709 +315000 ekin = 0.325816357219143 | erot = 0.601260411441213 | epot = -15.5519805110473 | etot = -14.6249037423869 +316000 ekin = 0.31517501281672 | erot = 0.60916645196768 | epot = -15.5492452071863 | etot = -14.6249037424019 +317000 ekin = 0.304633856553889 | erot = 0.616062831072119 | epot = -15.5456004300365 | etot = -14.6249037424105 +318000 ekin = 0.294167456686821 | erot = 0.621820866636781 | epot = -15.5408920657325 | etot = -14.6249037424089 +319000 ekin = 0.283852816310689 | erot = 0.626369338624031 | epot = -15.5351258973307 | etot = -14.6249037423959 +320000 ekin = 0.273891844373646 | erot = 0.62969394858388 | epot = -15.5284895353295 | etot = -14.624903742372 +321000 ekin = 0.264607615830763 | erot = 0.631829520445007 | epot = -15.5213408786157 | etot = -14.6249037423399 +322000 ekin = 0.256418665980724 | erot = 0.632847556381818 | epot = -15.5141699646656 | etot = -14.6249037423031 +323000 ekin = 0.249797892887888 | erot = 0.632842055921319 | epot = -15.5075436910747 | etot = -14.6249037422655 +324000 ekin = 0.245223011939643 | erot = 0.631916211662829 | epot = -15.5020429658332 | etot = -14.6249037422308 +325000 ekin = 0.243124676660885 | erot = 0.630171930979599 | epot = -15.4982003498433 | etot = -14.6249037422029 +326000 ekin = 0.243837159968202 | erot = 0.62770331019607 | epot = -15.4964442123487 | etot = -14.6249037421844 +327000 ekin = 0.247555458534598 | erot = 0.624594349329564 | epot = -15.4970535500418 | etot = -14.6249037421777 +328000 ekin = 0.254302069317208 | erot = 0.620920422826662 | epot = -15.5001262343276 | etot = -14.6249037421837 +329000 ekin = 0.263906382978448 | erot = 0.616752378549749 | epot = -15.5055625037309 | etot = -14.6249037422027 +330000 ekin = 0.275999298196581 | erot = 0.612161709808553 | epot = -15.513064750239 | etot = -14.6249037422339 +331000 ekin = 0.290024872454518 | erot = 0.6072251384784 | epot = -15.5221537532081 | etot = -14.6249037422752 +332000 ekin = 0.305269328205317 | erot = 0.602027230533175 | epot = -15.5322003010622 | etot = -14.6249037423237 +333000 ekin = 0.32090561137506 | erot = 0.59666030333851 | epot = -15.5424696570894 | etot = -14.6249037423759 +334000 ekin = 0.336049438962957 | erot = 0.59122171045733 | epot = -15.5521748918481 | etot = -14.6249037424278 +335000 ekin = 0.349821102707528 | erot = 0.585809355783074 | epot = -15.5605342009664 | etot = -14.6249037424758 +336000 ekin = 0.361406827299004 | erot = 0.580516763971273 | epot = -15.5668273337865 | etot = -14.6249037425162 +337000 ekin = 0.370114335989199 | erot = 0.575429096256477 | epot = -15.570447174792 | etot = -14.6249037425463 +338000 ekin = 0.375418963131835 | erot = 0.570621177508979 | epot = -15.5709438832047 | etot = -14.6249037425639 +339000 ekin = 0.376998306684161 | erot = 0.566157982091391 | epot = -15.5680600313428 | etot = -14.6249037425673 +340000 ekin = 0.374754278532076 | erot = 0.562097189039027 | epot = -15.561755210127 | etot = -14.6249037425559 +341000 ekin = 0.368821588409674 | erot = 0.558493134368603 | epot = -15.5522184653082 | etot = -14.6249037425299 +342000 ekin = 0.359561251230654 | erot = 0.555400700218385 | epot = -15.5398656939398 | etot = -14.6249037424907 +343000 ekin = 0.347537853254552 | erot = 0.552877785918206 | epot = -15.5253193816135 | etot = -14.6249037424408 +344000 ekin = 0.333480374963866 | erot = 0.5509852684009 | epot = -15.5093693857484 | etot = -14.6249037423837 +345000 ekin = 0.318228359784356 | erot = 0.549783918348281 | epot = -15.4929160204566 | etot = -14.6249037423239 +346000 ekin = 0.302667555547469 | erot = 0.549328430110417 | epot = -15.4768997279243 | etot = -14.6249037422664 +347000 ekin = 0.28766105744341 | erot = 0.549659363310447 | epot = -15.4622241629696 | etot = -14.6249037422157 +348000 ekin = 0.273982878354205 | erot = 0.550794243902763 | epot = -15.4496808644331 | etot = -14.6249037421761 +349000 ekin = 0.262260631617843 | erot = 0.552719272009514 | epot = -15.439883645778 | etot = -14.6249037421507 +350000 ekin = 0.252932884528192 | erot = 0.555383042233133 | epot = -15.4332196689026 | etot = -14.6249037421413 +351000 ekin = 0.246225113234617 | erot = 0.55869341876511 | epot = -15.4298222741477 | etot = -14.624903742148 +352000 ekin = 0.242146418558379 | erot = 0.562518344425243 | epot = -15.4295685051533 | etot = -14.6249037421697 +353000 ekin = 0.240507191582831 | erot = 0.566690733134613 | epot = -15.4321016669209 | etot = -14.6249037422035 +354000 ekin = 0.240955911174275 | erot = 0.571016874087082 | epot = -15.4368765275071 | etot = -14.6249037422458 +355000 ekin = 0.243030568944454 | erot = 0.575286990707861 | epot = -15.4432213019444 | etot = -14.624903742292 +356000 ekin = 0.246218336341954 | erot = 0.579286102670435 | epot = -15.4504081813504 | etot = -14.6249037423381 +357000 ekin = 0.250015504867581 | erot = 0.58280308408374 | epot = -15.4577223313315 | etot = -14.6249037423802 +358000 ekin = 0.253980003728839 | erot = 0.585636256510467 | epot = -15.4645200026551 | etot = -14.6249037424158 +359000 ekin = 0.257771924238821 | erot = 0.587595069854197 | epot = -15.4702707365363 | etot = -14.6249037424433 +360000 ekin = 0.261178006692924 | erot = 0.588498175296143 | epot = -15.4745799244512 | etot = -14.6249037424621 +361000 ekin = 0.264121303804436 | erot = 0.588169931158563 | epot = -15.4771949774355 | etot = -14.6249037424725 +362000 ekin = 0.26665626894814 | erot = 0.586437607933123 | epot = -15.4779976193568 | etot = -14.6249037424755 +363000 ekin = 0.268947338174106 | erot = 0.583131261384995 | epot = -15.4769823420322 | etot = -14.6249037424731 +364000 ekin = 0.271226723299596 | erot = 0.578087502910441 | epot = -15.4742179686788 | etot = -14.6249037424688 +365000 ekin = 0.273728224388818 | erot = 0.571157191000725 | epot = -15.469789157857 | etot = -14.6249037424674 +366000 ekin = 0.27660157052003 | erot = 0.562216266683608 | epot = -15.4637215796777 | etot = -14.624903742474 +367000 ekin = 0.279824898676208 | erot = 0.551178529879214 | epot = -15.4559071710475 | etot = -14.6249037424921 +368000 ekin = 0.283144751011421 | erot = 0.538009090150606 | epot = -15.446057583683 | etot = -14.624903742521 +369000 ekin = 0.286073979195429 | erot = 0.522737270878628 | epot = -15.43371499263 | etot = -14.6249037425559 +370000 ekin = 0.287962637923178 | erot = 0.50546765170011 | epot = -15.4183340322108 | etot = -14.6249037425875 +371000 ekin = 0.288129562576893 | erot = 0.486387667907303 | epot = -15.3994209730894 | etot = -14.6249037426052 +372000 ekin = 0.286016270828215 | erot = 0.465769998081936 | epot = -15.3766900115109 | etot = -14.6249037426008 +373000 ekin = 0.281314492917267 | erot = 0.443968246943336 | epot = -15.3501864824312 | etot = -14.6249037425706 +374000 ekin = 0.274029637541304 | erot = 0.421405384813941 | epot = -15.3203387648723 | etot = -14.6249037425171 +375000 ekin = 0.264468317323927 | erot = 0.398555847613352 | epot = -15.2879279073837 | etot = -14.6249037424464 +376000 ekin = 0.253165169267974 | erot = 0.375923572596667 | epot = -15.2539924842319 | etot = -14.6249037423673 +377000 ekin = 0.240780733674519 | erot = 0.354018931407049 | epot = -15.2197034073693 | etot = -14.6249037422878 +378000 ekin = 0.228003530692849 | erot = 0.333337224177657 | epot = -15.1862444970844 | etot = -14.6249037422138 +379000 ekin = 0.215478669427367 | erot = 0.314340303318035 | epot = -15.1547227148943 | etot = -14.6249037421489 +380000 ekin = 0.203769466320298 | erot = 0.297441561967809 | epot = -15.1261147703827 | etot = -14.6249037420946 +381000 ekin = 0.193344913038602 | erot = 0.282993579610754 | epot = -15.1012422347007 | etot = -14.6249037420513 +382000 ekin = 0.1845790971167 | erot = 0.271277560103436 | epot = -15.0807603992401 | etot = -14.62490374202 +383000 ekin = 0.177749902922622 | erot = 0.26249431847454 | epot = -15.0651479633984 | etot = -14.6249037420012 +384000 ekin = 0.173031383434508 | erot = 0.256757595375745 | epot = -15.0546927208059 | etot = -14.6249037419956 +385000 ekin = 0.170483112154869 | erot = 0.254091341095724 | epot = -15.049478195254 | etot = -14.6249037420034 +386000 ekin = 0.170046361592442 | erot = 0.254432809989109 | epot = -15.0493829136049 | etot = -14.6249037420233 +387000 ekin = 0.171558026227206 | erot = 0.257642587604648 | epot = -15.0541043558835 | etot = -14.6249037420517 +388000 ekin = 0.174787865439128 | erot = 0.263521131370077 | epot = -15.0632127388927 | etot = -14.6249037420835 +389000 ekin = 0.179494526901848 | erot = 0.271829477565643 | epot = -15.0762277465811 | etot = -14.6249037421136 +390000 ekin = 0.185484901052496 | erot = 0.282310127810724 | epot = -15.0926987710012 | etot = -14.624903742138 +391000 ekin = 0.192654775276086 | erot = 0.294703495236184 | epot = -15.1122620126683 | etot = -14.624903742156 +392000 ekin = 0.200990711955861 | erot = 0.308756153372879 | epot = -15.1346506074993 | etot = -14.6249037421705 +393000 ekin = 0.210524629688573 | erot = 0.324219483681282 | epot = -15.1596478555577 | etot = -14.6249037421878 +394000 ekin = 0.22125039811835 | erot = 0.340840530849664 | epot = -15.1869946711827 | etot = -14.6249037422146 +395000 ekin = 0.233028912153826 | erot = 0.358349828151301 | epot = -15.2162824825616 | etot = -14.6249037422565 +396000 ekin = 0.2455168348482 | erot = 0.376452447324096 | epot = -15.2468730244869 | etot = -14.6249037423146 +397000 ekin = 0.25814964628924 | erot = 0.394827815017667 | epot = -15.2778812036919 | etot = -14.624903742385 +398000 ekin = 0.270192540270399 | erot = 0.4131410333725 | epot = -15.3082373161018 | etot = -14.6249037424589 +399000 ekin = 0.280849396853854 | erot = 0.431064534842813 | epot = -15.3368176742223 | etot = -14.6249037425256 +400000 ekin = 0.289399657315509 | erot = 0.448305349545533 | epot = -15.3626087494363 | etot = -14.6249037425752 +401000 ekin = 0.295323233787914 | erot = 0.464631356382232 | epot = -15.3848583327717 | etot = -14.6249037426015 +402000 ekin = 0.298377750401429 | erot = 0.479890206670972 | epot = -15.4031716996757 | etot = -14.6249037426033 +403000 ekin = 0.298608046776847 | erot = 0.494016844836358 | epot = -15.4175286341982 | etot = -14.624903742585 +404000 ekin = 0.296288720276099 | erot = 0.507028747324982 | epot = -15.4282212101551 | etot = -14.624903742554 +405000 ekin = 0.29181945089068 | erot = 0.519011022290344 | epot = -15.4357342157007 | etot = -14.6249037425197 +406000 ekin = 0.285604695316787 | erot = 0.530095491696252 | epot = -15.440603929503 | etot = -14.62490374249 +407000 ekin = 0.27795179501284 | erot = 0.540438449781457 | epot = -15.4432939872644 | etot = -14.6249037424701 +408000 ekin = 0.269015012492725 | erot = 0.550201084797105 | epot = -15.4441198397503 | etot = -14.6249037424605 +409000 ekin = 0.258799683406998 | erot = 0.559535019811799 | epot = -15.4432384456764 | etot = -14.6249037424576 +410000 ekin = 0.247223943172304 | erot = 0.568573648692186 | epot = -15.4407013343195 | etot = -14.624903742455 +411000 ekin = 0.234219542826644 | erot = 0.577428429926533 | epot = -15.4365517151989 | etot = -14.6249037424457 +412000 ekin = 0.219842320368382 | erot = 0.5861883861288 | epot = -15.4309344489209 | etot = -14.6249037424237 +413000 ekin = 0.204359948374925 | erot = 0.594920843620856 | epot = -15.4241845343826 | etot = -14.6249037423868 +414000 ekin = 0.188290368309528 | erot = 0.603671832826723 | epot = -15.4168659434726 | etot = -14.6249037423363 +415000 ekin = 0.17237708181679 | erot = 0.612465324291743 | epot = -15.4097461483867 | etot = -14.6249037422781 +416000 ekin = 0.157503657630917 | erot = 0.621301324615619 | epot = -15.4037087244673 | etot = -14.6249037422208 +417000 ekin = 0.144565276806003 | erot = 0.630153567596961 | epot = -15.3996225865765 | etot = -14.6249037421735 +418000 ekin = 0.134326161306162 | erot = 0.638967960411851 | epot = -15.3981978638625 | etot = -14.6249037421445 +419000 ekin = 0.127295713866961 | erot = 0.647663024756136 | epot = -15.3998624807615 | etot = -14.6249037421384 +420000 ekin = 0.123652074078926 | erot = 0.656133267678405 | epot = -15.404689083913 | etot = -14.6249037421557 +421000 ekin = 0.123230332545423 | erot = 0.664256043547052 | epot = -15.4123901182846 | etot = -14.6249037421921 +422000 ekin = 0.125576493084645 | erot = 0.671901405101299 | epot = -15.4223816404261 | etot = -14.6249037422401 +423000 ekin = 0.130051930466291 | erot = 0.678943694027994 | epot = -15.4338993667851 | etot = -14.6249037422908 +424000 ekin = 0.135961143238941 | erot = 0.68527308622734 | epot = -15.4461379718019 | etot = -14.6249037423356 +425000 ekin = 0.142671659965653 | erot = 0.690804983811737 | epot = -15.4583803861463 | etot = -14.6249037423689 +426000 ekin = 0.149699767318955 | erot = 0.69548556134855 | epot = -15.4700890710557 | etot = -14.6249037423882 +427000 ekin = 0.156747049208564 | erot = 0.699292628464386 | epot = -15.4809434200676 | etot = -14.6249037423947 +428000 ekin = 0.163686553654653 | erot = 0.702231990285693 | epot = -15.4908222863327 | etot = -14.6249037423924 +429000 ekin = 0.170509683514881 | erot = 0.704330315301697 | epot = -15.4997437412031 | etot = -14.6249037423865 +430000 ekin = 0.177252892951705 | erot = 0.705626025883602 | epot = -15.5077826612176 | etot = -14.6249037423823 +431000 ekin = 0.183925691222895 | erot = 0.706159951516283 | epot = -15.5149893851227 | etot = -14.6249037423835 +432000 ekin = 0.19045785108011 | erot = 0.705966883793978 | epot = -15.5213284772661 | etot = -14.624903742392 +433000 ekin = 0.196676887389506 | erot = 0.705069371776843 | epot = -15.5266500015735 | etot = -14.6249037424072 +434000 ekin = 0.202317433899842 | erot = 0.703474477741428 | epot = -15.5306956540681 | etot = -14.6249037424269 +435000 ekin = 0.207056046506956 | erot = 0.701173837003811 | epot = -15.5331336259585 | etot = -14.6249037424477 +436000 ekin = 0.210560164857125 | erot = 0.698146912242933 | epot = -15.5336108195661 | etot = -14.6249037424661 +437000 ekin = 0.212539330538931 | erot = 0.694366864819831 | epot = -15.5318099378377 | etot = -14.624903742479 +438000 ekin = 0.212789433625871 | erot = 0.689808070113593 | epot = -15.5275012462235 | etot = -14.624903742484 +439000 ekin = 0.211224885327214 | erot = 0.684454087056214 | epot = -15.5205827148631 | etot = -14.6249037424797 +440000 ekin = 0.207897417438809 | erot = 0.678304934040255 | epot = -15.5111060939441 | etot = -14.624903742465 +441000 ekin = 0.203002684917561 | erot = 0.671382822496918 | epot = -15.4992892498548 | etot = -14.6249037424403 +442000 ekin = 0.196876783893415 | erot = 0.66373594678721 | epot = -15.4855164730867 | etot = -14.6249037424061 +443000 ekin = 0.189984458135294 | erot = 0.655440346227568 | epot = -15.4703285467262 | etot = -14.6249037423634 +444000 ekin = 0.182899715135625 | erot = 0.646600090308741 | epot = -15.4544035477581 | etot = -14.6249037423138 +445000 ekin = 0.176278659807151 | erot = 0.637346059016373 | epot = -15.4385284610832 | etot = -14.6249037422597 +446000 ekin = 0.170824489262207 | erot = 0.627833490901199 | epot = -15.4235617223673 | etot = -14.6249037422039 +447000 ekin = 0.16724611578148 | erot = 0.618238375507256 | epot = -15.4103882334382 | etot = -14.6249037421495 +448000 ekin = 0.166214016011086 | erot = 0.608752709243579 | epot = -15.3998704673542 | etot = -14.6249037420995 +449000 ekin = 0.1683180025474 | erot = 0.599578546514547 | epot = -15.3928002911186 | etot = -14.6249037420567 +450000 ekin = 0.174030350885976 | erot = 0.590920601688637 | epot = -15.3898546945984 | etot = -14.6249037420238 +451000 ekin = 0.183674309612486 | erot = 0.582976972209394 | epot = -15.3915550238252 | etot = -14.6249037420033 +452000 ekin = 0.197394458885248 | erot = 0.575927582956616 | epot = -15.39822578384 | etot = -14.6249037419981 +453000 ekin = 0.215124290963754 | erot = 0.569920414705972 | epot = -15.4099484476811 | etot = -14.6249037420114 +454000 ekin = 0.236549344238332 | erot = 0.565056494271021 | epot = -15.4265095805559 | etot = -14.6249037420465 +455000 ekin = 0.261070666492934 | erot = 0.561375729612865 | epot = -15.4473501382115 | etot = -14.6249037421057 +456000 ekin = 0.287780783019101 | erot = 0.558846520705115 | epot = -15.4715310459133 | etot = -14.6249037421891 +457000 ekin = 0.315469350479039 | erot = 0.557362227354604 | epot = -15.4977353201268 | etot = -14.6249037422931 +458000 ekin = 0.342675461161211 | erot = 0.556746783054113 | epot = -15.5243259866255 | etot = -14.6249037424101 +459000 ekin = 0.367796771324328 | erot = 0.556770049266128 | epot = -15.5494705631189 | etot = -14.6249037425284 +460000 ekin = 0.3892528364295 | erot = 0.557171234683844 | epot = -15.5713278137471 | etot = -14.6249037426338 +461000 ekin = 0.405683830372718 | erot = 0.557686417732241 | epot = -15.5882739908163 | etot = -14.6249037427113 +462000 ekin = 0.416150509763905 | erot = 0.558074591842708 | epot = -15.5991288443566 | etot = -14.6249037427499 +463000 ekin = 0.420292029665246 | erot = 0.558136338549459 | epot = -15.6033321109587 | etot = -14.624903742744 +464000 ekin = 0.418399545178514 | erot = 0.557720582601952 | epot = -15.6010238704768 | etot = -14.6249037426963 +465000 ekin = 0.411377435968826 | erot = 0.55671776612672 | epot = -15.5929989447132 | etot = -14.6249037426177 +466000 ekin = 0.400588481170777 | erot = 0.555041504869193 | epot = -15.5805337285653 | etot = -14.6249037425253 +467000 ekin = 0.387608315925912 | erot = 0.552604267015981 | epot = -15.5651163253807 | etot = -14.6249037424389 +468000 ekin = 0.373939506071419 | erot = 0.549294716065778 | epot = -15.5481379645134 | etot = -14.6249037423762 +469000 ekin = 0.360748545285941 | erot = 0.544964338611031 | epot = -15.5306166262458 | etot = -14.6249037423488 +470000 ekin = 0.348685397522481 | erot = 0.539428754142283 | epot = -15.5130178940239 | etot = -14.6249037423591 +471000 ekin = 0.33782542530965 | erot = 0.53248528288589 | epot = -15.495214450596 | etot = -14.6249037424005 +472000 ekin = 0.327743216876187 | erot = 0.523944004295118 | epot = -15.4765909636299 | etot = -14.6249037424586 +473000 ekin = 0.317695625905249 | erot = 0.513665869846711 | epot = -15.4562652382675 | etot = -14.6249037425155 +474000 ekin = 0.306866206292903 | erot = 0.501599410558902 | epot = -15.4333693594053 | etot = -14.6249037425535 +475000 ekin = 0.294611572516014 | erot = 0.487807694339925 | epot = -15.4073230094157 | etot = -14.6249037425598 +476000 ekin = 0.280654133645735 | erot = 0.472479343853221 | epot = -15.3780372200274 | etot = -14.6249037425284 +477000 ekin = 0.265182667318346 | erot = 0.455920989277164 | epot = -15.3460073990571 | etot = -14.6249037424615 +478000 ekin = 0.248846579355896 | erot = 0.438532535944716 | epot = -15.3122828576688 | etot = -14.6249037423682 +479000 ekin = 0.232654569020801 | erot = 0.420770062233786 | epot = -15.2783283735167 | etot = -14.6249037422621 +480000 ekin = 0.217807844646274 | erot = 0.403103245642895 | epot = -15.2458148324472 | etot = -14.624903742158 +481000 ekin = 0.205508255202274 | erot = 0.385974572360121 | epot = -15.2163865696318 | etot = -14.6249037420694 +482000 ekin = 0.196781566941766 | erot = 0.36976631024765 | epot = -15.1914516191951 | etot = -14.6249037420057 +483000 ekin = 0.19234694356787 | erot = 0.354778814406374 | epot = -15.1720294999463 | etot = -14.6249037419721 +484000 ekin = 0.192548846646396 | erot = 0.341220938396507 | epot = -15.1586735270111 | etot = -14.6249037419682 +485000 ekin = 0.197351634264796 | erot = 0.329210924265182 | epot = -15.1514663005207 | etot = -14.6249037419907 +486000 ekin = 0.206384571112674 | erot = 0.318784712513058 | epot = -15.1500730256597 | etot = -14.624903742034 +487000 ekin = 0.219018661981128 | erot = 0.309908337315953 | epot = -15.1538307413883 | etot = -14.6249037420912 +488000 ekin = 0.234457053485615 | erot = 0.302491737711597 | epot = -15.1618525333532 | etot = -14.6249037421559 +489000 ekin = 0.251825722282228 | erot = 0.296402451840807 | epot = -15.1731319163449 | etot = -14.6249037422219 +490000 ekin = 0.270257579252373 | erot = 0.291478772534408 | epot = -15.1866400940707 | etot = -14.6249037422839 +491000 ekin = 0.288968023940477 | erot = 0.287542686829702 | epot = -15.2014144531066 | etot = -14.6249037423364 +492000 ekin = 0.307321746939982 | erot = 0.28441316533236 | epot = -15.2166386546473 | etot = -14.624903742375 +493000 ekin = 0.32488919226749 | erot = 0.281920128741024 | epot = -15.2317130634052 | etot = -14.6249037423967 +494000 ekin = 0.341487883386483 | erot = 0.279918789013753 | epot = -15.2463104147992 | etot = -14.624903742399 +495000 ekin = 0.35720080106069 | erot = 0.278303167954071 | epot = -15.2604077113969 | etot = -14.6249037423821 +496000 ekin = 0.372363075866133 | erot = 0.277016625443694 | epot = -15.274283443659 | etot = -14.6249037423491 +497000 ekin = 0.387510424729673 | erot = 0.276056483801325 | epot = -15.288470650837 | etot = -14.624903742306 +498000 ekin = 0.403287744735438 | erot = 0.275469725413168 | epot = -15.3036612124104 | etot = -14.6249037422618 +499000 ekin = 0.42032292393259 | erot = 0.275337682298044 | epot = -15.320564348458 | etot = -14.6249037422274 +500000 ekin = 0.43907820686993 | erot = 0.275749832423184 | epot = -15.3397317815074 | etot = -14.6249037422143 +501000 ekin = 0.459699055393576 | erot = 0.27677002458897 | epot = -15.3613728222153 | etot = -14.6249037422327 +502000 ekin = 0.481887975238202 | erot = 0.278401857022776 | epot = -15.3851935745495 | etot = -14.6249037422885 +503000 ekin = 0.504836001700849 | erot = 0.28056227342693 | epot = -15.410302017509 | etot = -14.6249037423813 +504000 ekin = 0.527242963721984 | erot = 0.283072520273731 | epot = -15.4352192264977 | etot = -14.624903742502 +505000 ekin = 0.547444055756082 | erot = 0.285672032586838 | epot = -15.458019830977 | etot = -14.6249037426341 +506000 ekin = 0.563636138784674 | erot = 0.288055811209927 | epot = -15.47659569275 | etot = -14.6249037427554 +507000 ekin = 0.574166796919909 | erot = 0.289928574131153 | epot = -15.4889991138946 | etot = -14.6249037428436 +508000 ekin = 0.577825151301095 | erot = 0.29106332686132 | epot = -15.4937922210437 | etot = -14.6249037428812 +509000 ekin = 0.574066827021787 | erot = 0.291350176078735 | epot = -15.4903207459605 | etot = -14.6249037428599 +510000 ekin = 0.563118031118052 | erot = 0.290823209378379 | epot = -15.478844983279 | etot = -14.6249037427826 +511000 ekin = 0.545937816053849 | erot = 0.289659846600108 | epot = -15.4605014053159 | etot = -14.624903742662 +512000 ekin = 0.524051924661522 | erot = 0.288153919329358 | epot = -15.4371095865082 | etot = -14.6249037425174 +513000 ekin = 0.49930007419802 | erot = 0.286670443869403 | epot = -15.4108742604374 | etot = -14.6249037423699 +514000 ekin = 0.473556830410389 | erot = 0.285593013544029 | epot = -15.3840535861934 | etot = -14.624903742239 +515000 ekin = 0.448481344234872 | erot = 0.285274677057468 | epot = -15.3586597634305 | etot = -14.6249037421382 +516000 ekin = 0.425336124988155 | erot = 0.286000471485139 | epot = -15.3362403385481 | etot = -14.6249037420748 +517000 ekin = 0.404895133580943 | erot = 0.2879658116616 | epot = -15.3177646872915 | etot = -14.6249037420489 +518000 ekin = 0.38744137195972 | erot = 0.291271247088022 | epot = -15.303616361103 | etot = -14.6249037420552 +519000 ekin = 0.372839035852851 | erot = 0.295931281214127 | epot = -15.2936740591517 | etot = -14.6249037420847 +520000 ekin = 0.360656186943069 | erot = 0.301893194868317 | epot = -15.2874531239377 | etot = -14.6249037421263 +521000 ekin = 0.350310207443456 | erot = 0.30906098360489 | epot = -15.284274933218 | etot = -14.6249037421697 +522000 ekin = 0.341208800539667 | erot = 0.3173194084493 | epot = -15.2834319511953 | etot = -14.6249037422063 +523000 ekin = 0.332862997936835 | erot = 0.326553653087588 | epot = -15.284320393256 | etot = -14.6249037422315 +524000 ekin = 0.324955020060083 | erot = 0.336661144000867 | epot = -15.2865199063051 | etot = -14.6249037422441 +525000 ekin = 0.317352570821523 | erot = 0.347553686772997 | epot = -15.2898099998415 | etot = -14.624903742247 +526000 ekin = 0.310071537936527 | erot = 0.359150063852877 | epot = -15.2941253440357 | etot = -14.6249037422463 +527000 ekin = 0.30319969763022 | erot = 0.371361343285068 | epot = -15.2994647831647 | etot = -14.6249037422494 +528000 ekin = 0.296802852838113 | erot = 0.38407297047912 | epot = -15.3057795655799 | etot = -14.6249037422627 +529000 ekin = 0.290839689447243 | erot = 0.397128838352394 | epot = -15.31287227009 | etot = -14.6249037422904 +530000 ekin = 0.285110822260533 | erot = 0.410322608856898 | epot = -15.3203371734496 | etot = -14.6249037423322 +531000 ekin = 0.279260366287321 | erot = 0.423400398731777 | epot = -15.3275645074024 | etot = -14.6249037423833 +532000 ekin = 0.2728357059054 | erot = 0.436076588369062 | epot = -15.3338160367096 | etot = -14.6249037424351 +533000 ekin = 0.265395406955423 | erot = 0.448061330488706 | epot = -15.3383604799205 | etot = -14.6249037424763 +534000 ekin = 0.25664035180014 | erot = 0.45909504502717 | epot = -15.3406391393241 | etot = -14.6249037424968 +535000 ekin = 0.24653363369425 | erot = 0.468982742180589 | epot = -15.3404201183648 | etot = -14.62490374249 +536000 ekin = 0.235373881374767 | erot = 0.477620282696299 | epot = -15.3378979065254 | etot = -14.6249037424543 +537000 ekin = 0.223795203401825 | erot = 0.485006039595742 | epot = -15.3337049853926 | etot = -14.624903742395 +538000 ekin = 0.212682661997717 | erot = 0.491234540507922 | epot = -15.32882094483 | etot = -14.6249037423243 +539000 ekin = 0.203011536568094 | erot = 0.496472671628212 | epot = -15.324387950454 | etot = -14.6249037422577 +540000 ekin = 0.195638496925756 | erot = 0.500922912276288 | epot = -15.3214651514142 | etot = -14.6249037422122 +541000 ekin = 0.191090437373868 | erot = 0.504781043299473 | epot = -15.3207752228743 | etot = -14.624903742201 +542000 ekin = 0.189407567632351 | erot = 0.508197267609666 | epot = -15.3225085774711 | etot = -14.6249037422291 +543000 ekin = 0.190094034780963 | erot = 0.511249275631094 | epot = -15.3262470527038 | etot = -14.6249037422917 +544000 ekin = 0.192205662500001 | erot = 0.513933300996131 | epot = -15.3310427058706 | etot = -14.6249037423745 +545000 ekin = 0.194562943958398 | erot = 0.516174993404786 | epot = -15.3356416798198 | etot = -14.6249037424566 +546000 ekin = 0.196033343259865 | erot = 0.517857026727595 | epot = -15.3387941125054 | etot = -14.624903742518 +547000 ekin = 0.195801439086576 | erot = 0.518856237019659 | epot = -15.3395614186507 | etot = -14.6249037425445 +548000 ekin = 0.193552178457624 | erot = 0.519081068513043 | epot = -15.3375369895016 | etot = -14.6249037425309 +549000 ekin = 0.189527872077782 | erot = 0.518500763845595 | epot = -15.3329323784042 | etot = -14.6249037424808 +550000 ekin = 0.18446469719282 | erot = 0.517160608016848 | epot = -15.326529047614 | etot = -14.6249037424043 +551000 ekin = 0.17944751961377 | erot = 0.515181377053922 | epot = -15.3195326389815 | etot = -14.6249037423138 +552000 ekin = 0.175731062295071 | erot = 0.512744588095586 | epot = -15.3133793926126 | etot = -14.6249037422219 +553000 ekin = 0.174564310046339 | erot = 0.510067400325356 | epot = -15.3095354525118 | etot = -14.6249037421401 +554000 ekin = 0.177036897101121 | erot = 0.507372062614127 | epot = -15.309312701793 | etot = -14.6249037420777 +555000 ekin = 0.183953653121541 | erot = 0.50485506124058 | epot = -15.3137124564044 | etot = -14.6249037420423 +556000 ekin = 0.195740677804154 | erot = 0.502660902828886 | epot = -15.3233053226714 | etot = -14.6249037420384 +557000 ekin = 0.212389174813395 | erot = 0.500864749566249 | epot = -15.3381576664467 | etot = -14.6249037420671 +558000 ekin = 0.233445020972978 | erot = 0.499466731744177 | epot = -15.3578154948427 | etot = -14.6249037421256 +559000 ekin = 0.258048678278145 | erot = 0.498398734229532 | epot = -15.381351154715 | etot = -14.6249037422073 +560000 ekin = 0.285022157939727 | erot = 0.497541950864641 | epot = -15.4074678511075 | etot = -14.6249037423031 +561000 ekin = 0.312990622171893 | erot = 0.496751658908829 | epot = -15.4346460234834 | etot = -14.6249037424027 +562000 ekin = 0.340519848730057 | erot = 0.495884310852853 | epot = -15.461307902079 | etot = -14.6249037424961 +563000 ekin = 0.366249237356341 | erot = 0.494821962715706 | epot = -15.4859749426471 | etot = -14.6249037425751 +564000 ekin = 0.389003340228864 | erot = 0.493490109026347 | epot = -15.5073971918896 | etot = -14.6249037426344 +565000 ekin = 0.407871381975787 | erot = 0.491866632343088 | epot = -15.5246417569901 | etot = -14.6249037426712 +566000 ekin = 0.422251605413063 | erot = 0.489981232303539 | epot = -15.537136580402 | etot = -14.6249037426854 +567000 ekin = 0.431863045464991 | erot = 0.487906470955931 | epot = -15.5446732590994 | etot = -14.6249037426785 +568000 ekin = 0.436733840918529 | erot = 0.485743252286281 | epot = -15.5473808358582 | etot = -14.6249037426534 +569000 ekin = 0.437172173179269 | erot = 0.483603786385196 | epot = -15.5456797021777 | etot = -14.6249037426133 +570000 ekin = 0.43372713864672 | erot = 0.48159597879343 | epot = -15.5402268600018 | etot = -14.6249037425617 +571000 ekin = 0.42714180814445 | erot = 0.479812578148079 | epot = -15.5318581287948 | etot = -14.6249037425023 +572000 ekin = 0.418294466662065 | erot = 0.478326721683348 | epot = -15.5215249307851 | etot = -14.6249037424397 +573000 ekin = 0.408121101336508 | erot = 0.477193277919927 | epot = -15.5102181216365 | etot = -14.6249037423801 +574000 ekin = 0.397514818218918 | erot = 0.476453234966625 | epot = -15.4988717955165 | etot = -14.624903742331 +575000 ekin = 0.387207144490505 | erot = 0.476137354469736 | epot = -15.4882482412605 | etot = -14.6249037423002 +576000 ekin = 0.377649119218454 | erot = 0.476266044932873 | epot = -15.4788189064457 | etot = -14.6249037422944 +577000 ekin = 0.368920817133122 | erot = 0.476844730976094 | epot = -15.4706692904255 | etot = -14.6249037423163 +578000 ekin = 0.360700785231361 | erot = 0.47785688313413 | epot = -15.4634614107286 | etot = -14.6249037423631 +579000 ekin = 0.352319179858645 | erot = 0.479258927576455 | epot = -15.4564818498607 | etot = -14.6249037424256 +580000 ekin = 0.342901425190256 | erot = 0.480981430412058 | epot = -15.4487865980916 | etot = -14.6249037424893 +581000 ekin = 0.331586894252413 | erot = 0.482939076923234 | epot = -15.4394297137118 | etot = -14.6249037425361 +582000 ekin = 0.317784488003658 | erot = 0.485048781538909 | epot = -15.427737012092 | etot = -14.6249037425495 +583000 ekin = 0.301409490235786 | erot = 0.487252029394123 | epot = -15.4135652621474 | etot = -14.6249037425175 +584000 ekin = 0.283039202393456 | erot = 0.489535511255409 | epot = -15.3974784560865 | etot = -14.6249037424376 +585000 ekin = 0.263933313486932 | erot = 0.491944128119358 | epot = -15.3807811839248 | etot = -14.6249037423185 +586000 ekin = 0.245890887800014 | erot = 0.494582820570716 | epot = -15.36537745055 | etot = -14.6249037421793 +587000 ekin = 0.230956405619767 | erot = 0.497607010278002 | epot = -15.3534671579441 | etot = -14.6249037420464 +588000 ekin = 0.221033841917334 | erot = 0.501205839010304 | epot = -15.3471434228726 | etot = -14.6249037419449 +589000 ekin = 0.217504428503198 | erot = 0.505584588307916 | epot = -15.3479927587054 | etot = -14.6249037418943 +590000 ekin = 0.220953423088802 | erot = 0.510952138425678 | epot = -15.3568093034149 | etot = -14.6249037419004 +591000 ekin = 0.231083134064877 | erot = 0.517515644130037 | epot = -15.3735025201503 | etot = -14.6249037419554 +592000 ekin = 0.246829245753809 | erot = 0.525479282586983 | epot = -15.3972122703829 | etot = -14.6249037420421 +593000 ekin = 0.266628949730648 | erot = 0.535039778666154 | epot = -15.4265724705373 | etot = -14.6249037421405 +594000 ekin = 0.288743434935948 | erot = 0.546371032865159 | epot = -15.4600182100359 | etot = -14.6249037422348 +595000 ekin = 0.311533695301854 | erot = 0.559594229359111 | epot = -15.4960316669784 | etot = -14.6249037423174 +596000 ekin = 0.333624348261494 | erot = 0.574736425374244 | epot = -15.5332645160249 | etot = -14.6249037423892 +597000 ekin = 0.353943370598259 | erot = 0.591686591895167 | epot = -15.5705337049495 | etot = -14.6249037424561 +598000 ekin = 0.371670846224399 | erot = 0.610160828223706 | epot = -15.6067354169733 | etot = -14.6249037425252 +599000 ekin = 0.386151688530232 | erot = 0.629687420924543 | epot = -15.6407428520551 | etot = -14.6249037426004 +600000 ekin = 0.396824670884392 | erot = 0.649618644309618 | epot = -15.6713470578743 | etot = -14.6249037426803 +601000 ekin = 0.403202067553724 | erot = 0.669171693344937 | epot = -15.6972775036568 | etot = -14.6249037427581 +602000 ekin = 0.404908528299605 | erot = 0.687495721385225 | epot = -15.7173079925077 | etot = -14.6249037428229 +603000 ekin = 0.401765041348441 | erot = 0.703757265562351 | epot = -15.7304260497729 | etot = -14.6249037428621 +604000 ekin = 0.393886240081566 | erot = 0.717231476889447 | epot = -15.7360214598369 | etot = -14.6249037428659 +605000 ekin = 0.381750384954784 | erot = 0.727382711583162 | epot = -15.7340368393681 | etot = -14.6249037428302 +606000 ekin = 0.366205114567235 | erot = 0.733917584159895 | epot = -15.725026441486 | etot = -14.6249037427589 +607000 ekin = 0.348389460815329 | erot = 0.736798185090343 | epot = -15.7100913885696 | etot = -14.624903742664 +608000 ekin = 0.329579787369629 | erot = 0.73621262347853 | epot = -15.6906961534103 | etot = -14.6249037425622 +609000 ekin = 0.310994196072014 | erot = 0.732511274794253 | epot = -15.6684092133371 | etot = -14.6249037424709 +610000 ekin = 0.29360483588481 | erot = 0.726125549058504 | epot = -15.644634127347 | etot = -14.6249037424037 +611000 ekin = 0.278004208602607 | erot = 0.717488389874772 | epot = -15.6203963408453 | etot = -14.624903742368 +612000 ekin = 0.264353214553523 | erot = 0.706972008379557 | epot = -15.5962289652967 | etot = -14.6249037423637 +613000 ekin = 0.252415280668682 | erot = 0.694851301360247 | epot = -15.5721703244136 | etot = -14.6249037423847 +614000 ekin = 0.241662201717183 | erot = 0.681294462599197 | epot = -15.5478604067366 | etot = -14.6249037424202 +615000 ekin = 0.231427318529533 | erot = 0.666377599991891 | epot = -15.5227086609789 | etot = -14.6249037424574 +616000 ekin = 0.221078258759054 | erot = 0.650117838828839 | epot = -15.496099840071 | etot = -14.6249037424831 +617000 ekin = 0.21018039046722 | erot = 0.632518274251072 | epot = -15.4676024072045 | etot = -14.6249037424862 +618000 ekin = 0.198621509656023 | erot = 0.613617132100535 | epot = -15.4371423842165 | etot = -14.6249037424599 +619000 ekin = 0.18667044221321 | erot = 0.593532504056809 | epot = -15.405106688674 | etot = -14.624903742404 +620000 ekin = 0.174951539061334 | erot = 0.572493952083576 | epot = -15.3723492334691 | etot = -14.6249037423242 +621000 ekin = 0.164335257151748 | erot = 0.550854196820334 | epot = -15.3400931962044 | etot = -14.6249037422324 +622000 ekin = 0.155768039681223 | erot = 0.529078173717901 | epot = -15.3097499555421 | etot = -14.6249037421429 +623000 ekin = 0.150083571178067 | erot = 0.507711807337581 | epot = -15.2826991205843 | etot = -14.6249037420687 +624000 ekin = 0.147843467415026 | erot = 0.487337070698877 | epot = -15.2600842801327 | etot = -14.6249037420188 +625000 ekin = 0.149245521580685 | erot = 0.468521842126521 | epot = -15.2426711057039 | etot = -14.6249037419967 +626000 ekin = 0.154116108891011 | erot = 0.451772481731706 | epot = -15.230792332623 | etot = -14.6249037420003 +627000 ekin = 0.161979086426243 | erot = 0.437494698740521 | epot = -15.2243775271906 | etot = -14.6249037420239 +628000 ekin = 0.172174902879429 | erot = 0.425965324893993 | epot = -15.2230439698331 | etot = -14.6249037420597 +629000 ekin = 0.183995029152745 | erot = 0.417314987668754 | epot = -15.2262137589225 | etot = -14.624903742101 +630000 ekin = 0.196798066695247 | erot = 0.411519917957055 | epot = -15.2332217267955 | etot = -14.6249037421432 +631000 ekin = 0.210082131922237 | erot = 0.408400457424511 | epot = -15.2433863315318 | etot = -14.6249037421851 +632000 ekin = 0.223500184826661 | erot = 0.407624312389748 | epot = -15.2560282394451 | etot = -14.6249037422287 +633000 ekin = 0.236818662197368 | erot = 0.40871410814115 | epot = -15.2704365126172 | etot = -14.6249037422787 +634000 ekin = 0.249833574953511 | erot = 0.411060882467202 | epot = -15.2857981997609 | etot = -14.6249037423402 +635000 ekin = 0.262270239999869 | erot = 0.413946987960319 | epot = -15.3011209703766 | etot = -14.6249037424164 +636000 ekin = 0.273700147362094 | erot = 0.41658241201687 | epot = -15.3151863018853 | etot = -14.6249037425063 +637000 ekin = 0.283507856899951 | erot = 0.418156955202178 | epot = -15.3265685547055 | etot = -14.6249037426034 +638000 ekin = 0.290930324554581 | erot = 0.417906927432974 | epot = -15.3337409946828 | etot = -14.6249037426952 +639000 ekin = 0.295171730169445 | erot = 0.415189912095163 | epot = -15.3352653850311 | etot = -14.6249037427665 +640000 ekin = 0.295573453214757 | erot = 0.409556450349425 | epot = -15.330033646366 | etot = -14.6249037428018 +641000 ekin = 0.291798784614159 | erot = 0.400805216305592 | epot = -15.3175077437094 | etot = -14.6249037427896 +642000 ekin = 0.283982821763191 | erot = 0.389009767281871 | epot = -15.2978963317709 | etot = -14.6249037427259 +643000 ekin = 0.272803834295014 | erot = 0.374510198235057 | epot = -15.2722177751454 | etot = -14.6249037426153 +644000 ekin = 0.259451287281783 | erot = 0.357870303235152 | epot = -15.242225332988 | etot = -14.6249037424711 +645000 ekin = 0.245490538509252 | erot = 0.339807577758131 | epot = -15.2102018585797 | etot = -14.6249037423123 +646000 ekin = 0.232646751226996 | erot = 0.321107525182603 | epot = -15.1786580185706 | etot = -14.624903742161 +647000 ekin = 0.22254581022401 | erot = 0.302534738054871 | epot = -15.1499842903174 | etot = -14.6249037420385 +648000 ekin = 0.216457466201459 | erot = 0.284752019408104 | epot = -15.1261132275716 | etot = -14.624903741962 +649000 ekin = 0.215087078764693 | erot = 0.268256849270417 | epot = -15.1082476699768 | etot = -14.6249037419417 +650000 ekin = 0.218457489209268 | erot = 0.253342374384922 | epot = -15.0967036055725 | etot = -14.6249037419783 +651000 ekin = 0.225910420497663 | erot = 0.240087663214968 | epot = -15.090901825775 | etot = -14.6249037420623 +652000 ekin = 0.236236377394858 | erot = 0.228379019530766 | epot = -15.0895191391013 | etot = -14.6249037421757 +653000 ekin = 0.247915496412395 | erot = 0.217959688822015 | epot = -15.0907789275287 | etot = -14.6249037422943 +654000 ekin = 0.259425494352476 | erot = 0.208500305716241 | epot = -15.0928295424619 | etot = -14.6249037423932 +655000 ekin = 0.26955455820855 | erot = 0.199677958220202 | epot = -15.0941362588805 | etot = -14.6249037424517 +656000 ekin = 0.277652649609351 | erot = 0.191249336850371 | epot = -15.0938057289177 | etot = -14.624903742458 +657000 ekin = 0.283765747905513 | erot = 0.183104207684416 | epot = -15.0917736980008 | etot = -14.6249037424109 +658000 ekin = 0.288620908153495 | erot = 0.175289536735997 | epot = -15.0888141872111 | etot = -14.6249037423216 +659000 ekin = 0.293459924910638 | erot = 0.168001027405567 | epot = -15.0863646945267 | etot = -14.6249037422105 +660000 ekin = 0.299750121924058 | erot = 0.16154591329551 | epot = -15.0861997773236 | etot = -14.624903742104 +661000 ekin = 0.30882794580118 | erot = 0.15628680849445 | epot = -15.0900184963236 | etot = -14.624903742028 +662000 ekin = 0.321550844182007 | erot = 0.152579955314563 | epot = -15.0990345414996 | etot = -14.624903742003 +663000 ekin = 0.338040404322879 | erot = 0.150721656676574 | epot = -15.1136658030369 | etot = -14.6249037420375 +664000 ekin = 0.357588696379433 | erot = 0.150913925254324 | epot = -15.1334063637592 | etot = -14.6249037421255 +665000 ekin = 0.378766116435926 | erot = 0.153254852725576 | epot = -15.1569247114086 | etot = -14.6249037422471 +666000 ekin = 0.399716130930416 | erot = 0.157752003176736 | epot = -15.1823718764813 | etot = -14.6249037423741 +667000 ekin = 0.418564373573455 | erot = 0.164350192887448 | epot = -15.2078183089391 | etot = -14.6249037424782 +668000 ekin = 0.433827740573898 | erot = 0.172960630436554 | epot = -15.2316921135493 | etot = -14.6249037425388 +669000 ekin = 0.444701001629873 | erot = 0.183478145302767 | epot = -15.2530828894839 | etot = -14.6249037425513 +670000 ekin = 0.451136418416049 | erot = 0.195778468141822 | epot = -15.2718186290842 | etot = -14.6249037425263 +671000 ekin = 0.453701004148981 | erot = 0.209695862328768 | epot = -15.2883006089635 | etot = -14.6249037424857 +672000 ekin = 0.453273827001077 | erot = 0.224990306458558 | epot = -15.3031678759134 | etot = -14.6249037424538 +673000 ekin = 0.450699702661522 | erot = 0.241319095058617 | epot = -15.3169225401686 | etot = -14.6249037424485 +674000 ekin = 0.446523488450417 | erot = 0.258227823778676 | epot = -15.3296550547043 | etot = -14.6249037424752 +675000 ekin = 0.44088962459253 | erot = 0.275170305159689 | epot = -15.3409636722772 | etot = -14.624903742525 +676000 ekin = 0.433624481153454 | erot = 0.291558306506453 | epot = -15.350086530239 | etot = -14.6249037425791 +677000 ekin = 0.424453634856828 | erot = 0.306833290383679 | epot = -15.3561906678562 | etot = -14.6249037426157 +678000 ekin = 0.41326517646593 | erot = 0.320546114279227 | epot = -15.3587150333616 | etot = -14.6249037426165 +679000 ekin = 0.400321537247193 | erot = 0.332428088763687 | epot = -15.3576533685842 | etot = -14.6249037425733 +680000 ekin = 0.386341988793522 | erot = 0.342437977068841 | epot = -15.3536837083529 | etot = -14.6249037424906 +681000 ekin = 0.372417408219175 | erot = 0.350774050474234 | epot = -15.3480952010788 | etot = -14.6249037423854 +682000 ekin = 0.35976964508921 | erot = 0.357847594354926 | epot = -15.342520981727 | etot = -14.6249037422829 +683000 ekin = 0.349419724484302 | erot = 0.364223142873746 | epot = -15.3385466095668 | etot = -14.6249037422088 +684000 ekin = 0.341867426589136 | erot = 0.370539083005818 | epot = -15.3373102517758 | etot = -14.6249037421809 +685000 ekin = 0.336892967752833 | erot = 0.37742728588017 | epot = -15.3392239958362 | etot = -14.6249037422032 +686000 ekin = 0.333560575456658 | erot = 0.385449795148896 | epot = -15.343914112869 | etot = -14.6249037422634 +687000 ekin = 0.330440845244727 | erot = 0.395064019974615 | epot = -15.3504086075565 | etot = -14.6249037423372 +688000 ekin = 0.325996654362847 | erot = 0.406617593545496 | epot = -15.3575179903034 | etot = -14.624903742395 +689000 ekin = 0.319023752377333 | erot = 0.420363991129467 | epot = -15.3642914859188 | etot = -14.624903742412 +690000 ekin = 0.309020969988424 | erot = 0.436483939357874 | epot = -15.3704086517213 | etot = -14.624903742375 +691000 ekin = 0.296388973948975 | erot = 0.455097572739774 | epot = -15.3763902889748 | etot = -14.6249037422861 +692000 ekin = 0.282408410636019 | erot = 0.476257707732204 | epot = -15.3835698605304 | etot = -14.6249037421622 +693000 ekin = 0.269008530851688 | erot = 0.499923033173812 | epot = -15.393835306056 | etot = -14.6249037420305 +694000 ekin = 0.258387685788622 | erot = 0.525918285140571 | epot = -15.4092097128506 | etot = -14.6249037419214 +695000 ekin = 0.25257627520821 | erot = 0.553894058809888 | epot = -15.43137407588 | etot = -14.6249037418619 +696000 ekin = 0.253038186235009 | erot = 0.583300660396584 | epot = -15.4612425885012 | etot = -14.6249037418696 +697000 ekin = 0.260392018277579 | erot = 0.613388418368988 | epot = -15.4986841785954 | etot = -14.6249037419489 +698000 ekin = 0.274304391463509 | erot = 0.64324187918294 | epot = -15.5424500127365 | etot = -14.6249037420901 +699000 ekin = 0.293570250406769 | erot = 0.671848180609457 | epot = -15.5903221732877 | etot = -14.6249037422715 +700000 ekin = 0.316355070233514 | erot = 0.698191700483047 | epot = -15.639450513181 | etot = -14.6249037424644 +701000 ekin = 0.340538337282332 | erot = 0.721359481466447 | epot = -15.6868015613885 | etot = -14.6249037426397 +702000 ekin = 0.364075443764615 | erot = 0.740637254695032 | epot = -15.7296164412337 | etot = -14.6249037427741 +703000 ekin = 0.385294321874606 | erot = 0.75557636945477 | epot = -15.7657744341848 | etot = -14.6249037428555 +704000 ekin = 0.40306671671928 | erot = 0.766018576887906 | epot = -15.7939890364911 | etot = -14.6249037428839 +705000 ekin = 0.416833588997184 | erot = 0.772075474100319 | epot = -15.8138128059668 | etot = -14.6249037428693 +706000 ekin = 0.426510451501955 | erot = 0.774072055032491 | epot = -15.8254862493611 | etot = -14.6249037428266 +707000 ekin = 0.432328070473605 | erot = 0.772470813770598 | epot = -15.8297026270152 | etot = -14.624903742771 +708000 ekin = 0.434671210546145 | erot = 0.767794279505844 | epot = -15.8273692327653 | etot = -14.6249037427133 +709000 ekin = 0.433963855683832 | erot = 0.760560754832635 | epot = -15.8194283531753 | etot = -14.6249037426588 +710000 ekin = 0.430621214402396 | erot = 0.751241421805773 | epot = -15.8067663788157 | etot = -14.6249037426076 +711000 ekin = 0.42506102881634 | erot = 0.740240555545717 | epot = -15.7902053269187 | etot = -14.6249037425567 +712000 ekin = 0.417748693286703 | erot = 0.727895913280697 | epot = -15.7705483490698 | etot = -14.6249037425024 +713000 ekin = 0.409245407745788 | erot = 0.714493617369859 | epot = -15.7486427675576 | etot = -14.624903742442 +714000 ekin = 0.400233112897398 | erot = 0.700290376394005 | epot = -15.7254272316667 | etot = -14.6249037423753 +715000 ekin = 0.391499218630518 | erot = 0.685535269234734 | epot = -15.7019382301705 | etot = -14.6249037423053 +716000 ekin = 0.383874653287396 | erot = 0.67048382480872 | epot = -15.6792622203348 | etot = -14.6249037422387 +717000 ekin = 0.378129665172728 | erot = 0.655399296057203 | epot = -15.6584327034143 | etot = -14.6249037421843 +718000 ekin = 0.374843116814185 | erot = 0.640539821856989 | epot = -15.640286680823 | etot = -14.6249037421519 +719000 ekin = 0.374271424141624 | erot = 0.626134666228549 | epot = -15.6253098325193 | etot = -14.6249037421492 +720000 ekin = 0.376249546442097 | erot = 0.612356169201246 | epot = -15.6135094578233 | etot = -14.62490374218 +721000 ekin = 0.380155783156075 | erot = 0.599295758360148 | epot = -15.6043552837583 | etot = -14.6249037422421 +722000 ekin = 0.38496276143876 | erot = 0.586951574249477 | epot = -15.5968180780148 | etot = -14.6249037423265 +723000 ekin = 0.389379823381561 | erot = 0.57523200329734 | epot = -15.5895155690971 | etot = -14.6249037424182 +724000 ekin = 0.392071125783968 | erot = 0.563975606696704 | epot = -15.5809504749797 | etot = -14.624903742499 +725000 ekin = 0.391913283458913 | erot = 0.552983740178136 | epot = -15.5698007661881 | etot = -14.624903742551 +726000 ekin = 0.388241956532947 | erot = 0.542058916015296 | epot = -15.5552046151089 | etot = -14.6249037425607 +727000 ekin = 0.381032991792247 | erot = 0.531040454531364 | epot = -15.5369771888453 | etot = -14.6249037425217 +728000 ekin = 0.370971903191936 | erot = 0.51982908237483 | epot = -15.5157047280045 | etot = -14.6249037424377 +729000 ekin = 0.359388263612697 | erot = 0.508395729808055 | epot = -15.4926877357429 | etot = -14.6249037423222 +730000 ekin = 0.348057580439693 | erot = 0.496773021024349 | epot = -15.4697343436589 | etot = -14.6249037421949 +731000 ekin = 0.338902689199426 | erot = 0.48503267140759 | epot = -15.4488391026866 | etot = -14.6249037420796 +732000 ekin = 0.333649662945475 | erot = 0.473255762296962 | epot = -15.4318091672413 | etot = -14.6249037419988 +733000 ekin = 0.333505576676606 | erot = 0.461504910073432 | epot = -15.4199142287184 | etot = -14.6249037419684 +734000 ekin = 0.338924758984327 | erot = 0.449807254483215 | epot = -15.4136357554618 | etot = -14.6249037419943 +735000 ekin = 0.349515468577354 | erot = 0.438154711902627 | epot = -15.412573922551 | etot = -14.624903742071 +736000 ekin = 0.364111355274983 | erot = 0.426523255164317 | epot = -15.4155383526214 | etot = -14.6249037421821 +737000 ekin = 0.380995719774913 | erot = 0.414906900972836 | epot = -15.4208063630518 | etot = -14.6249037423041 +738000 ekin = 0.398229414671756 | erot = 0.403356227833025 | epot = -15.4264893849167 | etot = -14.6249037424119 +739000 ekin = 0.41400586007365 | erot = 0.392007798568608 | epot = -15.4309174011284 | etot = -14.6249037424862 +740000 ekin = 0.426948743963044 | erot = 0.381091720704502 | epot = -15.4329442071847 | etot = -14.6249037425172 +741000 ekin = 0.436283647683231 | erot = 0.370910229391922 | epot = -15.4320976195822 | etot = -14.6249037425071 +742000 ekin = 0.441850001827036 | erot = 0.361789064611271 | epot = -15.4285428089074 | etot = -14.6249037424691 +743000 ekin = 0.443963491147379 | erot = 0.354012421291793 | epot = -15.4228796548618 | etot = -14.6249037424227 +744000 ekin = 0.443178108515845 | erot = 0.347758127978261 | epot = -15.4158399788819 | etot = -14.6249037423878 +745000 ekin = 0.440021184885117 | erot = 0.343050543545259 | epot = -15.4079754708099 | etot = -14.6249037423795 +746000 ekin = 0.434779146250806 | erot = 0.339744491074207 | epot = -15.3994273797282 | etot = -14.6249037424032 +747000 ekin = 0.427396883605164 | erot = 0.337545938413876 | epot = -15.3898465644715 | etot = -14.6249037424524 +748000 ekin = 0.417523045840964 | erot = 0.336066252171354 | epot = -15.378493040523 | etot = -14.6249037425106 +749000 ekin = 0.404692764111769 | erot = 0.334898725161342 | epot = -15.3644952318284 | etot = -14.6249037425553 +750000 ekin = 0.38859628761696 | erot = 0.333700338300268 | epot = -15.3472003684814 | etot = -14.6249037425641 +751000 ekin = 0.369348367994352 | erot = 0.332259621152217 | epot = -15.3265117316697 | etot = -14.6249037425232 +752000 ekin = 0.347662572337044 | erot = 0.330533807749388 | epot = -15.3031001225185 | etot = -14.6249037424321 +753000 ekin = 0.32485637347094 | erot = 0.328645172901279 | epot = -15.2784052886778 | etot = -14.6249037423055 +754000 ekin = 0.302664104351826 | erot = 0.326836116135493 | epot = -15.2544039626575 | etot = -14.6249037421702 +755000 ekin = 0.282898405306331 | erot = 0.32539267738901 | epot = -15.2331948247533 | etot = -14.6249037420579 +756000 ekin = 0.267052130149665 | erot = 0.324553861438981 | epot = -15.216509733585 | etot = -14.6249037419963 +757000 ekin = 0.255952872034765 | erot = 0.32442748097694 | epot = -15.2052840950137 | etot = -14.624903742002 +758000 ekin = 0.24956686325818 | erot = 0.324931841855881 | epot = -15.1994024471896 | etot = -14.6249037420755 +759000 ekin = 0.247007285742243 | erot = 0.325777353497121 | epot = -15.1976883814409 | etot = -14.6249037422016 +760000 ekin = 0.246749335490674 | erot = 0.326494279608963 | epot = -15.1981473574513 | etot = -14.6249037423517 +761000 ekin = 0.247004464362755 | erot = 0.32650345690093 | epot = -15.1984116637543 | etot = -14.6249037424906 +762000 ekin = 0.246168267682973 | erot = 0.325217160867496 | epot = -15.196289171135 | etot = -14.6249037425846 +763000 ekin = 0.243236270174414 | erot = 0.32214932288445 | epot = -15.1902893356681 | etot = -14.6249037426092 +764000 ekin = 0.238083572627797 | erot = 0.31701054114624 | epot = -15.1799978563308 | etot = -14.6249037425568 +765000 ekin = 0.231530329805837 | erot = 0.309765883620828 | epot = -15.1661999558649 | etot = -14.6249037424383 +766000 ekin = 0.225163449189513 | erot = 0.300642577937803 | epot = -15.1507097694085 | etot = -14.6249037422812 +767000 ekin = 0.22094703764136 | erot = 0.290087936283322 | epot = -15.1359387160482 | etot = -14.6249037421235 +768000 ekin = 0.220714417705591 | erot = 0.278690999515505 | epot = -15.1243091592243 | etot = -14.6249037420032 +769000 ekin = 0.225674230585282 | erot = 0.267090069999639 | epot = -15.1176680425329 | etot = -14.6249037419479 +770000 ekin = 0.236066860406118 | erot = 0.255889903618327 | epot = -15.1168605059916 | etot = -14.6249037419672 +771000 ekin = 0.251070223471381 | erot = 0.245606888556436 | epot = -15.1215808540782 | etot = -14.6249037420503 +772000 ekin = 0.268985032795184 | erot = 0.236650197272858 | epot = -15.130538972238 | etot = -14.6249037421699 +773000 ekin = 0.287649902236207 | erot = 0.229335047808925 | epot = -15.1418886923348 | etot = -14.6249037422896 +774000 ekin = 0.304971347443521 | erot = 0.223914516380439 | epot = -15.1537896061995 | etot = -14.6249037423755 +775000 ekin = 0.319422560281353 | erot = 0.220611402282044 | epot = -15.1649377049685 | etot = -14.6249037424051 +776000 ekin = 0.330375903029014 | erot = 0.219632840721417 | epot = -15.1749124861243 | etot = -14.6249037423739 +777000 ekin = 0.338182326481318 | erot = 0.221157252264488 | epot = -15.1842433210425 | etot = -14.6249037422967 +778000 ekin = 0.34398099350531 | erot = 0.22529363977163 | epot = -15.1941783754801 | etot = -14.6249037422031 +779000 ekin = 0.349294202147492 | erot = 0.232023926337254 | epot = -15.2062218706139 | etot = -14.6249037421291 +780000 ekin = 0.355517983707864 | erot = 0.241146781675322 | epot = -15.2215685074905 | etot = -14.6249037421074 +781000 ekin = 0.36344584750217 | erot = 0.25224414994015 | epot = -15.2405937395998 | etot = -14.6249037421575 +782000 ekin = 0.372957766808887 | erot = 0.264688770758124 | epot = -15.2625502798461 | etot = -14.6249037422791 +783000 ekin = 0.38296926774882 | erot = 0.277702579812121 | epot = -15.2855755900113 | etot = -14.6249037424504 +784000 ekin = 0.391670514066059 | erot = 0.290462881206425 | epot = -15.3070371379046 | etot = -14.6249037426321 +785000 ekin = 0.397003136152363 | erot = 0.302237882822127 | epot = -15.3241447617524 | etot = -14.6249037427779 +786000 ekin = 0.397244540913185 | erot = 0.312520082335045 | epot = -15.3346683660963 | etot = -14.6249037428481 +787000 ekin = 0.391525061079143 | erot = 0.321121025638669 | epot = -15.33754982954 | etot = -14.6249037428222 +788000 ekin = 0.380116514494114 | erot = 0.328198366844194 | epot = -15.3332186240437 | etot = -14.6249037427054 +789000 ekin = 0.364402868102804 | erot = 0.334204933643257 | epot = -15.323511544273 | etot = -14.6249037425269 +790000 ekin = 0.346547882835914 | erot = 0.339772664564402 | epot = -15.3112242897307 | etot = -14.6249037423304 +791000 ekin = 0.328969533926533 | erot = 0.345562661329726 | epot = -15.2994359374168 | etot = -14.6249037421606 +792000 ekin = 0.313783234687151 | erot = 0.352120250332853 | epot = -15.290807227072 | etot = -14.624903742052 +793000 ekin = 0.302371973145348 | erot = 0.359769001653092 | epot = -15.2870447168183 | etot = -14.6249037420198 +794000 ekin = 0.295192752069156 | erot = 0.368565036951925 | epot = -15.2886615310787 | etot = -14.6249037420576 +795000 ekin = 0.291854072001083 | erot = 0.378316728407065 | epot = -15.2950745425492 | etot = -14.624903742141 +796000 ekin = 0.291420477240231 | erot = 0.388659220599418 | epot = -15.3049834400759 | etot = -14.6249037422363 +797000 ekin = 0.292835767594049 | erot = 0.399160677915359 | epot = -15.3169001878201 | etot = -14.6249037423107 +798000 ekin = 0.295321690655136 | erot = 0.40942991973209 | epot = -15.3296553527312 | etot = -14.624903742344 +799000 ekin = 0.298615606685619 | erot = 0.419195269464138 | epot = -15.3427146184843 | etot = -14.6249037423346 +800000 ekin = 0.302963113079283 | erot = 0.428333265393292 | epot = -15.3562001207729 | etot = -14.6249037423003 +801000 ekin = 0.308869807419017 | erot = 0.436842111958073 | epot = -15.3706156616482 | etot = -14.6249037422711 +802000 ekin = 0.316711643346418 | erot = 0.444773620895252 | epot = -15.3863890065178 | etot = -14.6249037422762 +803000 ekin = 0.326365730602249 | erot = 0.452151664704984 | epot = -15.403421137639 | etot = -14.6249037423317 +804000 ekin = 0.337019280358016 | erot = 0.458909057451227 | epot = -15.4208320802433 | etot = -14.6249037424341 +805000 ekin = 0.347244531512768 | erot = 0.464865921886024 | epot = -15.4370141959588 | etot = -14.62490374256 +806000 ekin = 0.355321558015419 | erot = 0.469755825324061 | epot = -15.449981126015 | etot = -14.6249037426755 +807000 ekin = 0.359699244804511 | erot = 0.473288399899576 | epot = -15.457891387451 | etot = -14.6249037427469 +808000 ekin = 0.35944291943687 | erot = 0.475225772200724 | epot = -15.4595724343888 | etot = -14.6249037427512 +809000 ekin = 0.354532149711152 | erot = 0.475448148012716 | epot = -15.4548840404063 | etot = -14.6249037426824 +810000 ekin = 0.34592712151575 | erot = 0.473990365430488 | epot = -15.4448212294989 | etot = -14.6249037425527 +811000 ekin = 0.335391497319932 | erot = 0.47104235524006 | epot = -15.4313375949483 | etot = -14.6249037423883 +812000 ekin = 0.325122479809716 | erot = 0.466917662640269 | epot = -15.4169438846729 | etot = -14.624903742223 +813000 ekin = 0.317281832618796 | erot = 0.462001954841414 | epot = -15.4041875295496 | etot = -14.6249037420894 +814000 ekin = 0.313538689251802 | erot = 0.456696276151744 | epot = -15.3951387074161 | etot = -14.6249037420126 +815000 ekin = 0.314725301427551 | erot = 0.451368238943745 | epot = -15.3909972823755 | etot = -14.6249037420042 +816000 ekin = 0.320674745952841 | erot = 0.446320054204994 | epot = -15.3918985422197 | etot = -14.6249037420619 +817000 ekin = 0.330264402530169 | erot = 0.441777145070237 | epot = -15.3969452897705 | etot = -14.6249037421701 +818000 ekin = 0.341643112116294 | erot = 0.437896324121931 | epot = -15.4044431785426 | etot = -14.6249037423044 +819000 ekin = 0.352584467965985 | erot = 0.434788688971306 | epot = -15.4122768993744 | etot = -14.6249037424371 +820000 ekin = 0.360890006680584 | erot = 0.432549774287109 | epot = -15.4183435235104 | etot = -14.6249037425427 +821000 ekin = 0.364764924967109 | erot = 0.43128829359489 | epot = -15.420956961164 | etot = -14.624903742602 +822000 ekin = 0.363101323048021 | erot = 0.431144612410221 | epot = -15.419149678064 | etot = -14.6249037426058 +823000 ekin = 0.355627506071419 | erot = 0.43229307921143 | epot = -15.4128243278382 | etot = -14.6249037425554 +824000 ekin = 0.342909507999076 | erot = 0.434926118199362 | epot = -15.4027393686599 | etot = -14.6249037424615 +825000 ekin = 0.326218347990279 | erot = 0.439222871854997 | epot = -15.390344962187 | etot = -14.6249037423417 +826000 ekin = 0.307298067026364 | erot = 0.445309293137064 | epot = -15.3775111023799 | etot = -14.6249037422164 +827000 ekin = 0.288081469809457 | erot = 0.453218819733404 | epot = -15.3662040316486 | etot = -14.6249037421057 +828000 ekin = 0.270403517643933 | erot = 0.462862712071296 | epot = -15.358169971741 | etot = -14.6249037420258 +829000 ekin = 0.255756724313351 | erot = 0.474017347276038 | epot = -15.3546778135762 | etot = -14.6249037419868 +830000 ekin = 0.245120383539822 | erot = 0.48633201659407 | epot = -15.3563561421258 | etot = -14.624903741992 +831000 ekin = 0.238883956789673 | erot = 0.499357971990034 | epot = -15.3631456708166 | etot = -14.6249037420369 +832000 ekin = 0.236868645663221 | erot = 0.512595315427615 | epot = -15.3743677032019 | etot = -14.6249037421111 +833000 ekin = 0.238435989569064 | erot = 0.525550909042522 | epot = -15.3888906408114 | etot = -14.6249037421998 +834000 ekin = 0.242658569128244 | erot = 0.537797737790336 | epot = -15.405360049206 | etot = -14.6249037422874 +835000 ekin = 0.248518315376458 | erot = 0.549024910269567 | epot = -15.4224469680061 | etot = -14.62490374236 +836000 ekin = 0.255095050223297 | erot = 0.559068449138061 | epot = -15.4390672417691 | etot = -14.6249037424078 +837000 ekin = 0.261712817640754 | erot = 0.567916383627862 | epot = -15.4545329436951 | etot = -14.6249037424265 +838000 ekin = 0.268023056778799 | erot = 0.575686784519135 | epot = -15.468613583716 | etot = -14.6249037424181 +839000 ekin = 0.274018270323247 | erot = 0.582582979366575 | epot = -15.481504992079 | etot = -14.6249037423892 +840000 ekin = 0.279983100774044 | erot = 0.588834754839254 | epot = -15.493721597963 | etot = -14.6249037423497 +841000 ekin = 0.286398274628748 | erot = 0.594637024330571 | epot = -15.5059390412695 | etot = -14.6249037423102 +842000 ekin = 0.293816650983671 | erot = 0.600098453280244 | epot = -15.5188188465455 | etot = -14.6249037422816 +843000 ekin = 0.302726774569864 | erot = 0.605208920748267 | epot = -15.5328394375906 | etot = -14.6249037422725 +844000 ekin = 0.313421069061913 | erot = 0.609833296484503 | epot = -15.5481581078352 | etot = -14.6249037422888 +845000 ekin = 0.325887895395929 | erot = 0.613733577818103 | epot = -15.5645252155455 | etot = -14.6249037423314 +846000 ekin = 0.33975240096389 | erot = 0.616615984720062 | epot = -15.5812721280797 | etot = -14.6249037423957 +847000 ekin = 0.354292335350613 | erot = 0.618194079532099 | epot = -15.5973901573538 | etot = -14.624903742471 +848000 ekin = 0.368542667425734 | erot = 0.618254639141467 | epot = -15.6117010491094 | etot = -14.6249037425422 +849000 ekin = 0.381474241846711 | erot = 0.616711095272622 | epot = -15.6230890797133 | etot = -14.624903742594 +850000 ekin = 0.392198266664605 | erot = 0.613631554978577 | epot = -15.6307335642585 | etot = -14.6249037426153 +851000 ekin = 0.400129367739792 | erot = 0.609234588534973 | epot = -15.6342676988789 | etot = -14.6249037426041 +852000 ekin = 0.405049998800082 | erot = 0.603854451145949 | epot = -15.6338081925133 | etot = -14.6249037425673 +853000 ekin = 0.407056563943438 | erot = 0.597885334647268 | epot = -15.6298456411094 | etot = -14.6249037425187 +854000 ekin = 0.406415158940066 | erot = 0.591718979209663 | epot = -15.623037880623 | etot = -14.6249037424732 +855000 ekin = 0.403390043513582 | erot = 0.585690332508252 | epot = -15.6139841184641 | etot = -14.6249037424422 +856000 ekin = 0.398116166002876 | erot = 0.580042463524147 | epot = -15.6030623719562 | etot = -14.6249037424292 +857000 ekin = 0.39056801615961 | erot = 0.574915889724005 | epot = -15.5903876483121 | etot = -14.6249037424285 +858000 ekin = 0.380638245095305 | erot = 0.570361176879803 | epot = -15.5759031644036 | etot = -14.6249037424285 +859000 ekin = 0.368297168913566 | erot = 0.566367903414504 | epot = -15.5595688147431 | etot = -14.624903742415 +860000 ekin = 0.353771484485059 | erot = 0.56289933566622 | epot = -15.5415745625294 | etot = -14.6249037423781 +861000 ekin = 0.33766818907467 | erot = 0.559921190515333 | epot = -15.5224931219057 | etot = -14.6249037423157 +862000 ekin = 0.320982687533336 | erot = 0.557415114411014 | epot = -15.5033015441806 | etot = -14.6249037422363 +863000 ekin = 0.304965814690107 | erot = 0.555372641471618 | epot = -15.485242198319 | etot = -14.6249037421573 +864000 ekin = 0.290872653002407 | erot = 0.5537720825734 | epot = -15.4695484776756 | etot = -14.6249037420998 +865000 ekin = 0.27966077424891 | erot = 0.552546988654679 | epot = -15.4571115049861 | etot = -14.6249037420825 +866000 ekin = 0.271730646598884 | erot = 0.551558423385933 | epot = -15.4481928120997 | etot = -14.6249037421148 +867000 ekin = 0.266795961580335 | erot = 0.550582916185739 | epot = -15.442282619959 | etot = -14.6249037421929 +868000 ekin = 0.263936467175558 | erot = 0.549323573879739 | epot = -15.4381637833552 | etot = -14.6249037422999 +869000 ekin = 0.261831470221842 | erot = 0.547444696243082 | epot = -15.4341799088743 | etot = -14.6249037424094 +870000 ekin = 0.259116433169414 | erot = 0.544622620095275 | epot = -15.4286427957584 | etot = -14.6249037424937 +871000 ekin = 0.254766113418661 | erot = 0.540599894777671 | epot = -15.4202697507265 | etot = -14.6249037425302 +872000 ekin = 0.248397230691804 | erot = 0.535228153627548 | epot = -15.4085291268285 | etot = -14.6249037425092 +873000 ekin = 0.240403953826285 | erot = 0.528487826572583 | epot = -15.3937955228344 | etot = -14.6249037424355 +874000 ekin = 0.231884125783745 | erot = 0.520479317821078 | epot = -15.3772671859334 | etot = -14.6249037423285 +875000 ekin = 0.224371090313998 | erot = 0.511388489700788 | epot = -15.3606633222313 | etot = -14.6249037422165 +876000 ekin = 0.219440883380304 | erot = 0.501436812694108 | epot = -15.3457814382033 | etot = -14.6249037421289 +877000 ekin = 0.218302972736541 | erot = 0.490831150818269 | epot = -15.3340378656425 | etot = -14.6249037420877 +878000 ekin = 0.221492456263516 | erot = 0.479728387736696 | epot = -15.3261245861012 | etot = -14.624903742101 +879000 ekin = 0.228756262275047 | erot = 0.468225594693746 | epot = -15.3218855991288 | etot = -14.62490374216 +880000 ekin = 0.23916916008879 | erot = 0.456378166082174 | epot = -15.3204510684128 | etot = -14.6249037422418 +881000 ekin = 0.251443176614632 | erot = 0.444238659513065 | epot = -15.3205855784454 | etot = -14.6249037423177 +882000 ekin = 0.264330844663881 | erot = 0.43190128969608 | epot = -15.3211358767216 | etot = -14.6249037423616 +883000 ekin = 0.276992343361879 | erot = 0.419534292632584 | epot = -15.3214303783539 | etot = -14.6249037423594 +884000 ekin = 0.289210952362963 | erot = 0.407386172192775 | epot = -15.3215008668683 | etot = -14.6249037423126 +885000 ekin = 0.301394205511005 | erot = 0.395760928443894 | epot = -15.3220588761927 | etot = -14.6249037422378 +886000 ekin = 0.31436859920589 | erot = 0.384968165379889 | epot = -15.3242405067469 | etot = -14.6249037421611 +887000 ekin = 0.329038341775477 | erot = 0.375262338090619 | epot = -15.3292044219764 | etot = -14.6249037421103 +888000 ekin = 0.346015111155314 | erot = 0.366788650328168 | epot = -15.3377075035892 | etot = -14.6249037421057 +889000 ekin = 0.365329693883282 | erot = 0.35955094737734 | epot = -15.3497843834164 | etot = -14.6249037421558 +890000 ekin = 0.386310696216818 | erot = 0.353410826838142 | epot = -15.3646252653079 | etot = -14.6249037422529 +891000 ekin = 0.407668087054666 | erot = 0.348119126036796 | epot = -15.3806909554674 | etot = -14.6249037423759 +892000 ekin = 0.427761236102702 | erot = 0.343372786942168 | epot = -15.396037765541 | etot = -14.6249037424962 +893000 ekin = 0.444977236018704 | erot = 0.338883525692821 | epot = -15.4087645042964 | etot = -14.6249037425849 +894000 ekin = 0.458112158679596 | erot = 0.334441343917346 | epot = -15.4174572452184 | etot = -14.6249037426214 +895000 ekin = 0.466648008330968 | erot = 0.329956933565266 | epot = -15.4215086844955 | etot = -14.6249037425992 +896000 ekin = 0.470850232518833 | erot = 0.325472374552695 | epot = -15.421226349598 | etot = -14.6249037425264 +897000 ekin = 0.471664510487189 | erot = 0.321137893833246 | epot = -15.4177061467443 | etot = -14.6249037424239 +898000 ekin = 0.470447771985121 | erot = 0.31716128210791 | epot = -15.4125127964118 | etot = -14.6249037423187 +899000 ekin = 0.468609320535131 | erot = 0.31374324783162 | epot = -15.4072563106044 | etot = -14.6249037422377 +900000 ekin = 0.467255363896452 | erot = 0.311015004595572 | epot = -15.4031741106926 | etot = -14.6249037422006 +901000 ekin = 0.466923299456765 | erot = 0.308993431077939 | epot = -15.4008204727507 | etot = -14.624903742216 +902000 ekin = 0.467466399705909 | erot = 0.307564919774022 | epot = -15.3999350617589 | etot = -14.624903742279 +903000 ekin = 0.468112799245423 | erot = 0.30650258938551 | epot = -15.3995191310034 | etot = -14.6249037423724 +904000 ekin = 0.467682260081114 | erot = 0.305513914729626 | epot = -15.3980999172821 | etot = -14.6249037424714 +905000 ekin = 0.464906903208319 | erot = 0.304308207539406 | epot = -15.3941188532968 | etot = -14.6249037425491 +906000 ekin = 0.458775313350499 | erot = 0.302667437698498 | epot = -15.3863464936332 | etot = -14.6249037425842 +907000 ekin = 0.448811106797387 | erot = 0.300501710925559 | epot = -15.3742165602889 | etot = -14.624903742566 +908000 ekin = 0.435212888278633 | erot = 0.297873922704189 | epot = -15.3579905534804 | etot = -14.6249037424975 +909000 ekin = 0.418821166579361 | erot = 0.294986492955396 | epot = -15.3387114019291 | etot = -14.6249037423944 +910000 ekin = 0.400928155652502 | erot = 0.292134043124591 | epot = -15.3179659410567 | etot = -14.6249037422796 +911000 ekin = 0.38299073131904 | erot = 0.289635345607532 | epot = -15.2975298191036 | etot = -14.624903742177 +912000 ekin = 0.366329155570265 | erot = 0.287762457046 | epot = -15.2789953547218 | etot = -14.6249037421055 +913000 ekin = 0.351888443631644 | erot = 0.286683662572436 | epot = -15.263475848279 | etot = -14.6249037420749 +914000 ekin = 0.340111462795988 | erot = 0.286431278414276 | epot = -15.2514464832956 | etot = -14.6249037420854 +915000 ekin = 0.330936398540546 | erot = 0.286898247266849 | epot = -15.2427383879358 | etot = -14.6249037421284 +916000 ekin = 0.32389927160205 | erot = 0.287861143478129 | epot = -15.2366641572708 | etot = -14.6249037421907 +917000 ekin = 0.318302399047882 | erot = 0.289022784864801 | epot = -15.2322289261694 | etot = -14.6249037422567 +918000 ekin = 0.313403328232211 | erot = 0.290065205370544 | epot = -15.2283722759156 | etot = -14.6249037423128 +919000 ekin = 0.308582994047746 | erot = 0.290702987753655 | epot = -15.2241897241503 | etot = -14.6249037423489 +920000 ekin = 0.303462620955297 | erot = 0.290727692024701 | epot = -15.2190940553404 | etot = -14.6249037423604 +921000 ekin = 0.297952758523176 | erot = 0.290036267627134 | epot = -15.2128927684984 | etot = -14.624903742348 +922000 ekin = 0.292232329167479 | erot = 0.288639696922892 | epot = -15.2057757684081 | etot = -14.6249037423177 +923000 ekin = 0.286668877938219 | erot = 0.286652137103033 | epot = -15.1982247573198 | etot = -14.6249037422785 +924000 ekin = 0.281701868658443 | erot = 0.284264668755385 | epot = -15.1908702796542 | etot = -14.6249037422404 +925000 ekin = 0.277717553237889 | erot = 0.281710557644916 | epot = -15.1843318530949 | etot = -14.6249037422121 +926000 ekin = 0.274945509179126 | erot = 0.279230091666523 | epot = -15.1790793430443 | etot = -14.6249037421987 +927000 ekin = 0.273402631519641 | erot = 0.277042382113033 | epot = -15.1753487558335 | etot = -14.6249037422009 +928000 ekin = 0.272900230271313 | erot = 0.27532923254522 | epot = -15.1731332050308 | etot = -14.6249037422143 +929000 ekin = 0.273115271900815 | erot = 0.274232799537056 | epot = -15.1722518136686 | etot = -14.6249037422307 +930000 ekin = 0.273710515355576 | erot = 0.273865029643896 | epot = -15.1724792872395 | etot = -14.6249037422401 +931000 ekin = 0.274474107139751 | erot = 0.274323617228769 | epot = -15.1737014666023 | etot = -14.6249037422338 +932000 ekin = 0.275440857683152 | erot = 0.275707340216854 | epot = -15.176051940107 | etot = -14.624903742207 +933000 ekin = 0.276957575781874 | erot = 0.278123705988361 | epot = -15.1799850239313 | etot = -14.6249037421611 +934000 ekin = 0.279664435383878 | erot = 0.281683992543418 | epot = -15.1862521700318 | etot = -14.6249037421045 +935000 ekin = 0.284382433296915 | erot = 0.286484503522641 | epot = -15.1957706788708 | etot = -14.6249037420512 +936000 ekin = 0.291920557579979 | erot = 0.292577187598074 | epot = -15.2094014871964 | etot = -14.6249037420184 +937000 ekin = 0.302840159169775 | erot = 0.299936553990588 | epot = -15.2276804551825 | etot = -14.6249037420221 +938000 ekin = 0.317231541763407 | erot = 0.308432066638773 | epot = -15.2505673504752 | etot = -14.6249037420731 +939000 ekin = 0.334562734704664 | erot = 0.317815317270636 | epot = -15.2772817941479 | etot = -14.6249037421726 +940000 ekin = 0.353649521805238 | erot = 0.327729086105133 | epot = -15.3062823502217 | etot = -14.6249037423114 +941000 ekin = 0.372770367646981 | erot = 0.337741122003566 | epot = -15.3354152321204 | etot = -14.6249037424699 +942000 ekin = 0.389915662531947 | erot = 0.347399749799135 | epot = -15.3622191549531 | etot = -14.6249037426221 +943000 ekin = 0.403126345739486 | erot = 0.356302369934052 | epot = -15.3843324584141 | etot = -14.6249037427406 +944000 ekin = 0.410851754406517 | erot = 0.364163156178947 | epot = -15.3999186533885 | etot = -14.624903742803 +945000 ekin = 0.412247920960694 | erot = 0.370864511414574 | epot = -15.4080161751724 | etot = -14.6249037427972 +946000 ekin = 0.407348747780355 | erot = 0.376479254457633 | epot = -15.4087317449614 | etot = -14.6249037427235 +947000 ekin = 0.397071124217177 | erot = 0.381256899558804 | epot = -15.4032317663713 | etot = -14.6249037425953 +948000 ekin = 0.383053455726579 | erot = 0.385576026491136 | epot = -15.3935332246539 | etot = -14.6249037424362 +949000 ekin = 0.367364810070546 | erot = 0.389872987609663 | epot = -15.382141539954 | etot = -14.6249037422738 +950000 ekin = 0.352149150211141 | erot = 0.394562514443112 | epot = -15.371615406789 | etot = -14.6249037421348 +951000 ekin = 0.339280178143099 | erot = 0.399966938641359 | epot = -15.3641508588234 | etot = -14.6249037420389 +952000 ekin = 0.330096120379237 | erot = 0.406268489131811 | epot = -15.3612683515071 | etot = -14.6249037419961 +953000 ekin = 0.325261831669684 | erot = 0.413492937870729 | epot = -15.3636585115451 | etot = -14.6249037420047 +954000 ekin = 0.324774911929383 | erot = 0.421526046053159 | epot = -15.3712047000361 | etot = -14.6249037420535 +955000 ekin = 0.328098170459405 | erot = 0.43015685816017 | epot = -15.3831587707447 | etot = -14.6249037421252 +956000 ekin = 0.334370903123805 | erot = 0.439135698166764 | epot = -15.3984103434923 | etot = -14.6249037422018 +957000 ekin = 0.342633913360331 | erot = 0.448231239799098 | epot = -15.415768895429 | etot = -14.6249037422696 +958000 ekin = 0.352004139469646 | erot = 0.457271615167415 | epot = -15.4341794969597 | etot = -14.6249037423226 +959000 ekin = 0.361755395785228 | erot = 0.466159587643494 | epot = -15.4528187257923 | etot = -14.6249037423635 +960000 ekin = 0.371296348402955 | erot = 0.474860087932416 | epot = -15.4710601787363 | etot = -14.6249037424009 +961000 ekin = 0.380073790912418 | erot = 0.483367158174937 | epot = -15.4883446915324 | etot = -14.624903742445 +962000 ekin = 0.387455548950117 | erot = 0.491663490520803 | epot = -15.5040227819739 | etot = -14.624903742503 +963000 ekin = 0.392654097311874 | erot = 0.49968729563245 | epot = -15.5172451355191 | etot = -14.6249037425748 +964000 ekin = 0.394737939559185 | erot = 0.507318071995981 | epot = -15.5269597542072 | etot = -14.624903742652 +965000 ekin = 0.392748486467115 | erot = 0.514386334667554 | epot = -15.5320385638537 | etot = -14.6249037427191 +966000 ekin = 0.38590547325284 | erot = 0.520705106527849 | epot = -15.5315143225377 | etot = -14.624903742757 +967000 ekin = 0.373852021645421 | erot = 0.526114369234909 | epot = -15.5248701336288 | etot = -14.6249037427485 +968000 ekin = 0.356869417135994 | erot = 0.530525868585158 | epot = -15.5122990284054 | etot = -14.6249037426842 +969000 ekin = 0.335986889834556 | erot = 0.533955228284217 | epot = -15.4948458606857 | etot = -14.624903742567 +970000 ekin = 0.312927788672648 | erot = 0.536531428461786 | epot = -15.4743629595477 | etot = -14.6249037424133 +971000 ekin = 0.289872105907182 | erot = 0.538479668129509 | epot = -15.4532555162878 | etot = -14.6249037422511 +972000 ekin = 0.269070232407033 | erot = 0.540080898361602 | epot = -15.4340548728818 | etot = -14.6249037421131 +973000 ekin = 0.252397022945933 | erot = 0.54161782723094 | epot = -15.4189185922051 | etot = -14.6249037420282 +974000 ekin = 0.240964852823081 | erot = 0.543321042152107 | epot = -15.4091896369882 | etot = -14.624903742013 +975000 ekin = 0.23490216482483 | erot = 0.545328986458791 | epot = -15.4051348933517 | etot = -14.6249037420681 +976000 ekin = 0.233353466622718 | erot = 0.547671994180028 | epot = -15.4059292029808 | etot = -14.624903742178 +977000 ekin = 0.23469220109011 | erot = 0.550284513867316 | epot = -15.4098804572738 | etot = -14.6249037423163 +978000 ekin = 0.236887903181319 | erot = 0.553043053342949 | epot = -15.4148346989756 | etot = -14.6249037424513 +979000 ekin = 0.237945797132614 | erot = 0.555821040963938 | epot = -15.4186705806485 | etot = -14.624903742552 +980000 ekin = 0.236334546964098 | erot = 0.558547250125554 | epot = -15.4197855396836 | etot = -14.624903742594 +981000 ekin = 0.231322843924842 | erot = 0.561252158433111 | epot = -15.4174787449233 | etot = -14.6249037425653 +982000 ekin = 0.223154169545187 | erot = 0.564087592075058 | epot = -15.4121455040898 | etot = -14.6249037424696 +983000 ekin = 0.213008719539848 | erot = 0.567310103887051 | epot = -15.405222565754 | etot = -14.6249037423271 +984000 ekin = 0.202740628548823 | erot = 0.571227590062905 | epot = -15.3988719607832 | etot = -14.6249037421715 +985000 ekin = 0.19443566515497 | erot = 0.576119771488149 | epot = -15.395459178685 | etot = -14.6249037420419 +986000 ekin = 0.189894304519326 | erot = 0.582152858152867 | epot = -15.3969509046438 | etot = -14.6249037419716 +987000 ekin = 0.190182835425093 | erot = 0.589313613953994 | epot = -15.4044001913574 | etot = -14.6249037419783 +988000 ekin = 0.195390213187501 | erot = 0.597385005524193 | epot = -15.4176789607687 | etot = -14.624903742057 +989000 ekin = 0.204671362362471 | erot = 0.605974905403898 | epot = -15.4355500099488 | etot = -14.6249037421824 +990000 ekin = 0.216563394578787 | erot = 0.614593273597699 | epot = -15.4560604104926 | etot = -14.6249037423161 +991000 ekin = 0.229465191862139 | erot = 0.622757127490779 | epot = -15.4771260617733 | etot = -14.6249037424204 +992000 ekin = 0.242114271128949 | erot = 0.630092599917091 | epot = -15.4971106135164 | etot = -14.6249037424704 +993000 ekin = 0.253902581480084 | erot = 0.636403793831659 | epot = -15.5152101177729 | etot = -14.6249037424612 +994000 ekin = 0.264939510335902 | erot = 0.641689105048086 | epot = -15.5315323577919 | etot = -14.6249037424079 +995000 ekin = 0.275864888579236 | erot = 0.646102898208602 | epot = -15.5468715291263 | etot = -14.6249037423384 +996000 ekin = 0.287497820770256 | erot = 0.649877086441226 | epot = -15.5622786494954 | etot = -14.6249037422839 +997000 ekin = 0.300450307467438 | erot = 0.65322742357329 | epot = -15.5785814733092 | etot = -14.6249037422685 +998000 ekin = 0.314829914377602 | erot = 0.656270894957618 | epot = -15.5960045516385 | etot = -14.6249037423033 +999000 ekin = 0.330110494517114 | erot = 0.658973630822449 | epot = -15.6139878677246 | etot = -14.624903742385 +1000000 ekin = 0.345190458650495 | erot = 0.661138339466907 | epot = -15.6312325406154 | etot = -14.624903742498 + 1000000 0.025569664 -1.5839232 0.020799898 -1.5286042 -3.5789082e-06 +Loop time of 20.5464 on 1 procs for 1000000 steps with 10 atoms + +Performance: 42051.215 tau/day, 48670.388 timesteps/s +98.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 | 16.716 | 16.716 | 16.716 | 0.0 | 81.36 +Bond | 0.6285 | 0.6285 | 0.6285 | 0.0 | 3.06 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.187 | 0.187 | 0.187 | 0.0 | 0.91 +Output | 6e-06 | 6e-06 | 6e-06 | 0.0 | 0.00 +Modify | 2.7186 | 2.7186 | 2.7186 | 0.0 | 13.23 +Other | | 0.2965 | | | 1.44 + +Nlocal: 10 ave 10 max 10 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 45 ave 45 max 45 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 45 +Ave neighs/atom = 4.5 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:20 diff --git a/examples/USER/cgdna/examples/oxDNA2/duplex3/log.18Jun19.duplex3.g++.4 b/examples/USER/cgdna/examples/oxDNA2/duplex3/log.18Jun19.duplex3.g++.4 new file mode 100644 index 0000000000..60722d1063 --- /dev/null +++ b/examples/USER/cgdna/examples/oxDNA2/duplex3/log.18Jun19.duplex3.g++.4 @@ -0,0 +1,1172 @@ +LAMMPS (18 Jun 2019) +variable number equal 1 +variable ofreq equal 1000 +variable efreq equal 1000 +variable T equal 0.1 + +units lj + +dimension 3 + +newton off + +boundary p p p + +atom_style hybrid bond ellipsoid +atom_modify sort 0 1.0 + +# Pair interactions require lists of neighbours to be calculated +neighbor 1.0 bin +neigh_modify every 1 delay 0 check yes + +read_data data.duplex3 + orthogonal box = (-20 -20 -20) to (20 20 20) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 10 atoms + reading velocities ... + 10 velocities + 10 ellipsoids + scanning bonds ... + 2 = max bonds/atom + reading bonds ... + 8 bonds + 2 = max # of 1-2 neighbors + 2 = max # of 1-3 neighbors + 2 = max # of 1-4 neighbors + 4 = max # of special neighbors + special bonds CPU = 0.000189 secs + read_data CPU = 0.003302 secs + +set atom * mass 1.0 + 10 settings made for mass + +group all type 1 4 +10 atoms in group all + +# oxDNA bond interactions - FENE backbone +bond_style oxdna2/fene +bond_coeff * 2.0 0.25 0.7564 + +# oxDNA pair interactions +pair_style hybrid/overlay oxdna2/excv oxdna2/stk oxdna2/hbond oxdna2/xstk oxdna2/coaxstk oxdna2/dh +pair_coeff * * oxdna2/excv 2.0 0.7 0.675 2.0 0.515 0.5 2.0 0.33 0.32 +pair_coeff * * oxdna2/stk seqdep ${T} 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/stk seqdep 0.1 1.3523 2.6717 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 +pair_coeff * * oxdna2/hbond seqdep 0.0 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 1 4 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff 2 3 oxdna2/hbond seqdep 1.0678 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 +pair_coeff * * oxdna2/xstk 47.5 0.575 0.675 0.495 0.655 2.25 0.791592653589793 0.58 1.7 1.0 0.68 1.7 1.0 0.68 1.5 0 0.65 1.7 0.875 0.68 1.7 0.875 0.68 +pair_coeff * * oxdna2/coaxstk 58.5 0.4 0.6 0.22 0.58 2.0 2.891592653589793 0.65 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 40.0 3.116592653589793 +pair_coeff * * oxdna2/dh ${T} 1.0 0.815 +pair_coeff * * oxdna2/dh 0.1 1.0 0.815 + +# NVE ensemble +fix 1 all nve/dot +#fix 1 all nve/dotc/langevin ${T} ${T} 0.03 457145 angmom 10 +#fix 1 all nve/asphere +#fix 2 all langevin ${T} ${T} 0.03 457145 angmom 10 + +timestep 1e-5 + +#comm_style tiled +#fix 3 all balance 10000 1.1 rcb + +#compute mol all chunk/atom molecule +#compute mychunk all vcm/chunk mol +#fix 4 all ave/time 10000 1 10000 c_mychunk[1] c_mychunk[2] c_mychunk[3] file vcm.txt mode vector + +#dump pos all xyz ${ofreq} traj.${number}.xyz + +#compute quat all property/atom quatw quati quatj quatk +#dump quat all custom ${ofreq} quat.${number}.txt id c_quat[1] c_quat[2] c_quat[3] c_quat[4] +#dump_modify quat sort id +#dump_modify quat format line "%d %13.6le %13.6le %13.6le %13.6le" + +compute erot all erotate/asphere +compute ekin all ke +compute epot all pe +variable erot equal c_erot +variable ekin equal c_ekin +variable epot equal c_epot +variable etot equal c_erot+c_ekin+c_epot +fix 5 all print ${efreq} "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes +fix 5 all print 1000 "$(step) ekin = ${ekin} | erot = ${erot} | epot = ${epot} | etot = ${etot}" screen yes + +#dump out all custom ${ofreq} out.${number}.txt id x y z vx vy vz fx fy fz tqx tqy tqz +#dump_modify out sort id +#dump_modify out format line "%d %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le %13.6le" + +run 1000000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.6274 + ghost atom cutoff = 2.6274 + binsize = 1.3137, bins = 31 31 31 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair oxdna2/excv, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard + (2) pair oxdna2/stk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (3) pair oxdna2/hbond, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (4) pair oxdna2/xstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (5) pair oxdna2/coaxstk, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none + (6) pair oxdna2/dh, perpetual, copy from (1) + attributes: half, newton off + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.652 | 7.834 | 8.016 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -1.4720158 0.009525411 -1.4624904 3.1370518e-06 +1000 ekin = 0.00366431201929595 | erot = 0.00193726360268106 | epot = -14.630505317301 | etot = -14.624903741679 +2000 ekin = 0.0144775076075461 | erot = 0.00770914672939826 | epot = -14.6470903960565 | etot = -14.6249037417196 +3000 ekin = 0.0319122186081537 | erot = 0.017197232864929 | epot = -14.6740131932573 | etot = -14.6249037417842 +4000 ekin = 0.055128304350968 | erot = 0.0302085305548261 | epot = -14.7102405767754 | etot = -14.6249037418696 +5000 ekin = 0.0830285165715777 | erot = 0.0464820547542036 | epot = -14.7544143132963 | etot = -14.6249037419705 +6000 ekin = 0.11433112154675 | erot = 0.0656980211282502 | epot = -14.8049328847556 | etot = -14.6249037420806 +7000 ekin = 0.14765386656188 | erot = 0.0874894888755877 | epot = -14.8600470976311 | etot = -14.6249037421936 +8000 ekin = 0.18160209956019 | erot = 0.111456095727761 | epot = -14.9179619375912 | etot = -14.6249037423032 +9000 ekin = 0.214852894725897 | erot = 0.137179311245239 | epot = -14.9769359483746 | etot = -14.6249037424035 +10000 ekin = 0.246227151956005 | erot = 0.164238435218469 | epot = -15.0353693296649 | etot = -14.6249037424904 +11000 ekin = 0.274743080419017 | erot = 0.192226420003323 | epot = -15.091873242983 | etot = -14.6249037425607 +12000 ekin = 0.299647141765663 | erot = 0.220764512146746 | epot = -15.1453153965252 | etot = -14.6249037426128 +13000 ekin = 0.320421918860927 | erot = 0.249514690530647 | epot = -15.1948403520386 | etot = -14.624903742647 +14000 ekin = 0.336773734884323 | erot = 0.278188933730603 | epot = -15.2398664112794 | etot = -14.6249037426645 +15000 ekin = 0.34860541376287 | erot = 0.306554508009539 | epot = -15.2800636644399 | etot = -14.6249037426675 +16000 ekin = 0.355980829097832 | erot = 0.334434770083873 | epot = -15.3153193418403 | etot = -14.6249037426586 +17000 ekin = 0.359087701059401 | erot = 0.361705441666651 | epot = -15.3456968853665 | etot = -14.6249037426405 +18000 ekin = 0.358203710992248 | erot = 0.388286889516457 | epot = -15.3713943431244 | etot = -14.6249037426157 +19000 ekin = 0.353668912555266 | erot = 0.414133518537258 | epot = -15.3927061736789 | etot = -14.6249037425864 +20000 ekin = 0.345865220775347 | erot = 0.439221805285588 | epot = -15.4099907686155 | etot = -14.6249037425546 +21000 ekin = 0.335201981146553 | erot = 0.463538642606666 | epot = -15.423644366275 | etot = -14.6249037425218 +22000 ekin = 0.322105588835009 | erot = 0.487071492273222 | epot = -15.4340808235974 | etot = -14.6249037424892 +23000 ekin = 0.307010918596293 | erot = 0.509801406229522 | epot = -15.4417160672835 | etot = -14.6249037424577 +24000 ekin = 0.290352786033317 | erot = 0.53169940050183 | epot = -15.4469559289633 | etot = -14.6249037424281 +25000 ekin = 0.272556500902201 | erot = 0.552726088759337 | epot = -15.4501863320625 | etot = -14.624903742401 +26000 ekin = 0.254027484079225 | erot = 0.572834017299149 | epot = -15.451765243755 | etot = -14.6249037423766 +27000 ekin = 0.235140665216512 | erot = 0.591971851501351 | epot = -15.4520162590732 | etot = -14.6249037423553 +28000 ekin = 0.216230835846381 | erot = 0.610089455964456 | epot = -15.4512240341482 | etot = -14.6249037423373 +29000 ekin = 0.197585285158732 | erot = 0.627142960082751 | epot = -15.4496319875638 | etot = -14.6249037423223 +30000 ekin = 0.179439940173485 | erot = 0.643099062793524 | epot = -15.4474427452772 | etot = -14.6249037423102 +31000 ekin = 0.161979935826275 | erot = 0.657938056392414 | epot = -15.4448217345188 | etot = -14.6249037423001 +32000 ekin = 0.145345108983154 | erot = 0.671655297434073 | epot = -15.4419041487088 | etot = -14.6249037422916 +33000 ekin = 0.129640400345301 | erot = 0.684261083518649 | epot = -15.4388052261477 | etot = -14.6249037422838 +34000 ekin = 0.114950474500096 | erot = 0.695779112936577 | epot = -15.4356333297123 | etot = -14.6249037422756 +35000 ekin = 0.101357103460395 | erot = 0.706243888527945 | epot = -15.4325047342545 | etot = -14.6249037422661 +36000 ekin = 0.0889576334571495 | erot = 0.715697403164658 | epot = -15.4295587788764 | etot = -14.6249037422546 +37000 ekin = 0.0778817390290869 | erot = 0.724185638635694 | epot = -15.4269711199052 | etot = -14.6249037422404 +38000 ekin = 0.0683037091548152 | erot = 0.731755309647459 | epot = -15.4249627610255 | etot = -14.6249037422232 +39000 ekin = 0.0604476327394574 | erot = 0.738451228922887 | epot = -15.4238026038658 | etot = -14.6249037422035 +40000 ekin = 0.0545835914676698 | erot = 0.744314557682062 | epot = -15.4238018913317 | etot = -14.624903742182 +41000 ekin = 0.0510142787133431 | erot = 0.749382063190686 | epot = -15.425300084064 | etot = -14.6249037421599 +42000 ekin = 0.0500531571157122 | erot = 0.753686350478873 | epot = -15.4286432497339 | etot = -14.6249037421393 +43000 ekin = 0.0519969858277791 | erot = 0.757256889238925 | epot = -15.4341576171884 | etot = -14.6249037421217 +44000 ekin = 0.0570968352183795 | erot = 0.760121540481331 | epot = -15.4421221178083 | etot = -14.6249037421086 +45000 ekin = 0.0655321553469052 | erot = 0.762308219230389 | epot = -15.4527441166787 | etot = -14.6249037421014 +46000 ekin = 0.077391880036667 | erot = 0.763846321567477 | epot = -15.4661419437046 | etot = -14.6249037421005 +47000 ekin = 0.0926650518886644 | erot = 0.764767599959881 | epot = -15.4823363939543 | etot = -14.6249037421058 +48000 ekin = 0.111241466890937 | erot = 0.765106283689481 | epot = -15.5012514926974 | etot = -14.624903742117 +49000 ekin = 0.132920935183018 | erot = 0.764898395951864 | epot = -15.5227230732682 | etot = -14.6249037421333 +50000 ekin = 0.157428432862217 | erot = 0.764180392178735 | epot = -15.5465125671948 | etot = -14.6249037421538 +51000 ekin = 0.184431879186323 | erot = 0.762987403181098 | epot = -15.572323024545 | etot = -14.6249037421776 +52000 ekin = 0.213559336999553 | erot = 0.761351471408863 | epot = -15.5998145506122 | etot = -14.6249037422038 +53000 ekin = 0.244412677541706 | erot = 0.759300175100794 | epot = -15.6286165948746 | etot = -14.6249037422321 +54000 ekin = 0.276574826726782 | erot = 0.756855909735936 | epot = -15.6583344787253 | etot = -14.6249037422625 +55000 ekin = 0.309607708697251 | erot = 0.754035838659022 | epot = -15.6885472896524 | etot = -14.6249037422961 +56000 ekin = 0.343038597242195 | erot = 0.750852192167276 | epot = -15.7187945317442 | etot = -14.6249037423347 +57000 ekin = 0.376334705011675 | erot = 0.747312289063632 | epot = -15.748550736456 | etot = -14.6249037423806 +58000 ekin = 0.408870193943514 | erot = 0.743417624903406 | epot = -15.7771915612831 | etot = -14.6249037424361 +59000 ekin = 0.439895666476151 | erot = 0.739161690570044 | epot = -15.8039610995489 | etot = -14.6249037425027 +60000 ekin = 0.468524372325882 | erot = 0.734526514748492 | epot = -15.8279546296535 | etot = -14.6249037425791 +61000 ekin = 0.493750804630977 | erot = 0.729479048549992 | epot = -15.8481335958426 | etot = -14.6249037426617 +62000 ekin = 0.514511417905742 | erot = 0.723968952962828 | epot = -15.8633841136118 | etot = -14.6249037427432 +63000 ekin = 0.529785687820863 | erot = 0.717929490923054 | epot = -15.8726189215585 | etot = -14.6249037428146 +64000 ekin = 0.538722043350041 | erot = 0.711282639869802 | epot = -15.8749084260858 | etot = -14.624903742866 +65000 ekin = 0.540763046401972 | erot = 0.703948378732391 | epot = -15.8696151680244 | etot = -14.62490374289 +66000 ekin = 0.535742115227036 | erot = 0.695856780686584 | epot = -15.8565026387959 | etot = -14.6249037428823 +67000 ekin = 0.523930969354304 | erot = 0.68696057843429 | epot = -15.8357952906313 | etot = -14.6249037428428 +68000 ekin = 0.506029704478312 | erot = 0.677245632039928 | epot = -15.8081790792934 | etot = -14.6249037427752 +69000 ekin = 0.483104826200259 | erot = 0.666737270644213 | epot = -15.7747458395309 | etot = -14.6249037426864 +70000 ekin = 0.456490218293525 | erot = 0.655501536742973 | epot = -15.7368954976211 | etot = -14.6249037425846 +71000 ekin = 0.427669918862827 | erot = 0.643641521525979 | epot = -15.696215182867 | etot = -14.6249037424782 +72000 ekin = 0.398160338931837 | erot = 0.631289876690699 | epot = -15.6543539579978 | etot = -14.6249037423753 +73000 ekin = 0.369405258277091 | erot = 0.618599034382457 | epot = -15.6129080349413 | etot = -14.6249037422818 +74000 ekin = 0.342691749042478 | erot = 0.605730669564096 | epot = -15.573326160809 | etot = -14.6249037422024 +75000 ekin = 0.319090526807116 | erot = 0.592845634905565 | epot = -15.5368399038526 | etot = -14.6249037421399 +76000 ekin = 0.299420611427649 | erot = 0.580095163563256 | epot = -15.5044195170865 | etot = -14.6249037420956 +77000 ekin = 0.284235504575202 | erot = 0.567613716752232 | epot = -15.476752963397 | etot = -14.6249037420696 +78000 ekin = 0.273826140866745 | erot = 0.555513536863883 | epot = -15.4542434197916 | etot = -14.624903742061 +79000 ekin = 0.268234635497765 | erot = 0.54388078034531 | epot = -15.437019157912 | etot = -14.6249037420689 +80000 ekin = 0.267272602906572 | erot = 0.532773036269537 | epot = -15.4249493812683 | etot = -14.6249037420922 +81000 ekin = 0.270538934182649 | erot = 0.522218059775401 | epot = -15.417660736088 | etot = -14.62490374213 +82000 ekin = 0.27743457435936 | erot = 0.512213638247992 | epot = -15.414551954789 | etot = -14.6249037421817 +83000 ekin = 0.287175732620383 | erot = 0.502728640569106 | epot = -15.4148081154356 | etot = -14.6249037422461 +84000 ekin = 0.298811175848726 | erot = 0.493705451301405 | epot = -15.4174203694714 | etot = -14.6249037423213 +85000 ekin = 0.311252369949757 | erot = 0.485064122067327 | epot = -15.4212202344208 | etot = -14.6249037424038 +86000 ekin = 0.323325626376074 | erot = 0.476708618160845 | epot = -15.4249379870248 | etot = -14.6249037424879 +87000 ekin = 0.33385179551888 | erot = 0.468535420697723 | epot = -15.4272909587828 | etot = -14.6249037425662 +88000 ekin = 0.341751109758587 | erot = 0.460444399763838 | epot = -15.427099252152 | etot = -14.6249037426296 +89000 ekin = 0.346159825920252 | erot = 0.452351304178841 | epot = -15.4234148727694 | etot = -14.6249037426704 +90000 ekin = 0.346534667470577 | erot = 0.444200535918418 | epot = -15.4156389460721 | etot = -14.6249037426831 +91000 ekin = 0.342715665476236 | erot = 0.435976333753466 | epot = -15.4035957418971 | etot = -14.6249037426674 +92000 ekin = 0.334922715851711 | erot = 0.427710377227768 | epot = -15.3875368357076 | etot = -14.6249037426281 +93000 ekin = 0.323677844434189 | erot = 0.419484336040122 | epot = -15.368065923049 | etot = -14.6249037425747 +94000 ekin = 0.309669782921695 | erot = 0.411426964072737 | epot = -15.3460004895125 | etot = -14.624903742518 +95000 ekin = 0.293600014862055 | erot = 0.403706586473305 | epot = -15.3222103438027 | etot = -14.6249037424673 +96000 ekin = 0.2760582848845 | erot = 0.396520701306389 | epot = -15.297482728618 | etot = -14.6249037424272 +97000 ekin = 0.257464456296026 | erot = 0.390084510983188 | epot = -15.2724527096758 | etot = -14.6249037423966 +98000 ekin = 0.238086767083294 | erot = 0.384619533405776 | epot = -15.24761004286 | etot = -14.6249037423709 +99000 ekin = 0.218116994126189 | erot = 0.380342481668315 | epot = -15.2233632181387 | etot = -14.6249037423442 +100000 ekin = 0.197764845956813 | erot = 0.377453964065525 | epot = -15.2001225523343 | etot = -14.6249037423119 +101000 ekin = 0.177333852671588 | erot = 0.37612662169739 | epot = -15.1783642166417 | etot = -14.6249037422727 +102000 ekin = 0.157255732179676 | erot = 0.376493003927858 | epot = -15.1586524783359 | etot = -14.6249037422283 +103000 ekin = 0.138079925449103 | erot = 0.378634329970109 | epot = -15.1416179976017 | etot = -14.6249037421825 +104000 ekin = 0.120430234291513 | erot = 0.38257179133531 | epot = -15.1279057677667 | etot = -14.6249037421398 +105000 ekin = 0.104946722393699 | erot = 0.388261944551355 | epot = -15.1181124090491 | etot = -14.6249037421041 +106000 ekin = 0.0922291289495077 | erot = 0.395597086392455 | epot = -15.1127299574201 | etot = -14.6249037420781 +107000 ekin = 0.0827918191992449 | erot = 0.404410579138415 | epot = -15.112106140401 | etot = -14.6249037420633 +108000 ekin = 0.0770336430610872 | erot = 0.414486225075909 | epot = -15.116423610197 | etot = -14.62490374206 +109000 ekin = 0.0752213121179505 | erot = 0.425570202879076 | epot = -15.1256952570645 | etot = -14.6249037420675 +110000 ekin = 0.077482636424855 | erot = 0.437383858086389 | epot = -15.1397702365963 | etot = -14.6249037420851 +111000 ekin = 0.0838057148049012 | erot = 0.449635759435866 | epot = -15.1583452163524 | etot = -14.6249037421117 +112000 ekin = 0.094041131771038 | erot = 0.462031808376727 | epot = -15.1809766822944 | etot = -14.6249037421466 +113000 ekin = 0.107905661684216 | erot = 0.47428271886895 | epot = -15.2070921227424 | etot = -14.6249037421893 +114000 ekin = 0.124987416380585 | erot = 0.486108767327206 | epot = -15.2359999259466 | etot = -14.6249037422388 +115000 ekin = 0.144753474421712 | erot = 0.497242253022929 | epot = -15.2668994697393 | etot = -14.6249037422947 +116000 ekin = 0.166561593123338 | erot = 0.507428522970937 | epot = -15.2988938584497 | etot = -14.6249037423555 +117000 ekin = 0.189677527330919 | erot = 0.516426638198595 | epot = -15.3310079079494 | etot = -14.6249037424199 +118000 ekin = 0.213298790897393 | erot = 0.524010758771299 | epot = -15.3622132921543 | etot = -14.6249037424856 +119000 ekin = 0.236584576961686 | erot = 0.529973112381402 | epot = -15.3914614318934 | etot = -14.6249037425503 +120000 ekin = 0.258690301858407 | erot = 0.5341290349257 | epot = -15.4177230793954 | etot = -14.6249037426112 +121000 ekin = 0.278804196533067 | erot = 0.536324108799723 | epot = -15.4400320479983 | etot = -14.6249037426655 +122000 ekin = 0.296182819519644 | erot = 0.536442962870851 | epot = -15.4575295251011 | etot = -14.6249037427106 +123000 ekin = 0.310182446406097 | erot = 0.534418915104283 | epot = -15.4695051042545 | etot = -14.6249037427441 +124000 ekin = 0.320283972930319 | erot = 0.530243389137748 | epot = -15.4754311048325 | etot = -14.6249037427644 +125000 ekin = 0.326110081462518 | erot = 0.523973945236228 | epot = -15.4749877694694 | etot = -14.6249037427707 +126000 ekin = 0.32743470961478 | erot = 0.515739832556742 | epot = -15.468078284934 | etot = -14.6249037427624 +127000 ekin = 0.324186046690464 | erot = 0.505744172152755 | epot = -15.4548339615831 | etot = -14.6249037427398 +128000 ekin = 0.316445106704291 | erot = 0.494262185784872 | epot = -15.4356110351926 | etot = -14.6249037427034 +129000 ekin = 0.304442167762781 | erot = 0.481635256753188 | epot = -15.4109811671702 | etot = -14.6249037426542 +130000 ekin = 0.288552887156539 | erot = 0.468261006625544 | epot = -15.3817176363753 | etot = -14.6249037425933 +131000 ekin = 0.269294696165401 | erot = 0.45457995559872 | epot = -15.3487783942861 | etot = -14.6249037425219 +132000 ekin = 0.247322351785784 | erot = 0.441059661322916 | epot = -15.3132857555505 | etot = -14.6249037424418 +133000 ekin = 0.223419723871666 | erot = 0.428177456066593 | epot = -15.2765009222933 | etot = -14.624903742355 +134000 ekin = 0.19848366631698 | erot = 0.416402982921093 | epot = -15.2397903915024 | etot = -14.6249037422643 +135000 ekin = 0.173495806295277 | erot = 0.406181641002432 | epot = -15.2045811894713 | etot = -14.6249037421736 +136000 ekin = 0.149479658252776 | erot = 0.397919790440761 | epot = -15.1723031907806 | etot = -14.6249037420871 +137000 ekin = 0.127443476996694 | erot = 0.391972186713497 | epot = -15.1443194057198 | etot = -14.6249037420096 +138000 ekin = 0.108312970525399 | erot = 0.38863170083623 | epot = -15.121848413308 | etot = -14.6249037419464 +139000 ekin = 0.0928612988417865 | erot = 0.388121053034643 | epot = -15.1058860937781 | etot = -14.6249037419017 +140000 ekin = 0.0816456573909381 | erot = 0.390586148388578 | epot = -15.0971355476584 | etot = -14.6249037418789 +141000 ekin = 0.074959634987115 | erot = 0.396090706683305 | epot = -15.0959540835502 | etot = -14.6249037418797 +142000 ekin = 0.072808553768854 | erot = 0.404612196534598 | epot = -15.1023244922079 | etot = -14.6249037419044 +143000 ekin = 0.0749117535381453 | erot = 0.416039504837322 | epot = -15.1158550003263 | etot = -14.6249037419509 +144000 ekin = 0.0807320498018154 | erot = 0.430173136684429 | epot = -15.1358089285018 | etot = -14.6249037420155 +145000 ekin = 0.0895290255830711 | erot = 0.44672889393778 | epot = -15.1611616616143 | etot = -14.6249037420935 +146000 ekin = 0.100429851262872 | erot = 0.46534582966922 | epot = -15.1906794231108 | etot = -14.6249037421787 +147000 ekin = 0.112509264558272 | erot = 0.485598823527704 | epot = -15.2230118303508 | etot = -14.6249037422648 +148000 ekin = 0.124869425792311 | erot = 0.507015469189125 | epot = -15.2567886373275 | etot = -14.6249037423461 +149000 ekin = 0.136710750658201 | erot = 0.529096273050756 | epot = -15.2907107661264 | etot = -14.6249037424174 +150000 ekin = 0.147386480805994 | erot = 0.551336607351909 | epot = -15.3236268306334 | etot = -14.6249037424755 +151000 ekin = 0.156436378415923 | erot = 0.573248570644847 | epot = -15.3545886915789 | etot = -14.6249037425181 +152000 ekin = 0.163597998371616 | erot = 0.594380933602504 | epot = -15.3828826745191 | etot = -14.624903742545 +153000 ekin = 0.168796920199645 | erot = 0.614335653334077 | epot = -15.4080363160909 | etot = -14.6249037425571 +154000 ekin = 0.172119667637843 | erot = 0.632779929091333 | epot = -15.4298033392859 | etot = -14.6249037425567 +155000 ekin = 0.173774602206439 | erot = 0.649453329864798 | epot = -15.4481316746178 | etot = -14.6249037425466 +156000 ekin = 0.174046854480218 | erot = 0.664170048550206 | epot = -15.4631206455604 | etot = -14.62490374253 +157000 ekin = 0.17325345101635 | erot = 0.67681676270221 | epot = -15.4749739562283 | etot = -14.6249037425097 +158000 ekin = 0.171704281293994 | erot = 0.687346881267705 | epot = -15.48395490505 | etot = -14.6249037424883 +159000 ekin = 0.169673443700116 | erot = 0.695772131172833 | epot = -15.4903493173403 | etot = -14.6249037424673 +160000 ekin = 0.167383826014799 | erot = 0.702152502586226 | epot = -15.4944400710487 | etot = -14.6249037424476 +161000 ekin = 0.165005624031947 | erot = 0.706585545944227 | epot = -15.4964949124054 | etot = -14.6249037424292 +162000 ekin = 0.162667154471987 | erot = 0.7091959147906 | epot = -15.4967668116741 | etot = -14.6249037424115 +163000 ekin = 0.160474189581708 | erot = 0.710125892129571 | epot = -15.4955038241048 | etot = -14.6249037423935 +164000 ekin = 0.158532578972808 | erot = 0.709527441008673 | epot = -15.4929637623557 | etot = -14.6249037423742 +165000 ekin = 0.156968465370873 | erot = 0.707556101120943 | epot = -15.4894283088449 | etot = -14.624903742353 +166000 ekin = 0.155941053191322 | erot = 0.704366832057858 | epot = -15.4852116275794 | etot = -14.6249037423302 +167000 ekin = 0.15564449680974 | erot = 0.700111698658167 | epot = -15.4806599377741 | etot = -14.6249037423062 +168000 ekin = 0.156297672988367 | erot = 0.694939119112688 | epot = -15.4761405343834 | etot = -14.6249037422823 +169000 ekin = 0.158122923325633 | erot = 0.688994262093866 | epot = -15.4720209276801 | etot = -14.6249037422606 +170000 ekin = 0.161316852937839 | erot = 0.682420091513715 | epot = -15.4686406866943 | etot = -14.6249037422428 +171000 ekin = 0.166017619146964 | erot = 0.675358520304694 | epot = -15.4662798816826 | etot = -14.6249037422309 +172000 ekin = 0.172273671159624 | erot = 0.667951149520755 | epot = -15.465128562907 | etot = -14.6249037422266 +173000 ekin = 0.180018623556126 | erot = 0.660339136127817 | epot = -15.465261501915 | etot = -14.624903742231 +174000 ekin = 0.189056055744959 | erot = 0.652661851831919 | epot = -15.4666216498214 | etot = -14.6249037422446 +175000 ekin = 0.199056860650102 | erot = 0.645054167286212 | epot = -15.4690147702031 | etot = -14.6249037422668 +176000 ekin = 0.209570701317496 | erot = 0.637642422787083 | epot = -15.4721168664013 | etot = -14.6249037422968 +177000 ekin = 0.220052442974529 | erot = 0.630539423737744 | epot = -15.4754956090444 | etot = -14.6249037423321 +178000 ekin = 0.229904071991068 | erot = 0.623839102439468 | epot = -15.4786469168001 | etot = -14.6249037423696 +179000 ekin = 0.238532114427838 | erot = 0.617611757778078 | epot = -15.4810476146109 | etot = -14.624903742405 +180000 ekin = 0.245419064060145 | erot = 0.611900922402911 | epot = -15.4822237288958 | etot = -14.6249037424328 +181000 ekin = 0.250203926055637 | erot = 0.606722796615544 | epot = -15.4818304651187 | etot = -14.6249037424476 +182000 ekin = 0.252761402919458 | erot = 0.602068750132192 | epot = -15.4797338954962 | etot = -14.6249037424445 +183000 ekin = 0.253262634973987 | erot = 0.597910660168958 | epot = -15.4760770375644 | etot = -14.6249037424214 +184000 ekin = 0.252195762131854 | erot = 0.594208023727366 | epot = -15.4713075282391 | etot = -14.6249037423799 +185000 ekin = 0.250326113306337 | erot = 0.590915179672999 | epot = -15.4661450353057 | etot = -14.6249037423263 +186000 ekin = 0.248586758541696 | erot = 0.587986907734991 | epot = -15.4614774085483 | etot = -14.6249037422716 +187000 ekin = 0.247909630265907 | erot = 0.585381224304124 | epot = -15.4581945967987 | etot = -14.6249037422287 +188000 ekin = 0.249029052394555 | erot = 0.583059148734203 | epot = -15.4569919433383 | etot = -14.6249037422095 +189000 ekin = 0.25230380318116 | erot = 0.580982165410166 | epot = -15.4581897108133 | etot = -14.624903742222 +190000 ekin = 0.257603763515512 | erot = 0.579108718145525 | epot = -15.4616162239286 | etot = -14.6249037422675 +191000 ekin = 0.264292655598072 | erot = 0.577391223759195 | epot = -15.4665876216979 | etot = -14.6249037423406 +192000 ekin = 0.271315385056371 | erot = 0.575774831089445 | epot = -15.4719939585754 | etot = -14.6249037424296 +193000 ekin = 0.277374539132726 | erot = 0.574198584868558 | epot = -15.4764768665205 | etot = -14.6249037425192 +194000 ekin = 0.281161076019698 | erot = 0.572598913484966 | epot = -15.4786637320983 | etot = -14.6249037425936 +195000 ekin = 0.28159263734721 | erot = 0.570914645865857 | epot = -15.4774110258526 | etot = -14.6249037426396 +196000 ekin = 0.278011867235767 | erot = 0.569092314484949 | epot = -15.4720079243697 | etot = -14.624903742649 +197000 ekin = 0.270307527593016 | erot = 0.567090473640134 | epot = -15.4623017438535 | etot = -14.6249037426204 +198000 ekin = 0.258940359976181 | erot = 0.564882125458909 | epot = -15.4487262279932 | etot = -14.6249037425581 +199000 ekin = 0.244877476699608 | erot = 0.562454912721969 | epot = -15.432236131893 | etot = -14.6249037424714 +200000 ekin = 0.229456931019031 | erot = 0.559809284042109 | epot = -15.4141699574328 | etot = -14.6249037423717 +201000 ekin = 0.214214012279214 | erot = 0.556955381706857 | epot = -15.396073136257 | etot = -14.6249037422709 +202000 ekin = 0.200701376135343 | erot = 0.553909032488835 | epot = -15.3795141508038 | etot = -14.6249037421796 +203000 ekin = 0.190329688711031 | erot = 0.550687503827458 | epot = -15.3659209346438 | etot = -14.6249037421053 +204000 ekin = 0.184246973275431 | erot = 0.547306655839924 | epot = -15.3564573711681 | etot = -14.6249037420528 +205000 ekin = 0.183262973705765 | erot = 0.543779043729182 | epot = -15.3519457594592 | etot = -14.6249037420242 +206000 ekin = 0.187816949073314 | erot = 0.5401134327365 | epot = -15.3528341238289 | etot = -14.6249037420191 +207000 ekin = 0.197980929490155 | erot = 0.536315658388532 | epot = -15.3592003299141 | etot = -14.6249037420354 +208000 ekin = 0.213487612676859 | erot = 0.532390498207104 | epot = -15.3707818529543 | etot = -14.6249037420704 +209000 ekin = 0.23377236271188 | erot = 0.528344018724915 | epot = -15.3870201235577 | etot = -14.6249037421209 +210000 ekin = 0.258021408691598 | erot = 0.524185756556645 | epot = -15.4071109074321 | etot = -14.6249037421838 +211000 ekin = 0.285222208429149 | erot = 0.519930104708152 | epot = -15.4300560553932 | etot = -14.6249037422559 +212000 ekin = 0.314215813604078 | erot = 0.515596398128299 | epot = -15.454715954066 | etot = -14.6249037423336 +213000 ekin = 0.343753634042999 | erot = 0.511207450608694 | epot = -15.4798648270648 | etot = -14.6249037424131 +214000 ekin = 0.372561594269383 | erot = 0.506786560075164 | epot = -15.5042518968341 | etot = -14.6249037424896 +215000 ekin = 0.399412456461965 | erot = 0.502353347158559 | epot = -15.5266695461789 | etot = -14.6249037425584 +216000 ekin = 0.423202666202795 | erot = 0.497919155943979 | epot = -15.5460255647614 | etot = -14.6249037426146 +217000 ekin = 0.443025226539309 | erot = 0.49348301367888 | epot = -15.561411982873 | etot = -14.6249037426548 +218000 ekin = 0.458227302378268 | erot = 0.48902929485633 | epot = -15.5721603399116 | etot = -14.624903742677 +219000 ekin = 0.468443019183614 | erot = 0.484528125251351 | epot = -15.5778748871154 | etot = -14.6249037426804 +220000 ekin = 0.473598483116428 | erot = 0.479939108990727 | epot = -15.5784413347736 | etot = -14.6249037426664 +221000 ekin = 0.473894168318623 | erot = 0.475218183432471 | epot = -15.5740160943877 | etot = -14.6249037426366 +222000 ekin = 0.469774014049581 | erot = 0.470326483973439 | epot = -15.5650042406161 | etot = -14.6249037425931 +223000 ekin = 0.461887320397625 | erot = 0.465239349169327 | epot = -15.5520304121052 | etot = -14.6249037425383 +224000 ekin = 0.451041336422898 | erot = 0.459953336121568 | epot = -15.5358984150205 | etot = -14.6249037424761 +225000 ekin = 0.438137198423164 | erot = 0.454489515561359 | epot = -15.5175304563962 | etot = -14.6249037424117 +226000 ekin = 0.424086332826599 | erot = 0.448892294163476 | epot = -15.4978823693417 | etot = -14.6249037423516 +227000 ekin = 0.409717105195494 | erot = 0.443224250669919 | epot = -15.4778450981669 | etot = -14.6249037423015 +228000 ekin = 0.395692916861841 | erot = 0.437558473222699 | epot = -15.4581551323495 | etot = -14.624903742265 +229000 ekin = 0.382463318564939 | erot = 0.431970318931165 | epot = -15.4393373797388 | etot = -14.6249037422427 +230000 ekin = 0.37025811673091 | erot = 0.426530223272703 | epot = -15.4216920822363 | etot = -14.6249037422326 +231000 ekin = 0.359118625017792 | erot = 0.42129844029256 | epot = -15.4053208075418 | etot = -14.6249037422314 +232000 ekin = 0.348949729121723 | erot = 0.416321816462675 | epot = -15.3901752878201 | etot = -14.6249037422357 +233000 ekin = 0.339575284188518 | erot = 0.411632247273729 | epot = -15.3761112737048 | etot = -14.6249037422426 +234000 ekin = 0.330784909163637 | erot = 0.407246384303507 | epot = -15.3629350357173 | etot = -14.6249037422502 +235000 ekin = 0.322367248495492 | erot = 0.403166248673538 | epot = -15.3504372394263 | etot = -14.6249037422572 +236000 ekin = 0.314129851889848 | erot = 0.399380677843492 | epot = -15.3384142719969 | etot = -14.6249037422636 +237000 ekin = 0.305908300165184 | erot = 0.395867600047875 | epot = -15.3266796424821 | etot = -14.624903742269 +238000 ekin = 0.297568064658136 | erot = 0.392597157204584 | epot = -15.3150689641364 | etot = -14.6249037422737 +239000 ekin = 0.289002756415172 | erot = 0.389535643317114 | epot = -15.3034421420096 | etot = -14.6249037422774 +240000 ekin = 0.280132201614914 | erot = 0.386650129641556 | epot = -15.2916860735363 | etot = -14.6249037422798 +241000 ekin = 0.270903172980511 | erot = 0.383913574227165 | epot = -15.2797204894881 | etot = -14.6249037422804 +242000 ekin = 0.261294311102232 | erot = 0.381310019034049 | epot = -15.2675080724143 | etot = -14.6249037422781 +243000 ekin = 0.251325265434219 | erot = 0.378839435319532 | epot = -15.2550684430252 | etot = -14.6249037422715 +244000 ekin = 0.241068460184283 | erot = 0.376521662813082 | epot = -15.2424938652572 | etot = -14.6249037422598 +245000 ekin = 0.230660579660644 | erot = 0.374398842117291 | epot = -15.2299631640205 | etot = -14.6249037422425 +246000 ekin = 0.220310176855083 | erot = 0.372535772164452 | epot = -15.217749691239 | etot = -14.6249037422195 +247000 ekin = 0.210297920408214 | erot = 0.371017759432552 | epot = -15.2062194220322 | etot = -14.6249037421914 +248000 ekin = 0.200966973970082 | erot = 0.36994577990608 | epot = -15.1958164960362 | etot = -14.6249037421601 +249000 ekin = 0.192702752056133 | erot = 0.369429135338683 | epot = -15.1870356295227 | etot = -14.6249037421279 +250000 ekin = 0.185903524092239 | erot = 0.369576201101353 | epot = -15.1803834672915 | etot = -14.6249037420979 +251000 ekin = 0.180945546219151 | erot = 0.370484246994623 | epot = -15.1763335352865 | etot = -14.6249037420727 +252000 ekin = 0.178147956309189 | erot = 0.372229589272153 | epot = -15.1752812876364 | etot = -14.624903742055 +253000 ekin = 0.177743031464987 | erot = 0.374859230992971 | epot = -15.1775060045044 | etot = -14.6249037420464 +254000 ekin = 0.179856300054645 | erot = 0.378385037101156 | epot = -15.1831450792033 | etot = -14.6249037420475 +255000 ekin = 0.184498455786156 | erot = 0.382781080046288 | epot = -15.1921832778908 | etot = -14.6249037420584 +256000 ekin = 0.191568141872831 | erot = 0.387983970946124 | epot = -15.2044558548971 | etot = -14.6249037420782 +257000 ekin = 0.20086208487434 | erot = 0.39389562099376 | epot = -15.2196614479739 | etot = -14.6249037421058 +258000 ekin = 0.212087875566807 | erot = 0.400387498987271 | epot = -15.2373791166947 | etot = -14.6249037421406 +259000 ekin = 0.224875306192123 | erot = 0.407305396776656 | epot = -15.2570844451507 | etot = -14.6249037421819 +260000 ekin = 0.238784314763303 | erot = 0.414473950040634 | epot = -15.2781620070332 | etot = -14.6249037422292 +261000 ekin = 0.253310397642086 | erot = 0.421700596682803 | epot = -15.2999147366071 | etot = -14.6249037422822 +262000 ekin = 0.26789075041242 | erot = 0.428779149458854 | epot = -15.3215736422117 | etot = -14.6249037423404 +263000 ekin = 0.281915541778016 | erot = 0.435493571930236 | epot = -15.3423128561104 | etot = -14.6249037424021 +264000 ekin = 0.294748319449364 | erot = 0.441622773940569 | epot = -15.3612748358549 | etot = -14.624903742465 +265000 ekin = 0.305757851305535 | erot = 0.446947232466421 | epot = -15.3776088262975 | etot = -14.6249037425255 +266000 ekin = 0.314361275702592 | erot = 0.451257984268131 | epot = -15.3905230025502 | etot = -14.6249037425794 +267000 ekin = 0.320075758814341 | erot = 0.454368036195608 | epot = -15.399347537632 | etot = -14.624903742622 +268000 ekin = 0.322573111286139 | erot = 0.456125517717021 | epot = -15.4036023716517 | etot = -14.6249037426486 +269000 ekin = 0.321728949457285 | erot = 0.456427019950081 | epot = -15.4030597120627 | etot = -14.6249037426554 +270000 ekin = 0.317655198203759 | erot = 0.455228696070215 | epot = -15.397787636915 | etot = -14.624903742641 +271000 ekin = 0.310703151367757 | erot = 0.452552178356157 | epot = -15.3881590723317 | etot = -14.6249037426077 +272000 ekin = 0.3014262335366 | erot = 0.448482664562447 | epot = -15.37481264066 | etot = -14.624903742561 +273000 ekin = 0.290499502093233 | erot = 0.443158007811504 | epot = -15.3585612524143 | etot = -14.6249037425096 +274000 ekin = 0.278606962225926 | erot = 0.436750209658098 | epot = -15.3402609143472 | etot = -14.6249037424632 +275000 ekin = 0.266323480340475 | erot = 0.429443553159133 | epot = -15.320670775929 | etot = -14.6249037424294 +276000 ekin = 0.254026977157675 | erot = 0.421415402005373 | epot = -15.3003461215741 | etot = -14.6249037424111 +277000 ekin = 0.241871064453077 | erot = 0.412825312322701 | epot = -15.2796001191813 | etot = -14.6249037424055 +278000 ekin = 0.229828041579266 | erot = 0.403815416630584 | epot = -15.2585472006154 | etot = -14.6249037424055 +279000 ekin = 0.217786141145793 | erot = 0.394521119097645 | epot = -15.2372110026455 | etot = -14.6249037424021 +280000 ekin = 0.205666064593437 | erot = 0.385087703032635 | epot = -15.2156575100138 | etot = -14.6249037423877 +281000 ekin = 0.193518604274061 | erot = 0.375686870763365 | epot = -15.1941092173957 | etot = -14.6249037423582 +282000 ekin = 0.18157672074763 | erot = 0.366527860022155 | epot = -15.1730083230837 | etot = -14.624903742314 +283000 ekin = 0.170254050626075 | erot = 0.357859944224688 | epot = -15.1530177371095 | etot = -14.6249037422587 +284000 ekin = 0.160098631070491 | erot = 0.349965713706295 | epot = -15.1349680869751 | etot = -14.6249037421983 +285000 ekin = 0.151720356670846 | erot = 0.34314662552044 | epot = -15.1197707243306 | etot = -14.6249037421394 +286000 ekin = 0.145712559183964 | erot = 0.337703485421193 | epot = -15.1083197866929 | etot = -14.6249037420878 +287000 ekin = 0.142584250545026 | erot = 0.333914836093095 | epot = -15.1014028286861 | etot = -14.624903742048 +288000 ekin = 0.1427129413407 | erot = 0.33201595204283 | epot = -15.0996326354059 | etot = -14.6249037420224 +289000 ekin = 0.146320998448507 | erot = 0.332180585090171 | epot = -15.1034053255506 | etot = -14.6249037420119 +290000 ekin = 0.153472816921105 | erot = 0.334506983379138 | epot = -15.1128835423165 | etot = -14.6249037420163 +291000 ekin = 0.164086465662505 | erot = 0.339009144348392 | epot = -15.1279993520451 | etot = -14.6249037420342 +292000 ekin = 0.177952173600193 | erot = 0.345613807734964 | epot = -15.1484697233995 | etot = -14.6249037420643 +293000 ekin = 0.194750859968512 | erot = 0.354163344443286 | epot = -15.1738179465169 | etot = -14.6249037421051 +294000 ekin = 0.214068309158811 | erot = 0.364424408222176 | epot = -15.2033964595362 | etot = -14.6249037421552 +295000 ekin = 0.235403710402673 | erot = 0.376101928511166 | epot = -15.2364093811272 | etot = -14.6249037422133 +296000 ekin = 0.258174229752594 | erot = 0.388857685536638 | epot = -15.2719356575669 | etot = -14.6249037422777 +297000 ekin = 0.28171936013486 | erot = 0.402332315571688 | epot = -15.308955418053 | etot = -14.6249037423465 +298000 ekin = 0.30530968452295 | erot = 0.416169191335505 | epot = -15.3463826182751 | etot = -14.6249037424166 +299000 ekin = 0.328164426016042 | erot = 0.430038291827055 | epot = -15.3831064603285 | etot = -14.6249037424854 +300000 ekin = 0.349480947254597 | erot = 0.443657997414049 | epot = -15.4180426872175 | etot = -14.6249037425489 +301000 ekin = 0.368477349758915 | erot = 0.456812763608253 | epot = -15.4501938559697 | etot = -14.6249037426025 +302000 ekin = 0.384446573101029 | erot = 0.469364841860584 | epot = -15.478715157604 | etot = -14.6249037426423 +303000 ekin = 0.396817065634643 | erot = 0.481258609604428 | epot = -15.5029794179037 | etot = -14.6249037426647 +304000 ekin = 0.405211709647263 | erot = 0.492516637287232 | epot = -15.5226320896016 | etot = -14.6249037426671 +305000 ekin = 0.409494186866275 | erot = 0.503227368869637 | epot = -15.5376252983854 | etot = -14.6249037426495 +306000 ekin = 0.409791521883174 | erot = 0.513525227982492 | epot = -15.5482204924795 | etot = -14.6249037426138 +307000 ekin = 0.406484029568133 | erot = 0.523565033268022 | epot = -15.554952805401 | etot = -14.6249037425649 +308000 ekin = 0.400159443094258 | erot = 0.533493670193094 | epot = -15.5585568557967 | etot = -14.6249037425093 +309000 ekin = 0.391535685674106 | erot = 0.543422788904079 | epot = -15.5598622170332 | etot = -14.624903742455 +310000 ekin = 0.381364662750139 | erot = 0.553406603763137 | epot = -15.5596750089224 | etot = -14.6249037424091 +311000 ekin = 0.370335174701307 | erot = 0.563428434508751 | epot = -15.5586673515872 | etot = -14.6249037423771 +312000 ekin = 0.358994462074446 | erot = 0.573398378860501 | epot = -15.5572965832962 | etot = -14.6249037423613 +313000 ekin = 0.347704062022306 | erot = 0.583162598674582 | epot = -15.5557704030575 | etot = -14.6249037423606 +314000 ekin = 0.336637402906986 | erot = 0.592522528333631 | epot = -15.5540636736117 | etot = -14.624903742371 +315000 ekin = 0.325816357219225 | erot = 0.601260411440956 | epot = -15.5519805110472 | etot = -14.624903742387 +316000 ekin = 0.315175012816655 | erot = 0.609166451967456 | epot = -15.5492452071862 | etot = -14.6249037424021 +317000 ekin = 0.304633856553691 | erot = 0.616062831071924 | epot = -15.5456004300362 | etot = -14.6249037424106 +318000 ekin = 0.294167456686513 | erot = 0.62182086663663 | epot = -15.5408920657322 | etot = -14.624903742409 +319000 ekin = 0.283852816310304 | erot = 0.626369338623922 | epot = -15.5351258973303 | etot = -14.624903742396 +320000 ekin = 0.273891844373217 | erot = 0.629693948583815 | epot = -15.5284895353292 | etot = -14.6249037423721 +321000 ekin = 0.264607615830326 | erot = 0.631829520444979 | epot = -15.5213408786153 | etot = -14.62490374234 +322000 ekin = 0.256418665980307 | erot = 0.632847556381831 | epot = -15.5141699646654 | etot = -14.6249037423032 +323000 ekin = 0.249797892887523 | erot = 0.632842055921361 | epot = -15.5075436910745 | etot = -14.6249037422657 +324000 ekin = 0.245223011939351 | erot = 0.631916211662891 | epot = -15.5020429658331 | etot = -14.6249037422309 +325000 ekin = 0.243124676660684 | erot = 0.630171930979688 | epot = -15.4982003498434 | etot = -14.624903742203 +326000 ekin = 0.243837159968099 | erot = 0.627703310196172 | epot = -15.4964442123488 | etot = -14.6249037421845 +327000 ekin = 0.247555458534595 | erot = 0.624594349329669 | epot = -15.4970535500421 | etot = -14.6249037421778 +328000 ekin = 0.254302069317299 | erot = 0.620920422826771 | epot = -15.5001262343279 | etot = -14.6249037421838 +329000 ekin = 0.263906382978619 | erot = 0.616752378549859 | epot = -15.5055625037313 | etot = -14.6249037422028 +330000 ekin = 0.275999298196813 | erot = 0.612161709808654 | epot = -15.5130647502395 | etot = -14.624903742234 +331000 ekin = 0.290024872454789 | erot = 0.607225138478484 | epot = -15.5221537532086 | etot = -14.6249037422753 +332000 ekin = 0.305269328205604 | erot = 0.602027230533244 | epot = -15.5322003010627 | etot = -14.6249037423238 +333000 ekin = 0.320905611375339 | erot = 0.596660303338559 | epot = -15.5424696570899 | etot = -14.624903742376 +334000 ekin = 0.33604943896321 | erot = 0.591221710457376 | epot = -15.5521748918485 | etot = -14.6249037424279 +335000 ekin = 0.349821102707738 | erot = 0.585809355783106 | epot = -15.5605342009668 | etot = -14.624903742476 +336000 ekin = 0.361406827299164 | erot = 0.580516763971287 | epot = -15.5668273337868 | etot = -14.6249037425163 +337000 ekin = 0.370114335989308 | erot = 0.575429096256479 | epot = -15.5704471747923 | etot = -14.6249037425465 +338000 ekin = 0.375418963131897 | erot = 0.570621177508977 | epot = -15.5709438832049 | etot = -14.624903742564 +339000 ekin = 0.37699830668418 | erot = 0.566157982091382 | epot = -15.568060031343 | etot = -14.6249037425674 +340000 ekin = 0.374754278532065 | erot = 0.562097189039008 | epot = -15.5617552101272 | etot = -14.6249037425561 +341000 ekin = 0.368821588409643 | erot = 0.558493134368575 | epot = -15.5522184653083 | etot = -14.62490374253 +342000 ekin = 0.359561251230613 | erot = 0.555400700218343 | epot = -15.5398656939398 | etot = -14.6249037424909 +343000 ekin = 0.34753785325451 | erot = 0.55287778591816 | epot = -15.5253193816136 | etot = -14.6249037424409 +344000 ekin = 0.33348037496383 | erot = 0.55098526840084 | epot = -15.5093693857485 | etot = -14.6249037423838 +345000 ekin = 0.318228359784329 | erot = 0.549783918348214 | epot = -15.4929160204567 | etot = -14.6249037423241 +346000 ekin = 0.302667555547452 | erot = 0.54932843011035 | epot = -15.4768997279244 | etot = -14.6249037422666 +347000 ekin = 0.287661057443402 | erot = 0.549659363310377 | epot = -15.4622241629697 | etot = -14.6249037422159 +348000 ekin = 0.273982878354199 | erot = 0.550794243902694 | epot = -15.4496808644332 | etot = -14.6249037421763 +349000 ekin = 0.262260631617831 | erot = 0.552719272009444 | epot = -15.4398836457781 | etot = -14.6249037421509 +350000 ekin = 0.252932884528162 | erot = 0.555383042233064 | epot = -15.4332196689026 | etot = -14.6249037421414 +351000 ekin = 0.246225113234554 | erot = 0.558693418765032 | epot = -15.4298222741477 | etot = -14.6249037421482 +352000 ekin = 0.242146418558272 | erot = 0.56251834442516 | epot = -15.4295685051533 | etot = -14.6249037421699 +353000 ekin = 0.240507191582667 | erot = 0.566690733134521 | epot = -15.4321016669209 | etot = -14.6249037422037 +354000 ekin = 0.240955911174045 | erot = 0.571016874086999 | epot = -15.436876527507 | etot = -14.6249037422459 +355000 ekin = 0.243030568944153 | erot = 0.575286990707781 | epot = -15.4432213019441 | etot = -14.6249037422922 +356000 ekin = 0.246218336341581 | erot = 0.579286102670368 | epot = -15.4504081813502 | etot = -14.6249037423382 +357000 ekin = 0.250015504867143 | erot = 0.582803084083675 | epot = -15.4577223313313 | etot = -14.6249037423804 +358000 ekin = 0.253980003728345 | erot = 0.585636256510411 | epot = -15.4645200026548 | etot = -14.6249037424161 +359000 ekin = 0.257771924238285 | erot = 0.587595069854159 | epot = -15.470270736536 | etot = -14.6249037424435 +360000 ekin = 0.261178006692362 | erot = 0.588498175296126 | epot = -15.4745799244509 | etot = -14.6249037424624 +361000 ekin = 0.264121303803865 | erot = 0.588169931158578 | epot = -15.4771949774352 | etot = -14.6249037424728 +362000 ekin = 0.266656268947586 | erot = 0.586437607933159 | epot = -15.4779976193564 | etot = -14.6249037424757 +363000 ekin = 0.268947338173594 | erot = 0.583131261385069 | epot = -15.4769823420319 | etot = -14.6249037424733 +364000 ekin = 0.271226723299151 | erot = 0.578087502910549 | epot = -15.4742179686787 | etot = -14.624903742469 +365000 ekin = 0.273728224388467 | erot = 0.571157191000871 | epot = -15.4697891578569 | etot = -14.6249037424676 +366000 ekin = 0.276601570519792 | erot = 0.562216266683795 | epot = -15.4637215796778 | etot = -14.6249037424742 +367000 ekin = 0.279824898676098 | erot = 0.551178529879434 | epot = -15.4559071710478 | etot = -14.6249037424923 +368000 ekin = 0.283144751011445 | erot = 0.538009090150866 | epot = -15.4460575836835 | etot = -14.6249037425212 +369000 ekin = 0.286073979195581 | erot = 0.522737270878923 | epot = -15.4337149926306 | etot = -14.6249037425561 +370000 ekin = 0.287962637923446 | erot = 0.505467651700438 | epot = -15.4183340322116 | etot = -14.6249037425877 +371000 ekin = 0.288129562577258 | erot = 0.486387667907668 | epot = -15.3994209730903 | etot = -14.6249037426054 +372000 ekin = 0.286016270828658 | erot = 0.46576999808234 | epot = -15.3766900115119 | etot = -14.6249037426009 +373000 ekin = 0.28131449291777 | erot = 0.44396824694377 | epot = -15.3501864824323 | etot = -14.6249037425708 +374000 ekin = 0.274029637541844 | erot = 0.421405384814399 | epot = -15.3203387648735 | etot = -14.6249037425173 +375000 ekin = 0.264468317324484 | erot = 0.398555847613824 | epot = -15.2879279073849 | etot = -14.6249037424466 +376000 ekin = 0.253165169268526 | erot = 0.375923572597148 | epot = -15.2539924842331 | etot = -14.6249037423675 +377000 ekin = 0.240780733675043 | erot = 0.354018931407531 | epot = -15.2197034073705 | etot = -14.6249037422879 +378000 ekin = 0.228003530693319 | erot = 0.333337224178132 | epot = -15.1862444970855 | etot = -14.624903742214 +379000 ekin = 0.215478669427759 | erot = 0.314340303318484 | epot = -15.1547227148953 | etot = -14.624903742149 +380000 ekin = 0.203769466320592 | erot = 0.297441561968215 | epot = -15.1261147703835 | etot = -14.6249037420947 +381000 ekin = 0.193344913038784 | erot = 0.28299357961111 | epot = -15.1012422347014 | etot = -14.6249037420515 +382000 ekin = 0.184579097116762 | erot = 0.271277560103732 | epot = -15.0807603992407 | etot = -14.6249037420202 +383000 ekin = 0.177749902922565 | erot = 0.262494318474771 | epot = -15.0651479633987 | etot = -14.6249037420014 +384000 ekin = 0.173031383434342 | erot = 0.256757595375907 | epot = -15.0546927208061 | etot = -14.6249037419958 +385000 ekin = 0.170483112154611 | erot = 0.254091341095815 | epot = -15.049478195254 | etot = -14.6249037420036 +386000 ekin = 0.170046361592112 | erot = 0.254432809989126 | epot = -15.0493829136047 | etot = -14.6249037420235 +387000 ekin = 0.171558026226825 | erot = 0.257642587604582 | epot = -15.0541043558832 | etot = -14.6249037420518 +388000 ekin = 0.174787865438713 | erot = 0.263521131369935 | epot = -15.0632127388923 | etot = -14.6249037420836 +389000 ekin = 0.179494526901415 | erot = 0.271829477565432 | epot = -15.0762277465806 | etot = -14.6249037421138 +390000 ekin = 0.185484901052056 | erot = 0.282310127810448 | epot = -15.0926987710007 | etot = -14.6249037421382 +391000 ekin = 0.192654775275645 | erot = 0.294703495235847 | epot = -15.1122620126676 | etot = -14.6249037421561 +392000 ekin = 0.200990711955422 | erot = 0.308756153372483 | epot = -15.1346506074986 | etot = -14.6249037421707 +393000 ekin = 0.210524629688135 | erot = 0.324219483680835 | epot = -15.1596478555569 | etot = -14.624903742188 +394000 ekin = 0.221250398117909 | erot = 0.340840530849171 | epot = -15.1869946711819 | etot = -14.6249037422148 +395000 ekin = 0.233028912153377 | erot = 0.358349828150776 | epot = -15.2162824825608 | etot = -14.6249037422566 +396000 ekin = 0.24551683484774 | erot = 0.376452447323546 | epot = -15.246873024486 | etot = -14.6249037423147 +397000 ekin = 0.258149646288765 | erot = 0.394827815017102 | epot = -15.277881203691 | etot = -14.6249037423851 +398000 ekin = 0.270192540269911 | erot = 0.413141033371924 | epot = -15.3082373161009 | etot = -14.624903742459 +399000 ekin = 0.280849396853359 | erot = 0.431064534842246 | epot = -15.3368176742213 | etot = -14.6249037425257 +400000 ekin = 0.289399657315015 | erot = 0.448305349544995 | epot = -15.3626087494354 | etot = -14.6249037425754 +401000 ekin = 0.295323233787434 | erot = 0.464631356381723 | epot = -15.3848583327708 | etot = -14.6249037426017 +402000 ekin = 0.298377750400983 | erot = 0.479890206670516 | epot = -15.403171699675 | etot = -14.6249037426035 +403000 ekin = 0.298608046776455 | erot = 0.49401684483596 | epot = -15.4175286341975 | etot = -14.6249037425851 +404000 ekin = 0.296288720275777 | erot = 0.507028747324647 | epot = -15.4282212101546 | etot = -14.6249037425541 +405000 ekin = 0.291819450890444 | erot = 0.519011022290083 | epot = -15.4357342157004 | etot = -14.6249037425198 +406000 ekin = 0.285604695316647 | erot = 0.530095491696055 | epot = -15.4406039295028 | etot = -14.6249037424901 +407000 ekin = 0.2779517950128 | erot = 0.540438449781317 | epot = -15.4432939872644 | etot = -14.6249037424703 +408000 ekin = 0.269015012492784 | erot = 0.550201084797022 | epot = -15.4441198397505 | etot = -14.6249037424607 +409000 ekin = 0.258799683407146 | erot = 0.559535019811769 | epot = -15.4432384456767 | etot = -14.6249037424578 +410000 ekin = 0.247223943172528 | erot = 0.568573648692213 | epot = -15.4407013343199 | etot = -14.6249037424552 +411000 ekin = 0.234219542826923 | erot = 0.577428429926601 | epot = -15.4365517151993 | etot = -14.6249037424458 +412000 ekin = 0.219842320368698 | erot = 0.586188386128906 | epot = -15.4309344489214 | etot = -14.6249037424238 +413000 ekin = 0.20435994837526 | erot = 0.594920843620994 | epot = -15.4241845343832 | etot = -14.6249037423869 +414000 ekin = 0.188290368309867 | erot = 0.603671832826878 | epot = -15.4168659434732 | etot = -14.6249037423364 +415000 ekin = 0.17237708181712 | erot = 0.6124653242919 | epot = -15.4097461483873 | etot = -14.6249037422783 +416000 ekin = 0.157503657631228 | erot = 0.621301324615769 | epot = -15.4037087244679 | etot = -14.6249037422209 +417000 ekin = 0.144565276806289 | erot = 0.630153567597092 | epot = -15.399622586577 | etot = -14.6249037421736 +418000 ekin = 0.134326161306418 | erot = 0.638967960411968 | epot = -15.398197863863 | etot = -14.6249037421446 +419000 ekin = 0.127295713867183 | erot = 0.647663024756225 | epot = -15.3998624807619 | etot = -14.6249037421385 +420000 ekin = 0.123652074079106 | erot = 0.656133267678458 | epot = -15.4046890839134 | etot = -14.6249037421558 +421000 ekin = 0.123230332545554 | erot = 0.664256043547071 | epot = -15.4123901182848 | etot = -14.6249037421922 +422000 ekin = 0.125576493084721 | erot = 0.671901405101286 | epot = -15.4223816404263 | etot = -14.6249037422402 +423000 ekin = 0.130051930466301 | erot = 0.678943694027942 | epot = -15.4338993667852 | etot = -14.6249037422909 +424000 ekin = 0.135961143238876 | erot = 0.685273086227244 | epot = -15.4461379718019 | etot = -14.6249037423358 +425000 ekin = 0.142671659965505 | erot = 0.69080498381162 | epot = -15.4583803861461 | etot = -14.624903742369 +426000 ekin = 0.149699767318722 | erot = 0.695485561348404 | epot = -15.4700890710554 | etot = -14.6249037423883 +427000 ekin = 0.156747049208244 | erot = 0.699292628464214 | epot = -15.4809434200673 | etot = -14.6249037423948 +428000 ekin = 0.163686553654253 | erot = 0.702231990285515 | epot = -15.4908222863323 | etot = -14.6249037423925 +429000 ekin = 0.170509683514413 | erot = 0.70433031530151 | epot = -15.4997437412025 | etot = -14.6249037423866 +430000 ekin = 0.177252892951188 | erot = 0.705626025883397 | epot = -15.507782661217 | etot = -14.6249037423824 +431000 ekin = 0.183925691222352 | erot = 0.706159951516081 | epot = -15.5149893851221 | etot = -14.6249037423836 +432000 ekin = 0.190457851079565 | erot = 0.70596688379378 | epot = -15.5213284772654 | etot = -14.6249037423921 +433000 ekin = 0.196676887388984 | erot = 0.705069371776661 | epot = -15.5266500015729 | etot = -14.6249037424073 +434000 ekin = 0.202317433899364 | erot = 0.703474477741261 | epot = -15.5306956540676 | etot = -14.624903742427 +435000 ekin = 0.207056046506538 | erot = 0.701173837003675 | epot = -15.533133625958 | etot = -14.6249037424478 +436000 ekin = 0.210560164856777 | erot = 0.698146912242834 | epot = -15.5336108195658 | etot = -14.6249037424662 +437000 ekin = 0.212539330538657 | erot = 0.69436686481977 | epot = -15.5318099378375 | etot = -14.6249037424791 +438000 ekin = 0.212789433625669 | erot = 0.689808070113577 | epot = -15.5275012462234 | etot = -14.6249037424842 +439000 ekin = 0.211224885327081 | erot = 0.684454087056256 | epot = -15.5205827148631 | etot = -14.6249037424798 +440000 ekin = 0.207897417438738 | erot = 0.678304934040362 | epot = -15.5111060939442 | etot = -14.6249037424651 +441000 ekin = 0.203002684917544 | erot = 0.671382822497087 | epot = -15.4992892498551 | etot = -14.6249037424404 +442000 ekin = 0.196876783893444 | erot = 0.663735946787442 | epot = -15.485516473087 | etot = -14.6249037424062 +443000 ekin = 0.189984458135359 | erot = 0.655440346227863 | epot = -15.4703285467267 | etot = -14.6249037423634 +444000 ekin = 0.182899715135716 | erot = 0.646600090309095 | epot = -15.4544035477587 | etot = -14.6249037423138 +445000 ekin = 0.176278659807256 | erot = 0.637346059016788 | epot = -15.4385284610839 | etot = -14.6249037422598 +446000 ekin = 0.170824489262319 | erot = 0.627833490901675 | epot = -15.4235617223679 | etot = -14.6249037422039 +447000 ekin = 0.167246115781588 | erot = 0.618238375507795 | epot = -15.4103882334389 | etot = -14.6249037421495 +448000 ekin = 0.166214016011178 | erot = 0.608752709244163 | epot = -15.3998704673549 | etot = -14.6249037420996 +449000 ekin = 0.168318002547464 | erot = 0.599578546515158 | epot = -15.3928002911194 | etot = -14.6249037420568 +450000 ekin = 0.174030350885997 | erot = 0.590920601689278 | epot = -15.3898546945991 | etot = -14.6249037420239 +451000 ekin = 0.183674309612449 | erot = 0.582976972210044 | epot = -15.3915550238259 | etot = -14.6249037420034 +452000 ekin = 0.197394458885136 | erot = 0.575927582957288 | epot = -15.3982257838406 | etot = -14.6249037419982 +453000 ekin = 0.21512429096355 | erot = 0.569920414706644 | epot = -15.4099484476817 | etot = -14.6249037420115 +454000 ekin = 0.236549344238021 | erot = 0.565056494271684 | epot = -15.4265095805563 | etot = -14.6249037420466 +455000 ekin = 0.26107066649251 | erot = 0.561375729613514 | epot = -15.4473501382118 | etot = -14.6249037421058 +456000 ekin = 0.287780783018564 | erot = 0.558846520705737 | epot = -15.4715310459135 | etot = -14.6249037421892 +457000 ekin = 0.315469350478398 | erot = 0.557362227355198 | epot = -15.4977353201268 | etot = -14.6249037422932 +458000 ekin = 0.342675461160486 | erot = 0.556746783054669 | epot = -15.5243259866254 | etot = -14.6249037424102 +459000 ekin = 0.367796771323547 | erot = 0.556770049266648 | epot = -15.5494705631187 | etot = -14.6249037425286 +460000 ekin = 0.389252836428699 | erot = 0.557171234684316 | epot = -15.5713278137469 | etot = -14.6249037426338 +461000 ekin = 0.405683830371934 | erot = 0.557686417732654 | epot = -15.588273990816 | etot = -14.6249037427114 +462000 ekin = 0.41615050976317 | erot = 0.558074591843087 | epot = -15.5991288443563 | etot = -14.62490374275 +463000 ekin = 0.420292029664587 | erot = 0.558136338549784 | epot = -15.6033321109585 | etot = -14.6249037427441 +464000 ekin = 0.418399545177946 | erot = 0.557720582602229 | epot = -15.6010238704766 | etot = -14.6249037426964 +465000 ekin = 0.411377435968348 | erot = 0.556717766126943 | epot = -15.592998944713 | etot = -14.6249037426177 +466000 ekin = 0.400588481170385 | erot = 0.555041504869352 | epot = -15.5805337285651 | etot = -14.6249037425254 +467000 ekin = 0.387608315925592 | erot = 0.552604267016079 | epot = -15.5651163253806 | etot = -14.6249037424389 +468000 ekin = 0.373939506071155 | erot = 0.549294716065804 | epot = -15.5481379645132 | etot = -14.6249037423763 +469000 ekin = 0.360748545285724 | erot = 0.544964338610985 | epot = -15.5306166262455 | etot = -14.6249037423488 +470000 ekin = 0.348685397522308 | erot = 0.539428754142175 | epot = -15.5130178940236 | etot = -14.6249037423592 +471000 ekin = 0.337825425309533 | erot = 0.532485282885717 | epot = -15.4952144505958 | etot = -14.6249037424005 +472000 ekin = 0.327743216876142 | erot = 0.523944004294882 | epot = -15.4765909636297 | etot = -14.6249037424587 +473000 ekin = 0.317695625905302 | erot = 0.513665869846428 | epot = -15.4562652382673 | etot = -14.6249037425156 +474000 ekin = 0.306866206293077 | erot = 0.501599410558585 | epot = -15.4333693594052 | etot = -14.6249037425536 +475000 ekin = 0.294611572516325 | erot = 0.487807694339578 | epot = -15.4073230094157 | etot = -14.6249037425598 +476000 ekin = 0.280654133646186 | erot = 0.472479343852861 | epot = -15.3780372200275 | etot = -14.6249037425285 +477000 ekin = 0.265182667318923 | erot = 0.45592098927681 | epot = -15.3460073990573 | etot = -14.6249037424616 +478000 ekin = 0.248846579356572 | erot = 0.438532535944384 | epot = -15.3122828576692 | etot = -14.6249037423683 +479000 ekin = 0.232654569021534 | erot = 0.420770062233477 | epot = -15.2783283735172 | etot = -14.6249037422622 +480000 ekin = 0.217807844647013 | erot = 0.403103245642619 | epot = -15.2458148324477 | etot = -14.6249037421581 +481000 ekin = 0.205508255202962 | erot = 0.385974572359883 | epot = -15.2163865696323 | etot = -14.6249037420695 +482000 ekin = 0.19678156694235 | erot = 0.369766310247464 | epot = -15.1914516191956 | etot = -14.6249037420058 +483000 ekin = 0.192346943568308 | erot = 0.354778814406232 | epot = -15.1720294999467 | etot = -14.6249037419722 +484000 ekin = 0.192548846646656 | erot = 0.341220938396417 | epot = -15.1586735270114 | etot = -14.6249037419683 +485000 ekin = 0.197351634264863 | erot = 0.329210924265139 | epot = -15.1514663005208 | etot = -14.6249037419908 +486000 ekin = 0.20638457111255 | erot = 0.318784712513067 | epot = -15.1500730256597 | etot = -14.6249037420341 +487000 ekin = 0.219018661980825 | erot = 0.30990833731601 | epot = -15.1538307413881 | etot = -14.6249037420913 +488000 ekin = 0.234457053485159 | erot = 0.302491737711703 | epot = -15.1618525333529 | etot = -14.624903742156 +489000 ekin = 0.251825722281652 | erot = 0.296402451840958 | epot = -15.1731319163445 | etot = -14.6249037422219 +490000 ekin = 0.270257579251709 | erot = 0.291478772534598 | epot = -15.1866400940702 | etot = -14.6249037422839 +491000 ekin = 0.288968023939754 | erot = 0.287542686829926 | epot = -15.2014144531061 | etot = -14.6249037423365 +492000 ekin = 0.307321746939228 | erot = 0.284413165332613 | epot = -15.2166386546469 | etot = -14.6249037423751 +493000 ekin = 0.324889192266724 | erot = 0.281920128741297 | epot = -15.2317130634048 | etot = -14.6249037423968 +494000 ekin = 0.34148788338571 | erot = 0.279918789014045 | epot = -15.2463104147988 | etot = -14.6249037423991 +495000 ekin = 0.357200801059907 | erot = 0.27830316795437 | epot = -15.2604077113965 | etot = -14.6249037423822 +496000 ekin = 0.372363075865331 | erot = 0.277016625443997 | epot = -15.2742834436586 | etot = -14.6249037423492 +497000 ekin = 0.387510424728836 | erot = 0.276056483801624 | epot = -15.2884706508366 | etot = -14.6249037423061 +498000 ekin = 0.40328774473455 | erot = 0.275469725413449 | epot = -15.3036612124099 | etot = -14.6249037422619 +499000 ekin = 0.420322923931638 | erot = 0.275337682298311 | epot = -15.3205643484574 | etot = -14.6249037422275 +500000 ekin = 0.439078206868906 | erot = 0.275749832423424 | epot = -15.3397317815068 | etot = -14.6249037422144 +501000 ekin = 0.459699055392479 | erot = 0.27677002458918 | epot = -15.3613728222145 | etot = -14.6249037422328 +502000 ekin = 0.481887975237045 | erot = 0.278401857022953 | epot = -15.3851935745487 | etot = -14.6249037422887 +503000 ekin = 0.504836001699661 | erot = 0.280562273427077 | epot = -15.4103020175081 | etot = -14.6249037423814 +504000 ekin = 0.527242963720809 | erot = 0.283072520273854 | epot = -15.4352192264968 | etot = -14.6249037425021 +505000 ekin = 0.547444055754969 | erot = 0.285672032586941 | epot = -15.4580198309761 | etot = -14.6249037426342 +506000 ekin = 0.563636138783675 | erot = 0.288055811210013 | epot = -15.4765956927492 | etot = -14.6249037427555 +507000 ekin = 0.574166796919079 | erot = 0.289928574131231 | epot = -15.488999113894 | etot = -14.6249037428437 +508000 ekin = 0.57782515130048 | erot = 0.291063326861402 | epot = -15.4937922210432 | etot = -14.6249037428813 +509000 ekin = 0.574066827021413 | erot = 0.291350176078827 | epot = -15.4903207459603 | etot = -14.6249037428601 +510000 ekin = 0.563118031117931 | erot = 0.290823209378486 | epot = -15.4788449832791 | etot = -14.6249037427827 +511000 ekin = 0.545937816053972 | erot = 0.289659846600232 | epot = -15.4605014053163 | etot = -14.6249037426621 +512000 ekin = 0.52405192466186 | erot = 0.2881539193295 | epot = -15.4371095865088 | etot = -14.6249037425175 +513000 ekin = 0.499300074198536 | erot = 0.28667044386956 | epot = -15.4108742604381 | etot = -14.62490374237 +514000 ekin = 0.473556830411034 | erot = 0.285593013544196 | epot = -15.3840535861943 | etot = -14.6249037422391 +515000 ekin = 0.448481344235602 | erot = 0.285274677057636 | epot = -15.3586597634315 | etot = -14.6249037421383 +516000 ekin = 0.425336124988924 | erot = 0.286000471485298 | epot = -15.3362403385491 | etot = -14.6249037420749 +517000 ekin = 0.404895133581714 | erot = 0.287965811661741 | epot = -15.3177646872924 | etot = -14.624903742049 +518000 ekin = 0.387441371960463 | erot = 0.29127124708814 | epot = -15.3036163611039 | etot = -14.6249037420553 +519000 ekin = 0.372839035853544 | erot = 0.295931281214217 | epot = -15.2936740591526 | etot = -14.6249037420848 +520000 ekin = 0.360656186943702 | erot = 0.301893194868378 | epot = -15.2874531239385 | etot = -14.6249037421264 +521000 ekin = 0.350310207444023 | erot = 0.30906098360492 | epot = -15.2842749332187 | etot = -14.6249037421697 +522000 ekin = 0.341208800540165 | erot = 0.317319408449295 | epot = -15.2834319511959 | etot = -14.6249037422064 +523000 ekin = 0.332862997937259 | erot = 0.326553653087547 | epot = -15.2843203932564 | etot = -14.6249037422316 +524000 ekin = 0.324955020060425 | erot = 0.336661144000779 | epot = -15.2865199063054 | etot = -14.6249037422442 +525000 ekin = 0.317352570821777 | erot = 0.347553686772866 | epot = -15.2898099998417 | etot = -14.6249037422471 +526000 ekin = 0.310071537936686 | erot = 0.359150063852697 | epot = -15.2941253440357 | etot = -14.6249037422464 +527000 ekin = 0.30319969763028 | erot = 0.371361343284829 | epot = -15.2994647831646 | etot = -14.6249037422495 +528000 ekin = 0.296802852838071 | erot = 0.384072970478812 | epot = -15.3057795655796 | etot = -14.6249037422627 +529000 ekin = 0.290839689447108 | erot = 0.397128838352017 | epot = -15.3128722700896 | etot = -14.6249037422905 +530000 ekin = 0.285110822260319 | erot = 0.410322608856454 | epot = -15.320337173449 | etot = -14.6249037423323 +531000 ekin = 0.279260366287054 | erot = 0.423400398731268 | epot = -15.3275645074017 | etot = -14.6249037423834 +532000 ekin = 0.272835705905111 | erot = 0.4360765883685 | epot = -15.3338160367088 | etot = -14.6249037424352 +533000 ekin = 0.265395406955148 | erot = 0.448061330488109 | epot = -15.3383604799197 | etot = -14.6249037424764 +534000 ekin = 0.256640351799918 | erot = 0.459095045026538 | epot = -15.3406391393234 | etot = -14.6249037424969 +535000 ekin = 0.246533633694114 | erot = 0.46898274217995 | epot = -15.3404201183641 | etot = -14.62490374249 +536000 ekin = 0.235373881374739 | erot = 0.477620282695672 | epot = -15.3378979065248 | etot = -14.6249037424544 +537000 ekin = 0.223795203401919 | erot = 0.485006039595133 | epot = -15.3337049853922 | etot = -14.6249037423951 +538000 ekin = 0.212682661997928 | erot = 0.491234540507361 | epot = -15.3288209448297 | etot = -14.6249037423244 +539000 ekin = 0.203011536568405 | erot = 0.496472671627705 | epot = -15.3243879504539 | etot = -14.6249037422578 +540000 ekin = 0.195638496926135 | erot = 0.50092291227584 | epot = -15.3214651514142 | etot = -14.6249037422123 +541000 ekin = 0.191090437374276 | erot = 0.504781043299091 | epot = -15.3207752228744 | etot = -14.624903742201 +542000 ekin = 0.189407567632742 | erot = 0.508197267609352 | epot = -15.3225085774713 | etot = -14.6249037422292 +543000 ekin = 0.190094034781292 | erot = 0.511249275630852 | epot = -15.326247052704 | etot = -14.6249037422918 +544000 ekin = 0.192205662500225 | erot = 0.513933300995961 | epot = -15.3310427058708 | etot = -14.6249037423746 +545000 ekin = 0.194562943958487 | erot = 0.516174993404676 | epot = -15.3356416798199 | etot = -14.6249037424567 +546000 ekin = 0.196033343259802 | erot = 0.517857026727554 | epot = -15.3387941125054 | etot = -14.624903742518 +547000 ekin = 0.19580143908636 | erot = 0.518856237019682 | epot = -15.3395614186506 | etot = -14.6249037425445 +548000 ekin = 0.193552178457268 | erot = 0.519081068513129 | epot = -15.3375369895014 | etot = -14.624903742531 +549000 ekin = 0.189527872077315 | erot = 0.518500763845738 | epot = -15.332932378404 | etot = -14.6249037424809 +550000 ekin = 0.184464697192282 | erot = 0.517160608017039 | epot = -15.3265290476137 | etot = -14.6249037424044 +551000 ekin = 0.179447519613205 | erot = 0.515181377054168 | epot = -15.3195326389812 | etot = -14.6249037423139 +552000 ekin = 0.175731062294521 | erot = 0.512744588095886 | epot = -15.3133793926124 | etot = -14.624903742222 +553000 ekin = 0.174564310045835 | erot = 0.510067400325703 | epot = -15.3095354525117 | etot = -14.6249037421402 +554000 ekin = 0.177036897100683 | erot = 0.507372062614515 | epot = -15.309312701793 | etot = -14.6249037420778 +555000 ekin = 0.183953653121175 | erot = 0.504855061241007 | epot = -15.3137124564046 | etot = -14.6249037420424 +556000 ekin = 0.195740677803854 | erot = 0.502660902829331 | epot = -15.3233053226717 | etot = -14.6249037420385 +557000 ekin = 0.212389174813147 | erot = 0.500864749566708 | epot = -15.338157666447 | etot = -14.6249037420672 +558000 ekin = 0.23344502097276 | erot = 0.499466731744655 | epot = -15.357815494843 | etot = -14.6249037421256 +559000 ekin = 0.258048678277938 | erot = 0.498398734230019 | epot = -15.3813511547153 | etot = -14.6249037422074 +560000 ekin = 0.285022157939512 | erot = 0.49754195086514 | epot = -15.4074678511078 | etot = -14.6249037423032 +561000 ekin = 0.312990622171654 | erot = 0.496751658909336 | epot = -15.4346460234837 | etot = -14.6249037424027 +562000 ekin = 0.340519848729776 | erot = 0.495884310853372 | epot = -15.4613079020793 | etot = -14.6249037424961 +563000 ekin = 0.366249237356 | erot = 0.494821962716246 | epot = -15.4859749426474 | etot = -14.6249037425751 +564000 ekin = 0.389003340228442 | erot = 0.493490109026911 | epot = -15.5073971918898 | etot = -14.6249037426344 +565000 ekin = 0.407871381975258 | erot = 0.491866632343677 | epot = -15.5246417569902 | etot = -14.6249037426713 +566000 ekin = 0.422251605412405 | erot = 0.489981232304148 | epot = -15.537136580402 | etot = -14.6249037426854 +567000 ekin = 0.431863045464181 | erot = 0.48790647095657 | epot = -15.5446732590993 | etot = -14.6249037426785 +568000 ekin = 0.436733840917554 | erot = 0.485743252286935 | epot = -15.5473808358579 | etot = -14.6249037426534 +569000 ekin = 0.437172173178126 | erot = 0.483603786385869 | epot = -15.5456797021773 | etot = -14.6249037426133 +570000 ekin = 0.433727138645419 | erot = 0.481595978794116 | epot = -15.5402268600013 | etot = -14.6249037425617 +571000 ekin = 0.427141808143026 | erot = 0.479812578148763 | epot = -15.5318581287941 | etot = -14.6249037425023 +572000 ekin = 0.418294466660563 | erot = 0.478326721684033 | epot = -15.5215249307844 | etot = -14.6249037424398 +573000 ekin = 0.408121101334992 | erot = 0.477193277920611 | epot = -15.5102181216358 | etot = -14.6249037423802 +574000 ekin = 0.397514818217457 | erot = 0.476453234967311 | epot = -15.4988717955158 | etot = -14.6249037423311 +575000 ekin = 0.387207144489171 | erot = 0.476137354470425 | epot = -15.4882482412599 | etot = -14.6249037423003 +576000 ekin = 0.377649119217314 | erot = 0.476266044933562 | epot = -15.4788189064453 | etot = -14.6249037422944 +577000 ekin = 0.368920817132226 | erot = 0.476844730976786 | epot = -15.4706692904254 | etot = -14.6249037423164 +578000 ekin = 0.360700785230741 | erot = 0.477856883134822 | epot = -15.4634614107288 | etot = -14.6249037423632 +579000 ekin = 0.352319179858308 | erot = 0.479258927577157 | epot = -15.4564818498611 | etot = -14.6249037424256 +580000 ekin = 0.342901425190187 | erot = 0.480981430412776 | epot = -15.4487865980922 | etot = -14.6249037424893 +581000 ekin = 0.331586894252575 | erot = 0.482939076923953 | epot = -15.4394297137127 | etot = -14.6249037425362 +582000 ekin = 0.317784488003998 | erot = 0.485048781539638 | epot = -15.4277370120932 | etot = -14.6249037425495 +583000 ekin = 0.301409490236239 | erot = 0.487252029394849 | epot = -15.4135652621486 | etot = -14.6249037425175 +584000 ekin = 0.283039202393957 | erot = 0.489535511256142 | epot = -15.3974784560878 | etot = -14.6249037424377 +585000 ekin = 0.263933313487419 | erot = 0.491944128120081 | epot = -15.380781183926 | etot = -14.6249037423185 +586000 ekin = 0.245890887800433 | erot = 0.494582820571413 | epot = -15.3653774505512 | etot = -14.6249037421793 +587000 ekin = 0.230956405620081 | erot = 0.497607010278675 | epot = -15.3534671579451 | etot = -14.6249037420464 +588000 ekin = 0.221033841917523 | erot = 0.501205839010948 | epot = -15.3471434228734 | etot = -14.624903741945 +589000 ekin = 0.21750442850326 | erot = 0.505584588308524 | epot = -15.3479927587061 | etot = -14.6249037418943 +590000 ekin = 0.220953423088753 | erot = 0.510952138426249 | epot = -15.3568093034155 | etot = -14.6249037419005 +591000 ekin = 0.231083134064746 | erot = 0.517515644130575 | epot = -15.3735025201508 | etot = -14.6249037419554 +592000 ekin = 0.246829245753635 | erot = 0.525479282587494 | epot = -15.3972122703833 | etot = -14.6249037420422 +593000 ekin = 0.26662894973047 | erot = 0.535039778666637 | epot = -15.4265724705377 | etot = -14.6249037421406 +594000 ekin = 0.288743434935807 | erot = 0.546371032865614 | epot = -15.4600182100362 | etot = -14.6249037422348 +595000 ekin = 0.311533695301779 | erot = 0.559594229359546 | epot = -15.4960316669788 | etot = -14.6249037423175 +596000 ekin = 0.3336243482615 | erot = 0.574736425374656 | epot = -15.5332645160253 | etot = -14.6249037423892 +597000 ekin = 0.353943370598348 | erot = 0.591686591895555 | epot = -15.57053370495 | etot = -14.6249037424561 +598000 ekin = 0.371670846224556 | erot = 0.610160828224063 | epot = -15.6067354169738 | etot = -14.6249037425252 +599000 ekin = 0.386151688530433 | erot = 0.629687420924883 | epot = -15.6407428520557 | etot = -14.6249037426004 +600000 ekin = 0.396824670884606 | erot = 0.649618644309941 | epot = -15.6713470578748 | etot = -14.6249037426803 +601000 ekin = 0.403202067553919 | erot = 0.669171693345246 | epot = -15.6972775036573 | etot = -14.6249037427582 +602000 ekin = 0.40490852829975 | erot = 0.687495721385519 | epot = -15.7173079925082 | etot = -14.6249037428229 +603000 ekin = 0.401765041348506 | erot = 0.703757265562631 | epot = -15.7304260497733 | etot = -14.6249037428622 +604000 ekin = 0.393886240081525 | erot = 0.717231476889702 | epot = -15.7360214598372 | etot = -14.624903742866 +605000 ekin = 0.38175038495462 | erot = 0.727382711583425 | epot = -15.7340368393683 | etot = -14.6249037428302 +606000 ekin = 0.366205114566941 | erot = 0.733917584160155 | epot = -15.725026441486 | etot = -14.6249037427589 +607000 ekin = 0.348389460814908 | erot = 0.736798185090599 | epot = -15.7100913885695 | etot = -14.624903742664 +608000 ekin = 0.329579787369096 | erot = 0.736212623478789 | epot = -15.6906961534101 | etot = -14.6249037425622 +609000 ekin = 0.310994196071395 | erot = 0.73251127479451 | epot = -15.6684092133368 | etot = -14.6249037424709 +610000 ekin = 0.293604835884145 | erot = 0.726125549058765 | epot = -15.6446341273466 | etot = -14.6249037424037 +611000 ekin = 0.278004208601941 | erot = 0.717488389875027 | epot = -15.620396340845 | etot = -14.624903742368 +612000 ekin = 0.264353214552908 | erot = 0.706972008379807 | epot = -15.5962289652964 | etot = -14.6249037423637 +613000 ekin = 0.252415280668165 | erot = 0.694851301360494 | epot = -15.5721703244133 | etot = -14.6249037423847 +614000 ekin = 0.241662201716805 | erot = 0.681294462599433 | epot = -15.5478604067365 | etot = -14.6249037424203 +615000 ekin = 0.231427318529322 | erot = 0.666377599992121 | epot = -15.5227086609789 | etot = -14.6249037424574 +616000 ekin = 0.221078258759027 | erot = 0.650117838829056 | epot = -15.4960998400712 | etot = -14.6249037424831 +617000 ekin = 0.210180390467373 | erot = 0.632518274251274 | epot = -15.4676024072048 | etot = -14.6249037424862 +618000 ekin = 0.19862150965634 | erot = 0.61361713210071 | epot = -15.437142384217 | etot = -14.6249037424599 +619000 ekin = 0.186670442213662 | erot = 0.593532504056955 | epot = -15.4051066886746 | etot = -14.6249037424039 +620000 ekin = 0.174951539061879 | erot = 0.572493952083693 | epot = -15.3723492334697 | etot = -14.6249037423241 +621000 ekin = 0.164335257152339 | erot = 0.550854196820419 | epot = -15.3400931962051 | etot = -14.6249037422323 +622000 ekin = 0.15576803968181 | erot = 0.529078173717942 | epot = -15.3097499555427 | etot = -14.6249037421429 +623000 ekin = 0.150083571178598 | erot = 0.507711807337566 | epot = -15.2826991205848 | etot = -14.6249037420687 +624000 ekin = 0.147843467415458 | erot = 0.487337070698791 | epot = -15.2600842801331 | etot = -14.6249037420188 +625000 ekin = 0.149245521580975 | erot = 0.468521842126362 | epot = -15.242671105704 | etot = -14.6249037419967 +626000 ekin = 0.154116108891131 | erot = 0.451772481731462 | epot = -15.2307923326229 | etot = -14.6249037420003 +627000 ekin = 0.161979086426179 | erot = 0.437494698740194 | epot = -15.2243775271902 | etot = -14.6249037420239 +628000 ekin = 0.172174902879175 | erot = 0.425965324893585 | epot = -15.2230439698325 | etot = -14.6249037420598 +629000 ekin = 0.183995029152314 | erot = 0.417314987668265 | epot = -15.2262137589216 | etot = -14.624903742101 +630000 ekin = 0.196798066694665 | erot = 0.411519917956496 | epot = -15.2332217267944 | etot = -14.6249037421432 +631000 ekin = 0.210082131921541 | erot = 0.408400457423892 | epot = -15.2433863315305 | etot = -14.6249037421851 +632000 ekin = 0.223500184825895 | erot = 0.407624312389087 | epot = -15.2560282394437 | etot = -14.6249037422287 +633000 ekin = 0.236818662196578 | erot = 0.408714108140466 | epot = -15.2704365126158 | etot = -14.6249037422787 +634000 ekin = 0.249833574952738 | erot = 0.411060882466515 | epot = -15.2857981997594 | etot = -14.6249037423402 +635000 ekin = 0.262270239999152 | erot = 0.413946987959646 | epot = -15.3011209703752 | etot = -14.6249037424164 +636000 ekin = 0.273700147361468 | erot = 0.416582412016232 | epot = -15.315186301884 | etot = -14.6249037425063 +637000 ekin = 0.283507856899438 | erot = 0.418156955201586 | epot = -15.3265685547044 | etot = -14.6249037426034 +638000 ekin = 0.290930324554196 | erot = 0.417906927432445 | epot = -15.3337409946819 | etot = -14.6249037426952 +639000 ekin = 0.295171730169193 | erot = 0.415189912094696 | epot = -15.3352653850304 | etot = -14.6249037427665 +640000 ekin = 0.29557345321463 | erot = 0.409556450349033 | epot = -15.3300336463655 | etot = -14.6249037428018 +641000 ekin = 0.291798784614145 | erot = 0.400805216305268 | epot = -15.3175077437091 | etot = -14.6249037427896 +642000 ekin = 0.283982821763269 | erot = 0.389009767281603 | epot = -15.2978963317707 | etot = -14.6249037427259 +643000 ekin = 0.272803834295158 | erot = 0.374510198234827 | epot = -15.2722177751453 | etot = -14.6249037426153 +644000 ekin = 0.259451287281963 | erot = 0.35787030323495 | epot = -15.242225332988 | etot = -14.6249037424711 +645000 ekin = 0.24549053850944 | erot = 0.339807577757951 | epot = -15.2102018585798 | etot = -14.6249037423124 +646000 ekin = 0.232646751227162 | erot = 0.321107525182429 | epot = -15.1786580185707 | etot = -14.6249037421611 +647000 ekin = 0.222545810224123 | erot = 0.302534738054695 | epot = -15.1499842903174 | etot = -14.6249037420386 +648000 ekin = 0.216457466201495 | erot = 0.28475201940792 | epot = -15.1261132275715 | etot = -14.624903741962 +649000 ekin = 0.215087078764636 | erot = 0.268256849270223 | epot = -15.1082476699766 | etot = -14.6249037419418 +650000 ekin = 0.218457489209105 | erot = 0.253342374384717 | epot = -15.0967036055721 | etot = -14.6249037419783 +651000 ekin = 0.225910420497396 | erot = 0.240087663214758 | epot = -15.0909018257745 | etot = -14.6249037420624 +652000 ekin = 0.236236377394498 | erot = 0.228379019530553 | epot = -15.0895191391008 | etot = -14.6249037421757 +653000 ekin = 0.247915496411967 | erot = 0.217959688821804 | epot = -15.0907789275281 | etot = -14.6249037422943 +654000 ekin = 0.259425494352017 | erot = 0.20850030571605 | epot = -15.0928295424613 | etot = -14.6249037423932 +655000 ekin = 0.269554558208103 | erot = 0.199677958220037 | epot = -15.0941362588799 | etot = -14.6249037424518 +656000 ekin = 0.277652649608963 | erot = 0.191249336850249 | epot = -15.0938057289172 | etot = -14.624903742458 +657000 ekin = 0.283765747905228 | erot = 0.183104207684344 | epot = -15.0917736980005 | etot = -14.6249037424109 +658000 ekin = 0.288620908153343 | erot = 0.175289536735983 | epot = -15.088814187211 | etot = -14.6249037423216 +659000 ekin = 0.293459924910629 | erot = 0.16800102740562 | epot = -15.0863646945268 | etot = -14.6249037422106 +660000 ekin = 0.299750121924184 | erot = 0.161545913295631 | epot = -15.0861997773238 | etot = -14.624903742104 +661000 ekin = 0.30882794580141 | erot = 0.156286808494636 | epot = -15.0900184963241 | etot = -14.624903742028 +662000 ekin = 0.321550844182293 | erot = 0.152579955314811 | epot = -15.0990345415002 | etot = -14.6249037420031 +663000 ekin = 0.338040404323162 | erot = 0.150721656676881 | epot = -15.1136658030376 | etot = -14.6249037420375 +664000 ekin = 0.35758869637966 | erot = 0.150913925254683 | epot = -15.1334063637598 | etot = -14.6249037421255 +665000 ekin = 0.378766116436051 | erot = 0.153254852725981 | epot = -15.1569247114091 | etot = -14.6249037422471 +666000 ekin = 0.399716130930405 | erot = 0.157752003177184 | epot = -15.1823718764818 | etot = -14.6249037423742 +667000 ekin = 0.418564373573293 | erot = 0.16435019288794 | epot = -15.2078183089394 | etot = -14.6249037424782 +668000 ekin = 0.433827740573583 | erot = 0.172960630437096 | epot = -15.2316921135496 | etot = -14.6249037425389 +669000 ekin = 0.444701001629416 | erot = 0.183478145303361 | epot = -15.2530828894841 | etot = -14.6249037425513 +670000 ekin = 0.451136418415458 | erot = 0.195778468142474 | epot = -15.2718186290843 | etot = -14.6249037425264 +671000 ekin = 0.453701004148267 | erot = 0.209695862329476 | epot = -15.2883006089635 | etot = -14.6249037424858 +672000 ekin = 0.453273827000247 | erot = 0.224990306459319 | epot = -15.3031678759134 | etot = -14.6249037424539 +673000 ekin = 0.450699702660583 | erot = 0.241319095059427 | epot = -15.3169225401685 | etot = -14.6249037424485 +674000 ekin = 0.446523488449384 | erot = 0.258227823779524 | epot = -15.3296550547041 | etot = -14.6249037424752 +675000 ekin = 0.440889624591433 | erot = 0.275170305160563 | epot = -15.3409636722771 | etot = -14.6249037425251 +676000 ekin = 0.43362448115233 | erot = 0.29155830650734 | epot = -15.3500865302388 | etot = -14.6249037425792 +677000 ekin = 0.424453634855728 | erot = 0.306833290384575 | epot = -15.356190667856 | etot = -14.6249037426157 +678000 ekin = 0.413265176464919 | erot = 0.320546114280114 | epot = -15.3587150333616 | etot = -14.6249037426165 +679000 ekin = 0.400321537246337 | erot = 0.33242808876456 | epot = -15.3576533685843 | etot = -14.6249037425734 +680000 ekin = 0.386341988792883 | erot = 0.342437977069693 | epot = -15.3536837083532 | etot = -14.6249037424906 +681000 ekin = 0.372417408218802 | erot = 0.350774050475061 | epot = -15.3480952010793 | etot = -14.6249037423855 +682000 ekin = 0.359769645089127 | erot = 0.357847594355724 | epot = -15.3425209817278 | etot = -14.624903742283 +683000 ekin = 0.349419724484513 | erot = 0.364223142874507 | epot = -15.3385466095678 | etot = -14.6249037422088 +684000 ekin = 0.341867426589617 | erot = 0.370539083006542 | epot = -15.3373102517771 | etot = -14.6249037421809 +685000 ekin = 0.336892967753541 | erot = 0.377427285880855 | epot = -15.3392239958376 | etot = -14.6249037422032 +686000 ekin = 0.333560575457532 | erot = 0.385449795149527 | epot = -15.3439141128706 | etot = -14.6249037422635 +687000 ekin = 0.330440845245698 | erot = 0.395064019975185 | epot = -15.3504086075581 | etot = -14.6249037423373 +688000 ekin = 0.325996654363842 | erot = 0.406617593545993 | epot = -15.3575179903049 | etot = -14.6249037423951 +689000 ekin = 0.31902375237829 | erot = 0.420363991129875 | epot = -15.3642914859202 | etot = -14.6249037424121 +690000 ekin = 0.309020969989285 | erot = 0.436483939358184 | epot = -15.3704086517225 | etot = -14.624903742375 +691000 ekin = 0.296388973949697 | erot = 0.455097572739975 | epot = -15.3763902889758 | etot = -14.6249037422861 +692000 ekin = 0.282408410636572 | erot = 0.476257707732277 | epot = -15.383569860531 | etot = -14.6249037421622 +693000 ekin = 0.26900853085206 | erot = 0.499923033173746 | epot = -15.3938353060564 | etot = -14.6249037420305 +694000 ekin = 0.258387685788816 | erot = 0.525918285140374 | epot = -15.4092097128507 | etot = -14.6249037419215 +695000 ekin = 0.252576275208241 | erot = 0.553894058809539 | epot = -15.4313740758797 | etot = -14.624903741862 +696000 ekin = 0.253038186234903 | erot = 0.583300660396082 | epot = -15.4612425885006 | etot = -14.6249037418696 +697000 ekin = 0.260392018277369 | erot = 0.613388418368354 | epot = -15.4986841785946 | etot = -14.6249037419489 +698000 ekin = 0.274304391463235 | erot = 0.643241879182175 | epot = -15.5424500127355 | etot = -14.6249037420901 +699000 ekin = 0.293570250406476 | erot = 0.671848180608583 | epot = -15.5903221732866 | etot = -14.6249037422715 +700000 ekin = 0.316355070233252 | erot = 0.698191700482076 | epot = -15.6394505131798 | etot = -14.6249037424645 +701000 ekin = 0.340538337282147 | erot = 0.721359481465404 | epot = -15.6868015613873 | etot = -14.6249037426397 +702000 ekin = 0.364075443764542 | erot = 0.740637254693957 | epot = -15.7296164412326 | etot = -14.6249037427741 +703000 ekin = 0.385294321874673 | erot = 0.755576369453691 | epot = -15.7657744341838 | etot = -14.6249037428555 +704000 ekin = 0.403066716719495 | erot = 0.766018576886853 | epot = -15.7939890364902 | etot = -14.6249037428839 +705000 ekin = 0.416833588997526 | erot = 0.772075474099313 | epot = -15.8138128059661 | etot = -14.6249037428693 +706000 ekin = 0.426510451502379 | erot = 0.774072055031553 | epot = -15.8254862493606 | etot = -14.6249037428266 +707000 ekin = 0.432328070474044 | erot = 0.772470813769757 | epot = -15.8297026270148 | etot = -14.624903742771 +708000 ekin = 0.434671210546527 | erot = 0.76779427950511 | epot = -15.827369232765 | etot = -14.6249037427133 +709000 ekin = 0.433963855684076 | erot = 0.760560754832016 | epot = -15.8194283531749 | etot = -14.6249037426588 +710000 ekin = 0.430621214402443 | erot = 0.751241421805289 | epot = -15.8067663788153 | etot = -14.6249037426076 +711000 ekin = 0.425061028816158 | erot = 0.740240555545361 | epot = -15.7902053269182 | etot = -14.6249037425567 +712000 ekin = 0.417748693286293 | erot = 0.727895913280463 | epot = -15.7705483490692 | etot = -14.6249037425024 +713000 ekin = 0.409245407745191 | erot = 0.714493617369743 | epot = -15.748642767557 | etot = -14.624903742442 +714000 ekin = 0.400233112896686 | erot = 0.700290376393996 | epot = -15.725427231666 | etot = -14.6249037423753 +715000 ekin = 0.391499218629782 | erot = 0.685535269234813 | epot = -15.7019382301699 | etot = -14.6249037423053 +716000 ekin = 0.38387465328674 | erot = 0.670483824808895 | epot = -15.6792622203343 | etot = -14.6249037422387 +717000 ekin = 0.37812966517224 | erot = 0.655399296057453 | epot = -15.6584327034141 | etot = -14.6249037421844 +718000 ekin = 0.374843116813924 | erot = 0.640539821857324 | epot = -15.6402866808232 | etot = -14.6249037421519 +719000 ekin = 0.374271424141617 | erot = 0.626134666228947 | epot = -15.6253098325198 | etot = -14.6249037421492 +720000 ekin = 0.376249546442333 | erot = 0.612356169201708 | epot = -15.6135094578241 | etot = -14.62490374218 +721000 ekin = 0.38015578315651 | erot = 0.599295758360665 | epot = -15.6043552837594 | etot = -14.6249037422422 +722000 ekin = 0.384962761439327 | erot = 0.586951574250039 | epot = -15.5968180780159 | etot = -14.6249037423266 +723000 ekin = 0.38937982338218 | erot = 0.575232003297926 | epot = -15.5895155690983 | etot = -14.6249037424182 +724000 ekin = 0.392071125784558 | erot = 0.563975606697306 | epot = -15.5809504749809 | etot = -14.6249037424991 +725000 ekin = 0.391913283459399 | erot = 0.552983740178749 | epot = -15.5698007661892 | etot = -14.6249037425511 +726000 ekin = 0.388241956533271 | erot = 0.542058916015903 | epot = -15.5552046151099 | etot = -14.6249037425608 +727000 ekin = 0.381032991792366 | erot = 0.531040454531963 | epot = -15.5369771888461 | etot = -14.6249037425218 +728000 ekin = 0.370971903191828 | erot = 0.519829082375402 | epot = -15.515704728005 | etot = -14.6249037424378 +729000 ekin = 0.359388263612358 | erot = 0.50839572980859 | epot = -15.4926877357432 | etot = -14.6249037423222 +730000 ekin = 0.348057580439132 | erot = 0.496773021024845 | epot = -15.4697343436589 | etot = -14.6249037421949 +731000 ekin = 0.338902689198661 | erot = 0.485032671408036 | epot = -15.4488391026864 | etot = -14.6249037420797 +732000 ekin = 0.333649662944534 | erot = 0.473255762297357 | epot = -15.4318091672407 | etot = -14.6249037419988 +733000 ekin = 0.333505576675517 | erot = 0.461504910073763 | epot = -15.4199142287177 | etot = -14.6249037419685 +734000 ekin = 0.338924758983124 | erot = 0.44980725448349 | epot = -15.4136357554609 | etot = -14.6249037419943 +735000 ekin = 0.34951546857607 | erot = 0.438154711902834 | epot = -15.41257392255 | etot = -14.6249037420711 +736000 ekin = 0.364111355273647 | erot = 0.426523255164468 | epot = -15.4155383526203 | etot = -14.6249037421822 +737000 ekin = 0.38099571977356 | erot = 0.414906900972945 | epot = -15.4208063630506 | etot = -14.6249037423041 +738000 ekin = 0.398229414670415 | erot = 0.403356227833102 | epot = -15.4264893849155 | etot = -14.624903742412 +739000 ekin = 0.414005860072354 | erot = 0.392007798568672 | epot = -15.4309174011272 | etot = -14.6249037424862 +740000 ekin = 0.426948743961824 | erot = 0.381091720704565 | epot = -15.4329442071836 | etot = -14.6249037425172 +741000 ekin = 0.43628364768211 | erot = 0.370910229391996 | epot = -15.4320976195812 | etot = -14.6249037425071 +742000 ekin = 0.44185000182603 | erot = 0.361789064611378 | epot = -15.4285428089066 | etot = -14.6249037424692 +743000 ekin = 0.443963491146499 | erot = 0.354012421291944 | epot = -15.4228796548611 | etot = -14.6249037424227 +744000 ekin = 0.4431781085151 | erot = 0.347758127978473 | epot = -15.4158399788814 | etot = -14.6249037423879 +745000 ekin = 0.440021184884499 | erot = 0.343050543545547 | epot = -15.4079754708096 | etot = -14.6249037423796 +746000 ekin = 0.434779146250304 | erot = 0.339744491074578 | epot = -15.3994273797281 | etot = -14.6249037424032 +747000 ekin = 0.427396883604757 | erot = 0.337545938414333 | epot = -15.3898465644716 | etot = -14.6249037424525 +748000 ekin = 0.417523045840628 | erot = 0.336066252171896 | epot = -15.3784930405232 | etot = -14.6249037425107 +749000 ekin = 0.404692764111473 | erot = 0.334898725161965 | epot = -15.3644952318288 | etot = -14.6249037425554 +750000 ekin = 0.388596287616679 | erot = 0.333700338300972 | epot = -15.3472003684819 | etot = -14.6249037425642 +751000 ekin = 0.369348367994066 | erot = 0.332259621152988 | epot = -15.3265117316703 | etot = -14.6249037425233 +752000 ekin = 0.347662572336739 | erot = 0.330533807750213 | epot = -15.3031001225191 | etot = -14.6249037424322 +753000 ekin = 0.324856373470614 | erot = 0.328645172902147 | epot = -15.2784052886784 | etot = -14.6249037423056 +754000 ekin = 0.302664104351481 | erot = 0.326836116136386 | epot = -15.2544039626582 | etot = -14.6249037421703 +755000 ekin = 0.28289840530598 | erot = 0.325392677389915 | epot = -15.2331948247539 | etot = -14.624903742058 +756000 ekin = 0.267052130149329 | erot = 0.324553861439878 | epot = -15.2165097335856 | etot = -14.6249037419964 +757000 ekin = 0.255952872034472 | erot = 0.324427480977821 | epot = -15.2052840950144 | etot = -14.6249037420021 +758000 ekin = 0.24956686325796 | erot = 0.324931841856735 | epot = -15.1994024471903 | etot = -14.6249037420756 +759000 ekin = 0.247007285742123 | erot = 0.325777353497946 | epot = -15.1976883814417 | etot = -14.6249037422016 +760000 ekin = 0.246749335490671 | erot = 0.326494279609754 | epot = -15.1981473574522 | etot = -14.6249037423518 +761000 ekin = 0.247004464362874 | erot = 0.326503456901681 | epot = -15.1984116637553 | etot = -14.6249037424907 +762000 ekin = 0.246168267683208 | erot = 0.325217160868209 | epot = -15.1962891711361 | etot = -14.6249037425847 +763000 ekin = 0.243236270174742 | erot = 0.322149322885115 | epot = -15.1902893356692 | etot = -14.6249037426093 +764000 ekin = 0.238083572628182 | erot = 0.31701054114686 | epot = -15.1799978563319 | etot = -14.6249037425569 +765000 ekin = 0.231530329806237 | erot = 0.309765883621403 | epot = -15.166199955866 | etot = -14.6249037424384 +766000 ekin = 0.225163449189886 | erot = 0.300642577938324 | epot = -15.1507097694095 | etot = -14.6249037422813 +767000 ekin = 0.220947037641663 | erot = 0.29008793628379 | epot = -15.1359387160491 | etot = -14.6249037421236 +768000 ekin = 0.220714417705789 | erot = 0.278690999515915 | epot = -15.1243091592251 | etot = -14.6249037420034 +769000 ekin = 0.225674230585351 | erot = 0.267090069999984 | epot = -15.1176680425334 | etot = -14.6249037419481 +770000 ekin = 0.23606686040605 | erot = 0.255889903618604 | epot = -15.1168605059919 | etot = -14.6249037419673 +771000 ekin = 0.251070223471186 | erot = 0.245606888556646 | epot = -15.1215808540782 | etot = -14.6249037420504 +772000 ekin = 0.268985032794879 | erot = 0.236650197272996 | epot = -15.1305389722379 | etot = -14.62490374217 +773000 ekin = 0.287649902235825 | erot = 0.229335047808992 | epot = -15.1418886923345 | etot = -14.6249037422897 +774000 ekin = 0.304971347443094 | erot = 0.223914516380436 | epot = -15.1537896061991 | etot = -14.6249037423756 +775000 ekin = 0.319422560280909 | erot = 0.220611402281974 | epot = -15.1649377049681 | etot = -14.6249037424052 +776000 ekin = 0.330375903028573 | erot = 0.21963284072128 | epot = -15.1749124861238 | etot = -14.624903742374 +777000 ekin = 0.338182326480891 | erot = 0.221157252264285 | epot = -15.184243321042 | etot = -14.6249037422968 +778000 ekin = 0.343980993504904 | erot = 0.225293639771365 | epot = -15.1941783754794 | etot = -14.6249037422032 +779000 ekin = 0.349294202147107 | erot = 0.232023926336935 | epot = -15.2062218706133 | etot = -14.6249037421292 +780000 ekin = 0.355517983707508 | erot = 0.241146781674954 | epot = -15.2215685074899 | etot = -14.6249037421074 +781000 ekin = 0.363445847501857 | erot = 0.252244149939742 | epot = -15.2405937395992 | etot = -14.6249037421576 +782000 ekin = 0.372957766808644 | erot = 0.264688770757683 | epot = -15.2625502798455 | etot = -14.6249037422792 +783000 ekin = 0.382969267748679 | erot = 0.277702579811651 | epot = -15.2855755900109 | etot = -14.6249037424505 +784000 ekin = 0.391670514066047 | erot = 0.290462881205936 | epot = -15.3070371379042 | etot = -14.6249037426322 +785000 ekin = 0.397003136152503 | erot = 0.30223788282162 | epot = -15.3241447617521 | etot = -14.624903742778 +786000 ekin = 0.397244540913489 | erot = 0.312520082334536 | epot = -15.3346683660962 | etot = -14.6249037428482 +787000 ekin = 0.391525061079608 | erot = 0.321121025638165 | epot = -15.3375498295401 | etot = -14.6249037428223 +788000 ekin = 0.380116514494719 | erot = 0.328198366843703 | epot = -15.3332186240439 | etot = -14.6249037427055 +789000 ekin = 0.364402868103514 | erot = 0.334204933642789 | epot = -15.3235115442733 | etot = -14.624903742527 +790000 ekin = 0.34654788283668 | erot = 0.339772664563971 | epot = -15.3112242897311 | etot = -14.6249037423304 +791000 ekin = 0.328969533927298 | erot = 0.345562661329334 | epot = -15.2994359374173 | etot = -14.6249037421606 +792000 ekin = 0.313783234687856 | erot = 0.352120250332508 | epot = -15.2908072270725 | etot = -14.6249037420521 +793000 ekin = 0.302371973145943 | erot = 0.359769001652795 | epot = -15.2870447168187 | etot = -14.6249037420199 +794000 ekin = 0.295192752069597 | erot = 0.368565036951676 | epot = -15.288661531079 | etot = -14.6249037420577 +795000 ekin = 0.291854072001344 | erot = 0.378316728406861 | epot = -15.2950745425493 | etot = -14.6249037421411 +796000 ekin = 0.291420477240303 | erot = 0.388659220599258 | epot = -15.3049834400759 | etot = -14.6249037422364 +797000 ekin = 0.292835767593939 | erot = 0.39916067791523 | epot = -15.3169001878199 | etot = -14.6249037423108 +798000 ekin = 0.295321690654866 | erot = 0.409429919731993 | epot = -15.329655352731 | etot = -14.6249037423441 +799000 ekin = 0.298615606685225 | erot = 0.41919526946406 | epot = -15.3427146184839 | etot = -14.6249037423347 +800000 ekin = 0.302963113078809 | erot = 0.428333265393227 | epot = -15.3562001207724 | etot = -14.6249037423004 +801000 ekin = 0.30886980741851 | erot = 0.436842111958024 | epot = -15.3706156616477 | etot = -14.6249037422712 +802000 ekin = 0.316711643345927 | erot = 0.444773620895207 | epot = -15.3863890065174 | etot = -14.6249037422763 +803000 ekin = 0.326365730601817 | erot = 0.452151664704948 | epot = -15.4034211376386 | etot = -14.6249037423318 +804000 ekin = 0.337019280357668 | erot = 0.458909057451191 | epot = -15.4208320802431 | etot = -14.6249037424342 +805000 ekin = 0.347244531512514 | erot = 0.464865921885975 | epot = -15.4370141959586 | etot = -14.6249037425601 +806000 ekin = 0.355321558015248 | erot = 0.469755825323994 | epot = -15.4499811260149 | etot = -14.6249037426756 +807000 ekin = 0.359699244804389 | erot = 0.47328839989947 | epot = -15.4578913874509 | etot = -14.624903742747 +808000 ekin = 0.359442919436746 | erot = 0.475225772200574 | epot = -15.4595724343886 | etot = -14.6249037427513 +809000 ekin = 0.354532149710961 | erot = 0.475448148012512 | epot = -15.454884040406 | etot = -14.6249037426825 +810000 ekin = 0.345927121515436 | erot = 0.473990365430211 | epot = -15.4448212294985 | etot = -14.6249037425528 +811000 ekin = 0.335391497319453 | erot = 0.471042355239708 | epot = -15.4313375949476 | etot = -14.6249037423884 +812000 ekin = 0.325122479809057 | erot = 0.466917662639856 | epot = -15.416943884672 | etot = -14.6249037422231 +813000 ekin = 0.31728183261798 | erot = 0.462001954840949 | epot = -15.4041875295485 | etot = -14.6249037420896 +814000 ekin = 0.313538689250887 | erot = 0.456696276151244 | epot = -15.3951387074148 | etot = -14.6249037420127 +815000 ekin = 0.314725301426621 | erot = 0.451368238943233 | epot = -15.3909972823742 | etot = -14.6249037420043 +816000 ekin = 0.320674745952002 | erot = 0.446320054204494 | epot = -15.3918985422185 | etot = -14.624903742062 +817000 ekin = 0.330264402529528 | erot = 0.441777145069773 | epot = -15.3969452897695 | etot = -14.6249037421702 +818000 ekin = 0.341643112115936 | erot = 0.437896324121525 | epot = -15.404443178542 | etot = -14.6249037423045 +819000 ekin = 0.352584467965967 | erot = 0.43478868897098 | epot = -15.4122768993742 | etot = -14.6249037424372 +820000 ekin = 0.360890006680921 | erot = 0.432549774286878 | epot = -15.4183435235106 | etot = -14.6249037425428 +821000 ekin = 0.364764924967774 | erot = 0.431288293594747 | epot = -15.4209569611646 | etot = -14.624903742602 +822000 ekin = 0.36310132304895 | erot = 0.431144612410167 | epot = -15.419149678065 | etot = -14.6249037426059 +823000 ekin = 0.355627506072524 | erot = 0.432293079211457 | epot = -15.4128243278395 | etot = -14.6249037425555 +824000 ekin = 0.342909508000251 | erot = 0.43492611819946 | epot = -15.4027393686613 | etot = -14.6249037424616 +825000 ekin = 0.326218347991422 | erot = 0.439222871855163 | epot = -15.3903449621884 | etot = -14.6249037423418 +826000 ekin = 0.307298067027383 | erot = 0.445309293137298 | epot = -15.3775111023813 | etot = -14.6249037422166 +827000 ekin = 0.288081469810276 | erot = 0.453218819733682 | epot = -15.3662040316499 | etot = -14.6249037421059 +828000 ekin = 0.270403517644502 | erot = 0.462862712071626 | epot = -15.358169971742 | etot = -14.6249037420259 +829000 ekin = 0.255756724313645 | erot = 0.474017347276416 | epot = -15.354677813577 | etot = -14.624903741987 +830000 ekin = 0.245120383539843 | erot = 0.486332016594477 | epot = -15.3563561421264 | etot = -14.6249037419921 +831000 ekin = 0.238883956789448 | erot = 0.499357971990473 | epot = -15.3631456708169 | etot = -14.624903742037 +832000 ekin = 0.236868645662797 | erot = 0.512595315428093 | epot = -15.3743677032021 | etot = -14.6249037421112 +833000 ekin = 0.238435989568506 | erot = 0.525550909043033 | epot = -15.3888906408115 | etot = -14.6249037421999 +834000 ekin = 0.242658569127625 | erot = 0.537797737790879 | epot = -15.405360049206 | etot = -14.6249037422875 +835000 ekin = 0.248518315375854 | erot = 0.549024910270133 | epot = -15.4224469680061 | etot = -14.6249037423601 +836000 ekin = 0.255095050222772 | erot = 0.559068449138662 | epot = -15.4390672417693 | etot = -14.6249037424078 +837000 ekin = 0.261712817640357 | erot = 0.567916383628495 | epot = -15.4545329436954 | etot = -14.6249037424265 +838000 ekin = 0.268023056778553 | erot = 0.575686784519793 | epot = -15.4686135837165 | etot = -14.6249037424181 +839000 ekin = 0.27401827032314 | erot = 0.582582979367263 | epot = -15.4815049920797 | etot = -14.6249037423893 +840000 ekin = 0.279983100774025 | erot = 0.588834754839967 | epot = -15.4937215979637 | etot = -14.6249037423497 +841000 ekin = 0.286398274628728 | erot = 0.59463702433131 | epot = -15.5059390412703 | etot = -14.6249037423103 +842000 ekin = 0.293816650983536 | erot = 0.600098453281003 | epot = -15.5188188465462 | etot = -14.6249037422817 +843000 ekin = 0.302726774569486 | erot = 0.605208920749049 | epot = -15.5328394375911 | etot = -14.6249037422726 +844000 ekin = 0.313421069061172 | erot = 0.609833296485301 | epot = -15.5481581078353 | etot = -14.6249037422889 +845000 ekin = 0.325887895394733 | erot = 0.613733577818912 | epot = -15.5645252155452 | etot = -14.6249037423315 +846000 ekin = 0.339752400962196 | erot = 0.616615984720894 | epot = -15.5812721280789 | etot = -14.6249037423958 +847000 ekin = 0.354292335348444 | erot = 0.61819407953295 | epot = -15.5973901573525 | etot = -14.6249037424711 +848000 ekin = 0.368542667423182 | erot = 0.618254639142345 | epot = -15.6117010491079 | etot = -14.6249037425423 +849000 ekin = 0.381474241843926 | erot = 0.616711095273524 | epot = -15.6230890797115 | etot = -14.6249037425941 +850000 ekin = 0.392198266661771 | erot = 0.613631554979492 | epot = -15.6307335642567 | etot = -14.6249037426155 +851000 ekin = 0.40012936773711 | erot = 0.609234588535909 | epot = -15.6342676988772 | etot = -14.6249037426042 +852000 ekin = 0.405049998797733 | erot = 0.603854451146916 | epot = -15.633808192512 | etot = -14.6249037425674 +853000 ekin = 0.407056563941561 | erot = 0.597885334648249 | epot = -15.6298456411086 | etot = -14.6249037425187 +854000 ekin = 0.406415158938748 | erot = 0.591718979210661 | epot = -15.6230378806227 | etot = -14.6249037424733 +855000 ekin = 0.403390043512858 | erot = 0.585690332509252 | epot = -15.6139841184645 | etot = -14.6249037424423 +856000 ekin = 0.398116166002726 | erot = 0.580042463525136 | epot = -15.6030623719571 | etot = -14.6249037424293 +857000 ekin = 0.390568016159967 | erot = 0.574915889724967 | epot = -15.5903876483136 | etot = -14.6249037424286 +858000 ekin = 0.380638245096081 | erot = 0.570361176880736 | epot = -15.5759031644054 | etot = -14.6249037424286 +859000 ekin = 0.368297168914653 | erot = 0.566367903415377 | epot = -15.5595688147452 | etot = -14.6249037424151 +860000 ekin = 0.353771484486348 | erot = 0.56289933566704 | epot = -15.5415745625316 | etot = -14.6249037423782 +861000 ekin = 0.337668189076058 | erot = 0.55992119051608 | epot = -15.522493121908 | etot = -14.6249037423159 +862000 ekin = 0.320982687534733 | erot = 0.55741511441171 | epot = -15.5033015441828 | etot = -14.6249037422364 +863000 ekin = 0.304965814691443 | erot = 0.555372641472256 | epot = -15.4852421983211 | etot = -14.6249037421574 +864000 ekin = 0.290872653003623 | erot = 0.553772082573975 | epot = -15.4695484776774 | etot = -14.6249037420998 +865000 ekin = 0.279660774249956 | erot = 0.552546988655193 | epot = -15.4571115049878 | etot = -14.6249037420826 +866000 ekin = 0.271730646599716 | erot = 0.551558423386406 | epot = -15.448192812101 | etot = -14.6249037421149 +867000 ekin = 0.266795961580917 | erot = 0.550582916186157 | epot = -15.44228261996 | etot = -14.624903742193 +868000 ekin = 0.263936467175858 | erot = 0.549323573880104 | epot = -15.4381637833559 | etot = -14.6249037422999 +869000 ekin = 0.261831470221839 | erot = 0.547444696243376 | epot = -15.4341799088748 | etot = -14.6249037424095 +870000 ekin = 0.259116433169107 | erot = 0.544622620095519 | epot = -15.4286427957584 | etot = -14.6249037424938 +871000 ekin = 0.25476611341807 | erot = 0.540599894777859 | epot = -15.4202697507262 | etot = -14.6249037425303 +872000 ekin = 0.248397230690975 | erot = 0.535228153627688 | epot = -15.4085291268279 | etot = -14.6249037425092 +873000 ekin = 0.240403953825284 | erot = 0.528487826572668 | epot = -15.3937955228335 | etot = -14.6249037424356 +874000 ekin = 0.23188412578265 | erot = 0.52047931782111 | epot = -15.3772671859324 | etot = -14.6249037423286 +875000 ekin = 0.224371090312889 | erot = 0.51138848970078 | epot = -15.3606633222303 | etot = -14.6249037422166 +876000 ekin = 0.219440883379249 | erot = 0.501436812694071 | epot = -15.3457814382023 | etot = -14.624903742129 +877000 ekin = 0.218302972735591 | erot = 0.490831150818216 | epot = -15.3340378656416 | etot = -14.6249037420878 +878000 ekin = 0.221492456262699 | erot = 0.479728387736622 | epot = -15.3261245861005 | etot = -14.6249037421012 +879000 ekin = 0.228756262274367 | erot = 0.468225594693664 | epot = -15.3218855991281 | etot = -14.6249037421601 +880000 ekin = 0.239169160088235 | erot = 0.456378166082075 | epot = -15.3204510684122 | etot = -14.6249037422419 +881000 ekin = 0.251443176614178 | erot = 0.444238659512956 | epot = -15.3205855784449 | etot = -14.6249037423178 +882000 ekin = 0.264330844663498 | erot = 0.431901289695958 | epot = -15.3211358767212 | etot = -14.6249037423617 +883000 ekin = 0.276992343361542 | erot = 0.419534292632451 | epot = -15.3214303783535 | etot = -14.6249037423595 +884000 ekin = 0.289210952362652 | erot = 0.407386172192625 | epot = -15.321500866868 | etot = -14.6249037423127 +885000 ekin = 0.301394205510712 | erot = 0.395760928443729 | epot = -15.3220588761924 | etot = -14.6249037422379 +886000 ekin = 0.314368599205627 | erot = 0.384968165379708 | epot = -15.3242405067466 | etot = -14.6249037421612 +887000 ekin = 0.329038341775269 | erot = 0.375262338090432 | epot = -15.3292044219761 | etot = -14.6249037421104 +888000 ekin = 0.3460151111552 | erot = 0.366788650327974 | epot = -15.337707503589 | etot = -14.6249037421058 +889000 ekin = 0.365329693883301 | erot = 0.359550947377142 | epot = -15.3497843834163 | etot = -14.6249037421559 +890000 ekin = 0.386310696217007 | erot = 0.353410826837943 | epot = -15.364625265308 | etot = -14.6249037422531 +891000 ekin = 0.40766808705505 | erot = 0.348119126036606 | epot = -15.3806909554677 | etot = -14.624903742376 +892000 ekin = 0.427761236103282 | erot = 0.343372786941987 | epot = -15.3960377655415 | etot = -14.6249037424963 +893000 ekin = 0.444977236019449 | erot = 0.33888352569265 | epot = -15.4087645042971 | etot = -14.624903742585 +894000 ekin = 0.458112158680458 | erot = 0.334441343917185 | epot = -15.4174572452192 | etot = -14.6249037426215 +895000 ekin = 0.466648008331883 | erot = 0.329956933565113 | epot = -15.4215086844963 | etot = -14.6249037425993 +896000 ekin = 0.470850232519732 | erot = 0.325472374552551 | epot = -15.4212263495988 | etot = -14.6249037425265 +897000 ekin = 0.471664510488006 | erot = 0.321137893833118 | epot = -15.4177061467451 | etot = -14.624903742424 +898000 ekin = 0.470447771985807 | erot = 0.317161282107798 | epot = -15.4125127964124 | etot = -14.6249037423188 +899000 ekin = 0.468609320535655 | erot = 0.313743247831532 | epot = -15.407256310605 | etot = -14.6249037422378 +900000 ekin = 0.467255363896805 | erot = 0.311015004595507 | epot = -15.403174110693 | etot = -14.6249037422007 +901000 ekin = 0.466923299456955 | erot = 0.308993431077898 | epot = -15.4008204727509 | etot = -14.624903742216 +902000 ekin = 0.467466399705958 | erot = 0.307564919774008 | epot = -15.3999350617591 | etot = -14.6249037422791 +903000 ekin = 0.468112799245358 | erot = 0.306502589385531 | epot = -15.3995191310034 | etot = -14.6249037423725 +904000 ekin = 0.467682260080958 | erot = 0.305513914729679 | epot = -15.398099917282 | etot = -14.6249037424714 +905000 ekin = 0.464906903208091 | erot = 0.304308207539486 | epot = -15.3941188532968 | etot = -14.6249037425492 +906000 ekin = 0.458775313350218 | erot = 0.302667437698602 | epot = -15.386346493633 | etot = -14.6249037425842 +907000 ekin = 0.448811106797068 | erot = 0.300501710925682 | epot = -15.3742165602888 | etot = -14.624903742566 +908000 ekin = 0.435212888278286 | erot = 0.297873922704326 | epot = -15.3579905534802 | etot = -14.6249037424976 +909000 ekin = 0.418821166578994 | erot = 0.294986492955548 | epot = -15.338711401929 | etot = -14.6249037423944 +910000 ekin = 0.400928155652122 | erot = 0.292134043124749 | epot = -15.3179659410565 | etot = -14.6249037422796 +911000 ekin = 0.382990731318649 | erot = 0.289635345607696 | epot = -15.2975298191034 | etot = -14.6249037421771 +912000 ekin = 0.366329155569864 | erot = 0.28776245704618 | epot = -15.2789953547216 | etot = -14.6249037421055 +913000 ekin = 0.351888443631227 | erot = 0.286683662572629 | epot = -15.2634758482788 | etot = -14.624903742075 +914000 ekin = 0.340111462795541 | erot = 0.286431278414487 | epot = -15.2514464832954 | etot = -14.6249037420854 +915000 ekin = 0.330936398540049 | erot = 0.286898247267082 | epot = -15.2427383879356 | etot = -14.6249037421284 +916000 ekin = 0.323899271601486 | erot = 0.287861143478391 | epot = -15.2366641572706 | etot = -14.6249037421907 +917000 ekin = 0.318302399047232 | erot = 0.289022784865087 | epot = -15.2322289261691 | etot = -14.6249037422568 +918000 ekin = 0.313403328231463 | erot = 0.290065205370856 | epot = -15.2283722759152 | etot = -14.6249037423129 +919000 ekin = 0.308582994046901 | erot = 0.290702987753991 | epot = -15.2241897241499 | etot = -14.624903742349 +920000 ekin = 0.303462620954368 | erot = 0.290727692025052 | epot = -15.2190940553399 | etot = -14.6249037423605 +921000 ekin = 0.297952758522196 | erot = 0.290036267627498 | epot = -15.2128927684978 | etot = -14.6249037423481 +922000 ekin = 0.29223232916649 | erot = 0.28863969692327 | epot = -15.2057757684075 | etot = -14.6249037423178 +923000 ekin = 0.286668877937277 | erot = 0.286652137103424 | epot = -15.1982247573193 | etot = -14.6249037422786 +924000 ekin = 0.28170186865761 | erot = 0.28426466875578 | epot = -15.1908702796539 | etot = -14.6249037422405 +925000 ekin = 0.277717553237222 | erot = 0.281710557645316 | epot = -15.1843318530947 | etot = -14.6249037422121 +926000 ekin = 0.274945509178671 | erot = 0.279230091666927 | epot = -15.1790793430443 | etot = -14.6249037421988 +927000 ekin = 0.273402631519431 | erot = 0.277042382113437 | epot = -15.1753487558338 | etot = -14.624903742201 +928000 ekin = 0.272900230271358 | erot = 0.275329232545622 | epot = -15.1731332050314 | etot = -14.6249037422144 +929000 ekin = 0.273115271901108 | erot = 0.274232799537457 | epot = -15.1722518136694 | etot = -14.6249037422308 +930000 ekin = 0.273710515356084 | erot = 0.273865029644295 | epot = -15.1724792872405 | etot = -14.6249037422402 +931000 ekin = 0.274474107140427 | erot = 0.274323617229163 | epot = -15.1737014666035 | etot = -14.6249037422339 +932000 ekin = 0.275440857683932 | erot = 0.275707340217243 | epot = -15.1760519401082 | etot = -14.624903742207 +933000 ekin = 0.276957575782685 | erot = 0.278123705988738 | epot = -15.1799850239326 | etot = -14.6249037421612 +934000 ekin = 0.279664435384645 | erot = 0.281683992543778 | epot = -15.186252170033 | etot = -14.6249037421046 +935000 ekin = 0.284382433297568 | erot = 0.286484503522986 | epot = -15.1957706788719 | etot = -14.6249037420513 +936000 ekin = 0.291920557580458 | erot = 0.292577187598382 | epot = -15.2094014871973 | etot = -14.6249037420184 +937000 ekin = 0.302840159170039 | erot = 0.299936553990847 | epot = -15.2276804551831 | etot = -14.6249037420222 +938000 ekin = 0.317231541763436 | erot = 0.308432066638964 | epot = -15.2505673504756 | etot = -14.6249037420732 +939000 ekin = 0.334562734704465 | erot = 0.317815317270747 | epot = -15.277281794148 | etot = -14.6249037421728 +940000 ekin = 0.35364952180483 | erot = 0.327729086105148 | epot = -15.3062823502215 | etot = -14.6249037423115 +941000 ekin = 0.372770367646405 | erot = 0.337741122003473 | epot = -15.3354152321199 | etot = -14.62490374247 +942000 ekin = 0.389915662531244 | erot = 0.34739974979893 | epot = -15.3622191549524 | etot = -14.6249037426222 +943000 ekin = 0.403126345738701 | erot = 0.356302369933728 | epot = -15.3843324584131 | etot = -14.6249037427407 +944000 ekin = 0.410851754405684 | erot = 0.364163156178504 | epot = -15.3999186533874 | etot = -14.6249037428032 +945000 ekin = 0.41224792095984 | erot = 0.370864511414023 | epot = -15.4080161751712 | etot = -14.6249037427973 +946000 ekin = 0.407348747779498 | erot = 0.376479254456982 | epot = -15.4087317449601 | etot = -14.6249037427236 +947000 ekin = 0.397071124216324 | erot = 0.381256899558077 | epot = -15.4032317663699 | etot = -14.6249037425955 +948000 ekin = 0.38305345572573 | erot = 0.385576026490354 | epot = -15.3935332246524 | etot = -14.6249037424363 +949000 ekin = 0.367364810069699 | erot = 0.389872987608877 | epot = -15.3821415399525 | etot = -14.624903742274 +950000 ekin = 0.352149150210297 | erot = 0.394562514442363 | epot = -15.3716154067876 | etot = -14.6249037421349 +951000 ekin = 0.339280178142264 | erot = 0.399966938640697 | epot = -15.364150858822 | etot = -14.6249037420391 +952000 ekin = 0.330096120378427 | erot = 0.406268489131276 | epot = -15.3612683515059 | etot = -14.6249037419962 +953000 ekin = 0.32526183166892 | erot = 0.413492937870355 | epot = -15.3636585115441 | etot = -14.6249037420048 +954000 ekin = 0.324774911928697 | erot = 0.421526046052984 | epot = -15.3712047000353 | etot = -14.6249037420537 +955000 ekin = 0.328098170458837 | erot = 0.430156858160225 | epot = -15.3831587707443 | etot = -14.6249037421253 +956000 ekin = 0.334370903123397 | erot = 0.439135698167057 | epot = -15.3984103434923 | etot = -14.6249037422019 +957000 ekin = 0.342633913360124 | erot = 0.44823123979963 | epot = -15.4157688954295 | etot = -14.6249037422697 +958000 ekin = 0.352004139469675 | erot = 0.457271615168161 | epot = -15.4341794969606 | etot = -14.6249037423228 +959000 ekin = 0.361755395785515 | erot = 0.466159587644429 | epot = -15.4528187257936 | etot = -14.6249037423637 +960000 ekin = 0.37129634840351 | erot = 0.474860087933521 | epot = -15.4710601787381 | etot = -14.624903742401 +961000 ekin = 0.380073790913227 | erot = 0.483367158176183 | epot = -15.4883446915346 | etot = -14.6249037424452 +962000 ekin = 0.387455548951145 | erot = 0.491663490522134 | epot = -15.5040227819764 | etot = -14.6249037425031 +963000 ekin = 0.392654097313064 | erot = 0.499687295633833 | epot = -15.5172451355218 | etot = -14.6249037425749 +964000 ekin = 0.394737939560465 | erot = 0.507318071997362 | epot = -15.52695975421 | etot = -14.6249037426522 +965000 ekin = 0.392748486468401 | erot = 0.514386334668901 | epot = -15.5320385638565 | etot = -14.6249037427192 +966000 ekin = 0.385905473254046 | erot = 0.520705106529118 | epot = -15.5315143225403 | etot = -14.6249037427571 +967000 ekin = 0.373852021646475 | erot = 0.526114369236053 | epot = -15.5248701336312 | etot = -14.6249037427486 +968000 ekin = 0.356869417136842 | erot = 0.530525868586128 | epot = -15.5122990284073 | etot = -14.6249037426844 +969000 ekin = 0.335986889835165 | erot = 0.533955228285004 | epot = -15.4948458606873 | etot = -14.6249037425671 +970000 ekin = 0.312927788673001 | erot = 0.536531428462375 | epot = -15.4743629595488 | etot = -14.6249037424134 +971000 ekin = 0.289872105907279 | erot = 0.538479668129898 | epot = -15.4532555162884 | etot = -14.6249037422512 +972000 ekin = 0.269070232406882 | erot = 0.5400808983618 | epot = -15.4340548728819 | etot = -14.6249037421133 +973000 ekin = 0.252397022945549 | erot = 0.54161782723096 | epot = -15.4189185922049 | etot = -14.6249037420284 +974000 ekin = 0.240964852822479 | erot = 0.543321042151966 | epot = -15.4091896369876 | etot = -14.6249037420132 +975000 ekin = 0.23490216482404 | erot = 0.545328986458525 | epot = -15.4051348933507 | etot = -14.6249037420682 +976000 ekin = 0.233353466621782 | erot = 0.547671994179659 | epot = -15.4059292029795 | etot = -14.6249037421781 +977000 ekin = 0.234692201089083 | erot = 0.550284513866881 | epot = -15.4098804572724 | etot = -14.6249037423164 +978000 ekin = 0.236887903180263 | erot = 0.553043053342472 | epot = -15.4148346989741 | etot = -14.6249037424514 +979000 ekin = 0.237945797131594 | erot = 0.555821040963433 | epot = -15.4186705806471 | etot = -14.6249037425521 +980000 ekin = 0.236334546963168 | erot = 0.558547250125055 | epot = -15.4197855396823 | etot = -14.6249037425941 +981000 ekin = 0.231322843924042 | erot = 0.561252158432646 | epot = -15.4174787449221 | etot = -14.6249037425654 +982000 ekin = 0.223154169544533 | erot = 0.564087592074629 | epot = -15.4121455040889 | etot = -14.6249037424697 +983000 ekin = 0.213008719539339 | erot = 0.567310103886669 | epot = -15.4052225657532 | etot = -14.6249037423272 +984000 ekin = 0.202740628548441 | erot = 0.571227590062575 | epot = -15.3988719607827 | etot = -14.6249037421716 +985000 ekin = 0.194435665154694 | erot = 0.576119771487871 | epot = -15.3954591786846 | etot = -14.624903742042 +986000 ekin = 0.189894304519126 | erot = 0.58215285815263 | epot = -15.3969509046435 | etot = -14.6249037419717 +987000 ekin = 0.190182835424942 | erot = 0.589313613953793 | epot = -15.4044001913571 | etot = -14.6249037419783 +988000 ekin = 0.195390213187374 | erot = 0.597385005524008 | epot = -15.4176789607685 | etot = -14.6249037420571 +989000 ekin = 0.204671362362343 | erot = 0.605974905403727 | epot = -15.4355500099486 | etot = -14.6249037421825 +990000 ekin = 0.216563394578633 | erot = 0.614593273597528 | epot = -15.4560604104923 | etot = -14.6249037423162 +991000 ekin = 0.229465191861939 | erot = 0.622757127490605 | epot = -15.477126061773 | etot = -14.6249037424204 +992000 ekin = 0.24211427112869 | erot = 0.630092599916922 | epot = -15.4971106135161 | etot = -14.6249037424704 +993000 ekin = 0.253902581479766 | erot = 0.636403793831493 | epot = -15.5152101177725 | etot = -14.6249037424612 +994000 ekin = 0.264939510335544 | erot = 0.641689105047928 | epot = -15.5315323577914 | etot = -14.6249037424079 +995000 ekin = 0.275864888578878 | erot = 0.646102898208469 | epot = -15.5468715291258 | etot = -14.6249037423384 +996000 ekin = 0.287497820769962 | erot = 0.649877086441122 | epot = -15.562278649495 | etot = -14.6249037422839 +997000 ekin = 0.300450307467282 | erot = 0.653227423573226 | epot = -15.578581473309 | etot = -14.6249037422685 +998000 ekin = 0.314829914377661 | erot = 0.656270894957595 | epot = -15.5960045516386 | etot = -14.6249037423033 +999000 ekin = 0.330110494517446 | erot = 0.658973630822486 | epot = -15.613987867725 | etot = -14.6249037423851 +1000000 ekin = 0.345190458651126 | erot = 0.66113833946702 | epot = -15.6312325406162 | etot = -14.624903742498 + 1000000 0.025569664 -1.5839232 0.020799898 -1.5286042 -3.5789082e-06 +Loop time of 30.1999 on 4 procs for 1000000 steps with 10 atoms + +Performance: 28609.339 tau/day, 33112.661 timesteps/s +96.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.90762 | 10.291 | 18.476 | 234.3 | 34.08 +Bond | 0.11783 | 0.39332 | 0.61914 | 34.0 | 1.30 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 2.8711 | 3.8042 | 4.7159 | 34.0 | 12.60 +Output | 2e-05 | 3.15e-05 | 3.6e-05 | 0.0 | 0.00 +Modify | 0.27052 | 1.1583 | 1.9428 | 63.9 | 3.84 +Other | | 14.55 | | | 48.19 + +Nlocal: 2.5 ave 5 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Nghost: 7.5 ave 10 max 5 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 18.5 ave 35 max 0 min +Histogram: 1 0 1 0 0 0 0 0 1 1 + +Total # of neighbors = 74 +Ave neighs/atom = 7.4 +Ave special neighs/atom = 3.6 +Neighbor list builds = 0 +Dangerous builds = 0 + +#write_restart config.${number}.* +Total wall time: 0:00:30 diff --git a/examples/USER/misc/kolmogorov_crespi_full/CH.rebo b/examples/USER/misc/kolmogorov_crespi_full/CH.rebo new file mode 120000 index 0000000000..c5a6a40100 --- /dev/null +++ b/examples/USER/misc/kolmogorov_crespi_full/CH.rebo @@ -0,0 +1 @@ +../../../../potentials/CH.rebo \ No newline at end of file diff --git a/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene b/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene index 63ac92cb05..c3e59337de 100644 --- a/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene +++ b/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene @@ -18,7 +18,7 @@ group adsorbate type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 #################################################################### -pair_coeff * * rebo CH.airebo NULL C # chemical +pair_coeff * * rebo CH.rebo NULL C # chemical pair_coeff * * kolmogorov/crespi/full CC.KC-full C C # long range #################################################################### # Neighbor update settings diff --git a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.1 b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.1 similarity index 59% rename from examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.1 rename to examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.1 index a06b3effdd..c74f9956a2 100644 --- a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.1 +++ b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (8 Mar 2018) +LAMMPS (5 Jun 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # Initialization units metal @@ -21,6 +22,8 @@ read_data Bi_gr_AB_stack_2L_noH_300K.data 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors + special bonds CPU = 0.000353813 secs + read_data CPU = 0.0043292 secs mass 1 12.0107 # carbon mass (g/mole) | membrane mass 2 12.0107 # carbon mass (g/mole) | adsorbate # Separate atom groups @@ -32,8 +35,8 @@ group adsorbate type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 #################################################################### -pair_coeff * * rebo CH.airebo NULL C # chemical -Reading potential file CH.airebo with DATE: 2011-10-25 +pair_coeff * * rebo CH.rebo NULL C # chemical +Reading potential file CH.rebo with DATE: 2018-7-3 pair_coeff * * kolmogorov/crespi/full CC.KC-full C C # long range #################################################################### # Neighbor update settings @@ -92,32 +95,32 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 16.96 | 16.96 | 16.96 Mbytes Step TotEng PotEng KinEng v_REBO v_KC Temp v_adsxcom v_adsycom v_adszcom v_adsvxcom v_adsvycom v_adsvzcom - 0 -5025.3867722725 -5040.0767391239 14.6899668514 -5011.2636297759 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 - 100 -5025.3962433293 -5041.3829775585 15.9867342292 -5012.5109377234 -28.8720398351 91.0071804888 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069014 - 200 -5025.3942568861 -5041.9638220670 16.5695651809 -5012.7804299195 -29.1833921475 94.3250439654 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265577 - 300 -5025.3919463074 -5040.9705419367 15.5785956293 -5012.0510295102 -28.9195124265 88.6837826830 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745908 - 400 -5025.3965376948 -5041.6929964127 16.2964587179 -5012.6418090677 -29.0511873450 92.7703393702 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704496 - 500 -5025.4050172900 -5042.1712310053 16.7662137153 -5013.1850218645 -28.9862091408 95.4444989087 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 - 600 -5025.3985715734 -5041.2158947893 15.8173232159 -5012.4875319345 -28.7283628548 90.0427797270 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001093 - 700 -5025.3997561572 -5041.6276721306 16.2279159734 -5012.7093581188 -28.9183140118 92.3801482386 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311564 - 800 -5025.3967603736 -5042.3401685987 16.9434082251 -5013.3044877099 -29.0356808888 96.4532085367 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492925 - 900 -5025.3984542801 -5042.2820667481 16.8836124680 -5013.4066841442 -28.8753826039 96.1128111061 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648638 - 1000 -5025.3988185618 -5041.9160822433 16.5172636815 -5012.8147737982 -29.1013084450 94.0273088606 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 -Loop time of 156.142 on 1 procs for 1000 steps with 1360 atoms + 0 -5025.3867727863 -5040.0767396377 14.6899668514 -5011.2636302897 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 + 100 -5025.3962438431 -5041.3829780735 15.9867342304 -5012.5109382383 -28.8720398352 91.0071804956 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069015 + 200 -5025.3942574000 -5041.9638225847 16.5695651847 -5012.7804304371 -29.1833921476 94.3250439874 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265578 + 300 -5025.3919468212 -5040.9705424499 15.5785956286 -5012.0510300232 -28.9195124266 88.6837826792 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745907 + 400 -5025.3965382086 -5041.6929969192 16.2964587107 -5012.6418095739 -29.0511873454 92.7703393292 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704497 + 500 -5025.4050178038 -5042.1712315208 16.7662137170 -5013.1850223792 -28.9862091417 95.4444989189 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 + 600 -5025.3985720873 -5041.2158953052 15.8173232179 -5012.4875324499 -28.7283628553 90.0427797386 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001092 + 700 -5025.3997566711 -5041.6276726420 16.2279159709 -5012.7093586298 -28.9183140122 92.3801482242 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311565 + 800 -5025.3967608874 -5042.3401691104 16.9434082230 -5013.3044882226 -29.0356808878 96.4532085250 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492926 + 900 -5025.3984547937 -5042.2820672614 16.8836124676 -5013.4066846579 -28.8753826035 96.1128111040 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648640 + 1000 -5025.3988190757 -5041.9160827657 16.5172636900 -5012.8147743212 -29.1013084444 94.0273089090 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 +Loop time of 103.724 on 1 procs for 1000 steps with 1360 atoms -Performance: 0.553 ns/day, 43.373 hours/ns, 6.404 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.833 ns/day, 28.812 hours/ns, 9.641 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 155.99 | 155.99 | 155.99 | 0.0 | 99.90 -Bond | 0.00075769 | 0.00075769 | 0.00075769 | 0.0 | 0.00 +Pair | 103.59 | 103.59 | 103.59 | 0.0 | 99.87 +Bond | 0.00022388 | 0.00022388 | 0.00022388 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.084217 | 0.084217 | 0.084217 | 0.0 | 0.05 -Output | 0.0016122 | 0.0016122 | 0.0016122 | 0.0 | 0.00 -Modify | 0.034797 | 0.034797 | 0.034797 | 0.0 | 0.02 -Other | | 0.02838 | | | 0.02 +Comm | 0.082476 | 0.082476 | 0.082476 | 0.0 | 0.08 +Output | 0.0010884 | 0.0010884 | 0.0010884 | 0.0 | 0.00 +Modify | 0.032938 | 0.032938 | 0.032938 | 0.0 | 0.03 +Other | | 0.01749 | | | 0.02 Nlocal: 1360 ave 1360 max 1360 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -133,4 +136,4 @@ Ave neighs/atom = 195.004 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:02:36 +Total wall time: 0:01:43 diff --git a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.4 b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.4 similarity index 59% rename from examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.4 rename to examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.4 index 58322f9ce0..b90ee7ee2e 100644 --- a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.4 +++ b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (8 Mar 2018) +LAMMPS (5 Jun 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # Initialization units metal @@ -21,6 +22,8 @@ read_data Bi_gr_AB_stack_2L_noH_300K.data 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors + special bonds CPU = 0.000187874 secs + read_data CPU = 0.00234103 secs mass 1 12.0107 # carbon mass (g/mole) | membrane mass 2 12.0107 # carbon mass (g/mole) | adsorbate # Separate atom groups @@ -32,8 +35,8 @@ group adsorbate type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 #################################################################### -pair_coeff * * rebo CH.airebo NULL C # chemical -Reading potential file CH.airebo with DATE: 2011-10-25 +pair_coeff * * rebo CH.rebo NULL C # chemical +Reading potential file CH.rebo with DATE: 2018-7-3 pair_coeff * * kolmogorov/crespi/full CC.KC-full C C # long range #################################################################### # Neighbor update settings @@ -92,32 +95,32 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 11.13 | 11.13 | 11.13 Mbytes Step TotEng PotEng KinEng v_REBO v_KC Temp v_adsxcom v_adsycom v_adszcom v_adsvxcom v_adsvycom v_adsvzcom - 0 -5025.3867722725 -5040.0767391239 14.6899668514 -5011.2636297759 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 - 100 -5025.3962433293 -5041.3829775585 15.9867342292 -5012.5109377234 -28.8720398351 91.0071804888 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069014 - 200 -5025.3942568861 -5041.9638220670 16.5695651809 -5012.7804299195 -29.1833921475 94.3250439654 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265577 - 300 -5025.3919463074 -5040.9705419367 15.5785956293 -5012.0510295103 -28.9195124265 88.6837826830 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745908 - 400 -5025.3965376948 -5041.6929964127 16.2964587179 -5012.6418090677 -29.0511873450 92.7703393702 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704496 - 500 -5025.4050172900 -5042.1712310053 16.7662137153 -5013.1850218645 -28.9862091408 95.4444989088 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 - 600 -5025.3985715734 -5041.2158947893 15.8173232159 -5012.4875319345 -28.7283628548 90.0427797270 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001093 - 700 -5025.3997561572 -5041.6276721306 16.2279159734 -5012.7093581188 -28.9183140118 92.3801482386 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311564 - 800 -5025.3967603736 -5042.3401685987 16.9434082251 -5013.3044877099 -29.0356808888 96.4532085367 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492925 - 900 -5025.3984542801 -5042.2820667481 16.8836124680 -5013.4066841442 -28.8753826039 96.1128111061 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648638 - 1000 -5025.3988185618 -5041.9160822433 16.5172636815 -5012.8147737983 -29.1013084450 94.0273088606 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 -Loop time of 42.5422 on 4 procs for 1000 steps with 1360 atoms + 0 -5025.3867727863 -5040.0767396377 14.6899668514 -5011.2636302897 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 + 100 -5025.3962438431 -5041.3829780735 15.9867342304 -5012.5109382383 -28.8720398352 91.0071804956 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069015 + 200 -5025.3942574000 -5041.9638225847 16.5695651847 -5012.7804304371 -29.1833921476 94.3250439874 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265578 + 300 -5025.3919468212 -5040.9705424499 15.5785956286 -5012.0510300232 -28.9195124266 88.6837826792 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745907 + 400 -5025.3965382086 -5041.6929969192 16.2964587107 -5012.6418095739 -29.0511873454 92.7703393291 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704497 + 500 -5025.4050178038 -5042.1712315208 16.7662137170 -5013.1850223792 -28.9862091417 95.4444989189 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 + 600 -5025.3985720873 -5041.2158953052 15.8173232179 -5012.4875324499 -28.7283628553 90.0427797386 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001092 + 700 -5025.3997566711 -5041.6276726420 16.2279159709 -5012.7093586298 -28.9183140122 92.3801482242 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311565 + 800 -5025.3967608874 -5042.3401691104 16.9434082230 -5013.3044882226 -29.0356808878 96.4532085250 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492926 + 900 -5025.3984547938 -5042.2820672614 16.8836124676 -5013.4066846579 -28.8753826035 96.1128111040 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648640 + 1000 -5025.3988190757 -5041.9160827657 16.5172636900 -5012.8147743212 -29.1013084444 94.0273089090 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 +Loop time of 33.7338 on 4 procs for 1000 steps with 1360 atoms -Performance: 2.031 ns/day, 11.817 hours/ns, 23.506 timesteps/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.561 ns/day, 9.370 hours/ns, 29.644 timesteps/s +94.1% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 39.928 | 40.992 | 42.377 | 15.8 | 96.36 -Bond | 0.0003643 | 0.00043392 | 0.00048113 | 0.0 | 0.00 +Pair | 30.833 | 31.356 | 32.18 | 9.1 | 92.95 +Bond | 0.00026059 | 0.00029182 | 0.00031185 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.12253 | 1.5076 | 2.5698 | 82.1 | 3.54 -Output | 0.0012577 | 0.0013637 | 0.0016453 | 0.4 | 0.00 -Modify | 0.010833 | 0.012247 | 0.013317 | 0.9 | 0.03 -Other | | 0.02864 | | | 0.07 +Comm | 1.443 | 2.2722 | 2.8091 | 34.3 | 6.74 +Output | 0.00068855 | 0.00095087 | 0.0017185 | 0.0 | 0.00 +Modify | 0.010187 | 0.011709 | 0.015284 | 1.9 | 0.03 +Other | | 0.09241 | | | 0.27 Nlocal: 340 ave 344 max 334 min Histogram: 1 0 0 0 0 0 1 0 1 1 @@ -133,4 +136,4 @@ Ave neighs/atom = 195.004 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:42 +Total wall time: 0:00:33 diff --git a/lib/gpu/lal_answer.cpp b/lib/gpu/lal_answer.cpp index bd8c7ef843..aa6d33d334 100644 --- a/lib/gpu/lal_answer.cpp +++ b/lib/gpu/lal_answer.cpp @@ -15,7 +15,7 @@ #include "lal_answer.h" -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define AnswerT Answer template @@ -311,4 +311,4 @@ void AnswerT::cq(const int cq_index) { } template class Answer; - +} diff --git a/lib/gpu/lal_atom.cpp b/lib/gpu/lal_atom.cpp index 222ba0525e..bc25c00d93 100644 --- a/lib/gpu/lal_atom.cpp +++ b/lib/gpu/lal_atom.cpp @@ -15,7 +15,7 @@ #include "lal_atom.h" -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define AtomT Atom template @@ -349,4 +349,4 @@ void AtomT::compile_kernels(UCL_Device &dev) { #endif template class Atom; - +} diff --git a/lib/gpu/lal_base_atomic.cpp b/lib/gpu/lal_base_atomic.cpp index da54f1dca3..4aadd3754c 100644 --- a/lib/gpu/lal_base_atomic.cpp +++ b/lib/gpu/lal_base_atomic.cpp @@ -14,7 +14,8 @@ ***************************************************************************/ #include "lal_base_atomic.h" -using namespace LAMMPS_AL; + +namespace LAMMPS_AL { #define BaseAtomicT BaseAtomic extern Device global_device; @@ -285,4 +286,4 @@ void BaseAtomicT::compile_kernels(UCL_Device &dev, const void *pair_str, } template class BaseAtomic; - +} diff --git a/lib/gpu/lal_base_charge.cpp b/lib/gpu/lal_base_charge.cpp index a3ec710baa..760e759201 100644 --- a/lib/gpu/lal_base_charge.cpp +++ b/lib/gpu/lal_base_charge.cpp @@ -15,7 +15,7 @@ ***************************************************************************/ #include "lal_base_charge.h" -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BaseChargeT BaseCharge extern Device global_device; @@ -302,4 +302,4 @@ void BaseChargeT::compile_kernels(UCL_Device &dev, const void *pair_str, } template class BaseCharge; - +} diff --git a/lib/gpu/lal_base_dipole.cpp b/lib/gpu/lal_base_dipole.cpp index 9fc7e1b235..56dcaf8e12 100644 --- a/lib/gpu/lal_base_dipole.cpp +++ b/lib/gpu/lal_base_dipole.cpp @@ -15,7 +15,7 @@ ***************************************************************************/ #include "lal_base_dipole.h" -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BaseDipoleT BaseDipole extern Device global_device; @@ -311,4 +311,4 @@ void BaseDipoleT::compile_kernels(UCL_Device &dev, const void *pair_str, } template class BaseDipole; - +} diff --git a/lib/gpu/lal_base_dpd.cpp b/lib/gpu/lal_base_dpd.cpp index eb5c2088a6..66c8cf09e9 100644 --- a/lib/gpu/lal_base_dpd.cpp +++ b/lib/gpu/lal_base_dpd.cpp @@ -15,7 +15,7 @@ ***************************************************************************/ #include "lal_base_dpd.h" -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BaseDPDT BaseDPD extern Device global_device; @@ -308,4 +308,4 @@ void BaseDPDT::compile_kernels(UCL_Device &dev, const void *pair_str, } template class BaseDPD; - +} diff --git a/lib/gpu/lal_base_ellipsoid.cpp b/lib/gpu/lal_base_ellipsoid.cpp index eea5344e33..b8d0b7a666 100644 --- a/lib/gpu/lal_base_ellipsoid.cpp +++ b/lib/gpu/lal_base_ellipsoid.cpp @@ -15,7 +15,7 @@ #include "lal_base_ellipsoid.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #if defined(USE_OPENCL) #include "ellipsoid_nbor_cl.h" @@ -488,4 +488,4 @@ void BaseEllipsoidT::compile_kernels(UCL_Device &dev, } template class BaseEllipsoid; - +} diff --git a/lib/gpu/lal_base_three.cpp b/lib/gpu/lal_base_three.cpp index 0510b84d92..dc5678dd24 100644 --- a/lib/gpu/lal_base_three.cpp +++ b/lib/gpu/lal_base_three.cpp @@ -14,7 +14,7 @@ ***************************************************************************/ #include "lal_base_three.h" -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BaseThreeT BaseThree extern Device global_device; @@ -397,4 +397,4 @@ void BaseThreeT::compile_kernels(UCL_Device &dev, const void *pair_str, } template class BaseThree; - +} diff --git a/lib/gpu/lal_beck.cpp b/lib/gpu/lal_beck.cpp index 165a02b71a..be1722c32c 100644 --- a/lib/gpu/lal_beck.cpp +++ b/lib/gpu/lal_beck.cpp @@ -23,7 +23,7 @@ const char *beck=0; #include "lal_beck.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BeckT Beck extern Device device; @@ -150,3 +150,4 @@ void BeckT::loop(const bool _eflag, const bool _vflag) { } template class Beck; +} diff --git a/lib/gpu/lal_born.cpp b/lib/gpu/lal_born.cpp index 7c1ed944d3..4a6b789687 100644 --- a/lib/gpu/lal_born.cpp +++ b/lib/gpu/lal_born.cpp @@ -23,7 +23,7 @@ const char *born=0; #include "lal_born.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BornT Born extern Device device; @@ -179,3 +179,4 @@ void BornT::loop(const bool _eflag, const bool _vflag) { } template class Born; +} diff --git a/lib/gpu/lal_born_coul_long.cpp b/lib/gpu/lal_born_coul_long.cpp index 116d44d58f..1b147395f6 100644 --- a/lib/gpu/lal_born_coul_long.cpp +++ b/lib/gpu/lal_born_coul_long.cpp @@ -23,7 +23,7 @@ const char *born_coul_long=0; #include "lal_born_coul_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BornCoulLongT BornCoulLong extern Device device; @@ -173,3 +173,4 @@ void BornCoulLongT::loop(const bool _eflag, const bool _vflag) { } template class BornCoulLong; +} diff --git a/lib/gpu/lal_born_coul_long_cs.cpp b/lib/gpu/lal_born_coul_long_cs.cpp index e7fb946f14..24de1e3a06 100644 --- a/lib/gpu/lal_born_coul_long_cs.cpp +++ b/lib/gpu/lal_born_coul_long_cs.cpp @@ -23,7 +23,7 @@ const char *born_coul_long_cs=0; #include "lal_born_coul_long_cs.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BornCoulLongCST BornCoulLongCS extern Device device; @@ -93,3 +93,4 @@ int BornCoulLongCST::init(const int ntypes, double **host_cutsq, double **host_r } template class BornCoulLongCS; +} diff --git a/lib/gpu/lal_born_coul_wolf.cpp b/lib/gpu/lal_born_coul_wolf.cpp index c44b841463..1624dd9d50 100644 --- a/lib/gpu/lal_born_coul_wolf.cpp +++ b/lib/gpu/lal_born_coul_wolf.cpp @@ -23,7 +23,7 @@ const char *born_coul_wolf=0; #include "lal_born_coul_wolf.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BornCoulWolfT BornCoulWolf extern Device device; @@ -174,3 +174,4 @@ void BornCoulWolfT::loop(const bool _eflag, const bool _vflag) { } template class BornCoulWolf; +} diff --git a/lib/gpu/lal_born_coul_wolf_cs.cpp b/lib/gpu/lal_born_coul_wolf_cs.cpp index bdb1c31e55..8deceeb1f4 100644 --- a/lib/gpu/lal_born_coul_wolf_cs.cpp +++ b/lib/gpu/lal_born_coul_wolf_cs.cpp @@ -23,7 +23,7 @@ const char *born_coul_wolf_cs=0; #include "lal_born_coul_wolf_cs.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BornCoulWolfCST BornCoulWolfCS extern Device device; @@ -95,3 +95,4 @@ int BornCoulWolfCST::init(const int ntypes, double **host_cutsq, double **host_r } template class BornCoulWolfCS; +} diff --git a/lib/gpu/lal_buck.cpp b/lib/gpu/lal_buck.cpp index 0da4068d51..5a335a1e51 100644 --- a/lib/gpu/lal_buck.cpp +++ b/lib/gpu/lal_buck.cpp @@ -23,7 +23,7 @@ const char *buck=0; #include "lal_buck.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BuckT Buck extern Device device; @@ -168,3 +168,4 @@ void BuckT::loop(const bool _eflag, const bool _vflag) { } template class Buck; +} diff --git a/lib/gpu/lal_buck_coul.cpp b/lib/gpu/lal_buck_coul.cpp index e4f829fc5c..25607eae17 100644 --- a/lib/gpu/lal_buck_coul.cpp +++ b/lib/gpu/lal_buck_coul.cpp @@ -23,7 +23,7 @@ const char *buck_coul=0; #include "lal_buck_coul.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BuckCoulT BuckCoul extern Device device; @@ -161,3 +161,4 @@ void BuckCoulT::loop(const bool _eflag, const bool _vflag) { } template class BuckCoul; +} diff --git a/lib/gpu/lal_buck_coul_long.cpp b/lib/gpu/lal_buck_coul_long.cpp index 81faada116..1c0288c2d8 100644 --- a/lib/gpu/lal_buck_coul_long.cpp +++ b/lib/gpu/lal_buck_coul_long.cpp @@ -23,7 +23,7 @@ const char *buck_coul_long=0; #include "lal_buck_coul_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define BuckCoulLongT BuckCoulLong extern Device device; @@ -166,3 +166,4 @@ void BuckCoulLongT::loop(const bool _eflag, const bool _vflag) { } template class BuckCoulLong; +} diff --git a/lib/gpu/lal_charmm_long.cpp b/lib/gpu/lal_charmm_long.cpp index 9cd032b3c6..a78996a7d5 100644 --- a/lib/gpu/lal_charmm_long.cpp +++ b/lib/gpu/lal_charmm_long.cpp @@ -23,7 +23,7 @@ const char *charmm_long=0; #include "lal_charmm_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CHARMMLongT CHARMMLong extern Device device; @@ -174,3 +174,4 @@ void CHARMMLongT::loop(const bool _eflag, const bool _vflag) { } template class CHARMMLong; +} diff --git a/lib/gpu/lal_colloid.cpp b/lib/gpu/lal_colloid.cpp index fb2b643e5e..c441d50968 100644 --- a/lib/gpu/lal_colloid.cpp +++ b/lib/gpu/lal_colloid.cpp @@ -23,7 +23,7 @@ const char *colloid=0; #include "lal_colloid.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define ColloidT Colloid extern Device device; @@ -179,3 +179,4 @@ void ColloidT::loop(const bool _eflag, const bool _vflag) { } template class Colloid; +} diff --git a/lib/gpu/lal_coul.cpp b/lib/gpu/lal_coul.cpp index a06a29e610..3e29215c91 100644 --- a/lib/gpu/lal_coul.cpp +++ b/lib/gpu/lal_coul.cpp @@ -23,7 +23,7 @@ const char *coul=0; #include "lal_coul.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CoulT Coul extern Device device; @@ -164,3 +164,4 @@ void CoulT::loop(const bool _eflag, const bool _vflag) { } template class Coul; +} diff --git a/lib/gpu/lal_coul_debye.cpp b/lib/gpu/lal_coul_debye.cpp index 9098aeacb1..08ceb99300 100644 --- a/lib/gpu/lal_coul_debye.cpp +++ b/lib/gpu/lal_coul_debye.cpp @@ -23,7 +23,7 @@ const char *coul_debye=0; #include "lal_coul_debye.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CoulDebyeT CoulDebye extern Device device; @@ -165,3 +165,4 @@ void CoulDebyeT::loop(const bool _eflag, const bool _vflag) { } template class CoulDebye; +} diff --git a/lib/gpu/lal_coul_dsf.cpp b/lib/gpu/lal_coul_dsf.cpp index 32c4342fbe..fe1fbfede7 100644 --- a/lib/gpu/lal_coul_dsf.cpp +++ b/lib/gpu/lal_coul_dsf.cpp @@ -23,7 +23,7 @@ const char *coul_dsf=0; #include "lal_coul_dsf.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CoulDSFT CoulDSF extern Device device; @@ -151,3 +151,4 @@ void CoulDSFT::loop(const bool _eflag, const bool _vflag) { } template class CoulDSF; +} diff --git a/lib/gpu/lal_coul_long.cpp b/lib/gpu/lal_coul_long.cpp index b4c6a44d2f..02097a2c61 100644 --- a/lib/gpu/lal_coul_long.cpp +++ b/lib/gpu/lal_coul_long.cpp @@ -23,7 +23,7 @@ const char *coul_long=0; #include "lal_coul_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CoulLongT CoulLong extern Device pair_gpu_device; @@ -156,3 +156,4 @@ void CoulLongT::loop(const bool _eflag, const bool _vflag) { } template class CoulLong; +} diff --git a/lib/gpu/lal_coul_long_cs.cpp b/lib/gpu/lal_coul_long_cs.cpp index 7afa0ae5d2..32b5691610 100644 --- a/lib/gpu/lal_coul_long_cs.cpp +++ b/lib/gpu/lal_coul_long_cs.cpp @@ -23,7 +23,7 @@ const char *coul_long_cs=0; #include "lal_coul_long_cs.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CoulLongCST CoulLongCS extern Device pair_gpu_device; @@ -76,3 +76,4 @@ int CoulLongCST::init(const int ntypes, double **host_scale, } template class CoulLongCS; +} diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 5534d32e5f..5bd306ea5b 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -17,6 +17,7 @@ #include "lal_precision.h" #include #include +#include #ifdef _OPENMP #include #endif @@ -29,7 +30,7 @@ const char *device=0; #include "device_cubin.h" #endif -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define DeviceT Device template @@ -761,7 +762,9 @@ double DeviceT::host_memory_usage() const { template class Device; Device global_device; +} +using namespace LAMMPS_AL; int lmp_init_device(MPI_Comm world, MPI_Comm replica, const int first_gpu, const int last_gpu, const int gpu_mode, const double particle_split, const int nthreads, @@ -780,4 +783,3 @@ double lmp_gpu_forces(double **f, double **tor, double *eatom, double **vatom, double *virial, double &ecoul) { return global_device.fix_gpu(f,tor,eatom,vatom,virial,ecoul); } - diff --git a/lib/gpu/lal_dipole_lj.cpp b/lib/gpu/lal_dipole_lj.cpp index c97b76c820..b0929e2ffb 100644 --- a/lib/gpu/lal_dipole_lj.cpp +++ b/lib/gpu/lal_dipole_lj.cpp @@ -23,7 +23,7 @@ const char *dipole_lj=0; #include "lal_dipole_lj.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define DipoleLJT DipoleLJ extern Device device; @@ -168,3 +168,4 @@ void DipoleLJT::loop(const bool _eflag, const bool _vflag) { } template class DipoleLJ; +} diff --git a/lib/gpu/lal_dipole_lj_sf.cpp b/lib/gpu/lal_dipole_lj_sf.cpp index a33f38084f..dcf95bb126 100644 --- a/lib/gpu/lal_dipole_lj_sf.cpp +++ b/lib/gpu/lal_dipole_lj_sf.cpp @@ -23,7 +23,7 @@ const char *dipole_lj_sf=0; #include "lal_dipole_lj_sf.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define DipoleLJSFT DipoleLJSF extern Device device; @@ -168,3 +168,4 @@ void DipoleLJSFT::loop(const bool _eflag, const bool _vflag) { } template class DipoleLJSF; +} diff --git a/lib/gpu/lal_dipole_long_lj.cpp b/lib/gpu/lal_dipole_long_lj.cpp index 251e1def92..9648e9b15e 100644 --- a/lib/gpu/lal_dipole_long_lj.cpp +++ b/lib/gpu/lal_dipole_long_lj.cpp @@ -23,7 +23,7 @@ const char *dipole_long_lj=0; #include "lal_dipole_long_lj.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define DipoleLongLJT DipoleLongLJ extern Device device; @@ -171,3 +171,4 @@ void DipoleLongLJT::loop(const bool _eflag, const bool _vflag) { } template class DipoleLongLJ; +} diff --git a/lib/gpu/lal_dpd.cpp b/lib/gpu/lal_dpd.cpp index 4f6f2d641f..c5cbc7eb53 100644 --- a/lib/gpu/lal_dpd.cpp +++ b/lib/gpu/lal_dpd.cpp @@ -23,7 +23,7 @@ const char *dpd=0; #include "lal_dpd.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define DPDT DPD extern Device device; @@ -168,3 +168,4 @@ void DPDT::update_coeff(int ntypes, double **host_a0, double **host_gamma, } template class DPD; +} diff --git a/lib/gpu/lal_eam.cpp b/lib/gpu/lal_eam.cpp index b83972f4db..8c81353f36 100644 --- a/lib/gpu/lal_eam.cpp +++ b/lib/gpu/lal_eam.cpp @@ -23,7 +23,7 @@ const char *eam=0; #include "lal_eam.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define EAMT EAM @@ -531,3 +531,4 @@ void EAMT::loop2(const bool _eflag, const bool _vflag) { } template class EAM; +} diff --git a/lib/gpu/lal_gauss.cpp b/lib/gpu/lal_gauss.cpp index 1ef215d7ff..2f965758eb 100644 --- a/lib/gpu/lal_gauss.cpp +++ b/lib/gpu/lal_gauss.cpp @@ -23,7 +23,7 @@ const char *gauss=0; #include "lal_gauss.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define GaussT Gauss extern Device device; @@ -159,3 +159,4 @@ void GaussT::loop(const bool _eflag, const bool _vflag) { } template class Gauss; +} diff --git a/lib/gpu/lal_gayberne.cpp b/lib/gpu/lal_gayberne.cpp index ba15af672e..f17fc50f5f 100644 --- a/lib/gpu/lal_gayberne.cpp +++ b/lib/gpu/lal_gayberne.cpp @@ -26,7 +26,7 @@ const char *gayberne_lj=0; #include "lal_gayberne.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define GayBerneT GayBerne extern Device device; @@ -315,4 +315,4 @@ void GayBerneT::loop(const bool _eflag, const bool _vflag) { } template class GayBerne; - +} diff --git a/lib/gpu/lal_lj.cpp b/lib/gpu/lal_lj.cpp index 978b33e5d7..5bd015e364 100644 --- a/lib/gpu/lal_lj.cpp +++ b/lib/gpu/lal_lj.cpp @@ -23,7 +23,7 @@ const char *lj=0; #include "lal_lj.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJT LJ extern Device device; @@ -168,3 +168,4 @@ void LJT::loop(const bool _eflag, const bool _vflag) { } template class LJ; +} diff --git a/lib/gpu/lal_lj96.cpp b/lib/gpu/lal_lj96.cpp index 191f211ae4..6f74cd0f19 100644 --- a/lib/gpu/lal_lj96.cpp +++ b/lib/gpu/lal_lj96.cpp @@ -23,7 +23,7 @@ const char *lj96=0; #include "lal_lj96.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJ96T LJ96 extern Device device; @@ -152,3 +152,4 @@ void LJ96T::loop(const bool _eflag, const bool _vflag) { } template class LJ96; +} diff --git a/lib/gpu/lal_lj96.cu b/lib/gpu/lal_lj96.cu index 3bb7750022..8dd63ef920 100644 --- a/lib/gpu/lal_lj96.cu +++ b/lib/gpu/lal_lj96.cu @@ -174,6 +174,7 @@ __kernel void k_lj96_fast(const __global numtyp4 *restrict x_, numtyp r6inv = r2inv*r2inv*r2inv; numtyp r3inv = ucl_sqrt(r6inv); numtyp force = r2inv*r6inv*(lj1[mtype].x*r3inv-lj1[mtype].y); + force*=factor_lj; f.x+=delx*force; f.y+=dely*force; diff --git a/lib/gpu/lal_lj_class2_long.cpp b/lib/gpu/lal_lj_class2_long.cpp index 497e5989ad..24b07212ed 100644 --- a/lib/gpu/lal_lj_class2_long.cpp +++ b/lib/gpu/lal_lj_class2_long.cpp @@ -23,7 +23,7 @@ const char *lj_class2_long=0; #include "lal_lj_class2_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJClass2LongT LJClass2Long @@ -164,4 +164,4 @@ void LJClass2LongT::loop(const bool _eflag, const bool _vflag) { } template class LJClass2Long; - +} diff --git a/lib/gpu/lal_lj_coul.cpp b/lib/gpu/lal_lj_coul.cpp index a8255318bd..59ce9c5e61 100644 --- a/lib/gpu/lal_lj_coul.cpp +++ b/lib/gpu/lal_lj_coul.cpp @@ -23,7 +23,7 @@ const char *lj_coul=0; #include "lal_lj_coul.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJCoulT LJCoul extern Device device; @@ -164,3 +164,4 @@ void LJCoulT::loop(const bool _eflag, const bool _vflag) { } template class LJCoul; +} diff --git a/lib/gpu/lal_lj_coul_debye.cpp b/lib/gpu/lal_lj_coul_debye.cpp index 92167f314f..556a0a5cd3 100644 --- a/lib/gpu/lal_lj_coul_debye.cpp +++ b/lib/gpu/lal_lj_coul_debye.cpp @@ -23,7 +23,7 @@ const char *lj_coul_debye=0; #include "lal_lj_coul_debye.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJCoulDebyeT LJCoulDebye extern Device device; @@ -166,3 +166,4 @@ void LJCoulDebyeT::loop(const bool _eflag, const bool _vflag) { } template class LJCoulDebye; +} diff --git a/lib/gpu/lal_lj_coul_long.cpp b/lib/gpu/lal_lj_coul_long.cpp index 29d648bed2..66897a4aa7 100644 --- a/lib/gpu/lal_lj_coul_long.cpp +++ b/lib/gpu/lal_lj_coul_long.cpp @@ -23,7 +23,7 @@ const char *lj_coul_long=0; #include "lal_lj_coul_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJCoulLongT LJCoulLong extern Device device; @@ -181,3 +181,4 @@ void LJCoulLongT::loop(const bool _eflag, const bool _vflag) { } template class LJCoulLong; +} diff --git a/lib/gpu/lal_lj_coul_msm.cpp b/lib/gpu/lal_lj_coul_msm.cpp index 1358de9ee1..9a17d068ec 100644 --- a/lib/gpu/lal_lj_coul_msm.cpp +++ b/lib/gpu/lal_lj_coul_msm.cpp @@ -23,7 +23,7 @@ const char *lj_coul_msm=0; #include "lal_lj_coul_msm.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJCoulMSMT LJCoulMSM extern Device device; @@ -198,3 +198,4 @@ void LJCoulMSMT::loop(const bool _eflag, const bool _vflag) { } template class LJCoulMSM; +} diff --git a/lib/gpu/lal_lj_cubic.cpp b/lib/gpu/lal_lj_cubic.cpp index 21ea22845c..f8200ec037 100644 --- a/lib/gpu/lal_lj_cubic.cpp +++ b/lib/gpu/lal_lj_cubic.cpp @@ -23,7 +23,7 @@ const char *lj_cubic=0; #include "lal_lj_cubic.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJCubicT LJCubic extern Device device; @@ -157,3 +157,4 @@ void LJCubicT::loop(const bool _eflag, const bool _vflag) { } template class LJCubic; +} diff --git a/lib/gpu/lal_lj_dsf.cpp b/lib/gpu/lal_lj_dsf.cpp index 1efac3e821..b888f33f00 100644 --- a/lib/gpu/lal_lj_dsf.cpp +++ b/lib/gpu/lal_lj_dsf.cpp @@ -23,7 +23,7 @@ const char *lj_dsf=0; #include "lal_lj_dsf.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJDSFT LJDSF extern Device device; @@ -166,3 +166,4 @@ void LJDSFT::loop(const bool _eflag, const bool _vflag) { } template class LJDSF; +} diff --git a/lib/gpu/lal_lj_expand.cpp b/lib/gpu/lal_lj_expand.cpp index 34a4d71c0b..1c58cecfae 100644 --- a/lib/gpu/lal_lj_expand.cpp +++ b/lib/gpu/lal_lj_expand.cpp @@ -23,7 +23,7 @@ const char *lj_expand=0; #include "lal_lj_expand.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJExpandT LJExpand extern Device device; @@ -171,3 +171,4 @@ void LJExpandT::loop(const bool _eflag, const bool _vflag) { } template class LJExpand; +} diff --git a/lib/gpu/lal_lj_expand_coul_long.cpp b/lib/gpu/lal_lj_expand_coul_long.cpp index 32a4f8120e..3e5e00ef6a 100644 --- a/lib/gpu/lal_lj_expand_coul_long.cpp +++ b/lib/gpu/lal_lj_expand_coul_long.cpp @@ -23,7 +23,7 @@ const char *lj_expand_coul_long=0; #include "lal_lj_expand_coul_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJExpandCoulLongT LJExpandCoulLong extern Device device; @@ -181,3 +181,4 @@ void LJExpandCoulLongT::loop(const bool _eflag, const bool _vflag) { } template class LJExpandCoulLong; +} diff --git a/lib/gpu/lal_lj_gromacs.cpp b/lib/gpu/lal_lj_gromacs.cpp index 75f5a41917..0563151ddd 100644 --- a/lib/gpu/lal_lj_gromacs.cpp +++ b/lib/gpu/lal_lj_gromacs.cpp @@ -23,7 +23,7 @@ const char *lj_gromacs=0; #include "lal_lj_gromacs.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJGROMACST LJGROMACS extern Device device; @@ -162,3 +162,4 @@ void LJGROMACST::loop(const bool _eflag, const bool _vflag) { } template class LJGROMACS; +} diff --git a/lib/gpu/lal_lj_sdk.cpp b/lib/gpu/lal_lj_sdk.cpp index 618555e38a..c6a282576c 100644 --- a/lib/gpu/lal_lj_sdk.cpp +++ b/lib/gpu/lal_lj_sdk.cpp @@ -23,7 +23,7 @@ const char *lj_sdk=0; #include "lal_lj_sdk.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CGCMMT CGCMM extern Device device; @@ -152,3 +152,4 @@ void CGCMMT::loop(const bool _eflag, const bool _vflag) { } template class CGCMM; +} diff --git a/lib/gpu/lal_lj_sdk_long.cpp b/lib/gpu/lal_lj_sdk_long.cpp index 46caf6bd36..74dbfc40e3 100644 --- a/lib/gpu/lal_lj_sdk_long.cpp +++ b/lib/gpu/lal_lj_sdk_long.cpp @@ -23,7 +23,7 @@ const char *lj_sdk_long=0; #include "lal_lj_sdk_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define CGCMMLongT CGCMMLong extern Device device; @@ -164,3 +164,4 @@ void CGCMMLongT::loop(const bool _eflag, const bool _vflag) { } template class CGCMMLong; +} diff --git a/lib/gpu/lal_mie.cpp b/lib/gpu/lal_mie.cpp index 1510275047..394d1f8a2f 100644 --- a/lib/gpu/lal_mie.cpp +++ b/lib/gpu/lal_mie.cpp @@ -23,7 +23,7 @@ const char *mie=0; #include "lal_mie.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define MieT Mie extern Device device; @@ -150,3 +150,4 @@ void MieT::loop(const bool _eflag, const bool _vflag) { } template class Mie; +} diff --git a/lib/gpu/lal_morse.cpp b/lib/gpu/lal_morse.cpp index cbdf928863..09da65d252 100644 --- a/lib/gpu/lal_morse.cpp +++ b/lib/gpu/lal_morse.cpp @@ -23,7 +23,7 @@ const char *morse=0; #include "lal_morse.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define MorseT Morse extern Device device; @@ -150,4 +150,4 @@ void MorseT::loop(const bool _eflag, const bool _vflag) { } template class Morse; - +} diff --git a/lib/gpu/lal_pppm.cpp b/lib/gpu/lal_pppm.cpp index fefa1172ab..8b5012f312 100644 --- a/lib/gpu/lal_pppm.cpp +++ b/lib/gpu/lal_pppm.cpp @@ -25,7 +25,7 @@ const char *pppm_d=0; #include "lal_pppm.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define PPPMT PPPM extern Device global_device; @@ -402,3 +402,4 @@ void PPPMT::compile_kernels(UCL_Device &dev) { template class PPPM; template class PPPM; +} diff --git a/lib/gpu/lal_re_squared.cpp b/lib/gpu/lal_re_squared.cpp index 9513f5a633..81dc3b13a4 100644 --- a/lib/gpu/lal_re_squared.cpp +++ b/lib/gpu/lal_re_squared.cpp @@ -26,7 +26,7 @@ const char *re_squared_lj=0; #include "lal_re_squared.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define RESquaredT RESquared extern Device device; @@ -315,4 +315,4 @@ void RESquaredT::loop(const bool _eflag, const bool _vflag) { } template class RESquared; - +} diff --git a/lib/gpu/lal_soft.cpp b/lib/gpu/lal_soft.cpp index 727b112ea5..8e944fa0a5 100644 --- a/lib/gpu/lal_soft.cpp +++ b/lib/gpu/lal_soft.cpp @@ -23,7 +23,7 @@ const char *soft=0; #include "lal_soft.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define SoftT Soft extern Device device; @@ -158,3 +158,4 @@ void SoftT::loop(const bool _eflag, const bool _vflag) { } template class Soft; +} diff --git a/lib/gpu/lal_sw.cpp b/lib/gpu/lal_sw.cpp index 46b6382a60..5c7bd45c76 100644 --- a/lib/gpu/lal_sw.cpp +++ b/lib/gpu/lal_sw.cpp @@ -23,7 +23,7 @@ const char *sw=0; #include "lal_sw.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define SWT SW extern Device device; @@ -262,4 +262,4 @@ void SWT::loop(const bool _eflag, const bool _vflag, const int evatom) { } template class SW; - +} diff --git a/lib/gpu/lal_table.cpp b/lib/gpu/lal_table.cpp index 0de59c84b2..d07b2716e4 100644 --- a/lib/gpu/lal_table.cpp +++ b/lib/gpu/lal_table.cpp @@ -23,7 +23,7 @@ const char *table=0; #include "lal_table.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define TableT Table #define LOOKUP 0 @@ -337,3 +337,4 @@ void TableT::loop(const bool _eflag, const bool _vflag) { } template class Table; +} diff --git a/lib/gpu/lal_tersoff.cpp b/lib/gpu/lal_tersoff.cpp index ef55b98a2d..27143acb0c 100644 --- a/lib/gpu/lal_tersoff.cpp +++ b/lib/gpu/lal_tersoff.cpp @@ -23,7 +23,7 @@ const char *tersoff=0; #include "lal_tersoff.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define TersoffT Tersoff extern Device device; @@ -329,4 +329,4 @@ void TersoffT::loop(const bool _eflag, const bool _vflag, const int evatom) { } template class Tersoff; - +} diff --git a/lib/gpu/lal_tersoff.cu b/lib/gpu/lal_tersoff.cu index 836f05660d..2e29ca721b 100644 --- a/lib/gpu/lal_tersoff.cu +++ b/lib/gpu/lal_tersoff.cu @@ -308,8 +308,6 @@ __kernel void k_tersoff_zeta(const __global numtyp4 *restrict x_, delr1.z = jx.z-ix.z; numtyp rsq1 = delr1.x*delr1.x+delr1.y*delr1.y+delr1.z*delr1.z; -// if (rsq1 > cutsq[ijparam]) continue; - // compute zeta_ij z = (acctyp)0; @@ -355,13 +353,9 @@ __kernel void k_tersoff_zeta(const __global numtyp4 *restrict x_, rsq1, rsq2, delr1, delr2); } - //int jj = (nbor_j-offset_j-2*nbor_pitch)/n_stride; - //int idx = jj*n_stride + i*t_per_atom + offset_j; - //idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor int idx = nbor_j; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// i, nbor_j, offset_j, idx); acc_zeta(z, tid, t_per_atom, offset_k); numtyp4 ts1_ijparam = ts1[ijparam]; //fetch4(ts1_ijparam,ijparam,ts1_tex); @@ -585,14 +579,9 @@ __kernel void k_tersoff_three_center(const __global numtyp4 *restrict x_, numtyp r1inv = ucl_rsqrt(rsq1); // look up for zeta_ij - - //int jj = (nbor_j-offset_j-2*nbor_pitch) / n_stride; - //int idx = jj*n_stride + i*t_per_atom + offset_j; - //idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor int idx = nbor_j; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// i, nbor_j, offset_j, idx); acctyp4 zeta_ij = zetaij[idx]; // fetch(zeta_ij,idx,zeta_tex); numtyp force = zeta_ij.x*tpainv; numtyp prefactor = zeta_ij.y; @@ -823,13 +812,9 @@ __kernel void k_tersoff_three_end(const __global numtyp4 *restrict x_, offset_kf = red_acc[2*m+1]; } - //int iix = (ijnum - offset_kf - 2*nbor_pitch) / n_stride; - //int idx = iix*n_stride + j*t_per_atom + offset_kf; - //idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor int idx = ijnum; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, ijnum, offset_kf, idx); acctyp4 zeta_ji = zetaij[idx]; // fetch(zeta_ji,idx,zeta_tex); numtyp force = zeta_ji.x*tpainv; numtyp prefactor_ji = zeta_ji.y; @@ -891,13 +876,10 @@ __kernel void k_tersoff_three_end(const __global numtyp4 *restrict x_, f.y += fi[1]; f.z += fi[2]; - //int kk = (nbor_k - offset_k - 2*nbor_pitch) / n_stride; - //int idx = kk*n_stride + j*t_per_atom + offset_k; - //idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor int idx = nbor_k; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, nbor_k, offset_k, idx); + acctyp4 zeta_jk = zetaij[idx]; // fetch(zeta_jk,idx,zeta_tex); numtyp prefactor_jk = zeta_jk.y; int jkiparam=elem2param[jtype*nelements*nelements+ktype*nelements+itype]; @@ -1068,13 +1050,9 @@ __kernel void k_tersoff_three_end_vatom(const __global numtyp4 *restrict x_, offset_kf = red_acc[2*m+1]; } - //int iix = (ijnum - offset_kf - 2*nbor_pitch) / n_stride; - //int idx = iix*n_stride + j*t_per_atom + offset_kf; - //idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor int idx = ijnum; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, ijnum, offset_kf, idx); acctyp4 zeta_ji = zetaij[idx]; // fetch(zeta_ji,idx,zeta_tex); numtyp force = zeta_ji.x*tpainv; numtyp prefactor_ji = zeta_ji.y; @@ -1143,13 +1121,9 @@ __kernel void k_tersoff_three_end_vatom(const __global numtyp4 *restrict x_, virial[4] += TWOTHIRD*(mdelr1[0]*fj[2] + delr2[0]*fk[2]); virial[5] += TWOTHIRD*(mdelr1[1]*fj[2] + delr2[1]*fk[2]); - //int kk = (nbor_k - offset_k - 2*nbor_pitch) / n_stride; - //int idx = kk*n_stride + j*t_per_atom + offset_k; - //idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor int idx = nbor_k; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, nbor_k, offset_k, idx); acctyp4 zeta_jk = zetaij[idx]; // fetch(zeta_jk,idx,zeta_tex); numtyp prefactor_jk = zeta_jk.y; diff --git a/lib/gpu/lal_tersoff_mod.cpp b/lib/gpu/lal_tersoff_mod.cpp index 3cbb488cab..182859bdd4 100644 --- a/lib/gpu/lal_tersoff_mod.cpp +++ b/lib/gpu/lal_tersoff_mod.cpp @@ -23,7 +23,7 @@ const char *tersoff_mod=0; #include "lal_tersoff_mod.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define TersoffMT TersoffMod extern Device device; @@ -329,4 +329,4 @@ void TersoffMT::loop(const bool _eflag, const bool _vflag, const int evatom) { } template class TersoffMod; - +} diff --git a/lib/gpu/lal_tersoff_mod.cu b/lib/gpu/lal_tersoff_mod.cu index dfb94c4145..c85f5e08ca 100644 --- a/lib/gpu/lal_tersoff_mod.cu +++ b/lib/gpu/lal_tersoff_mod.cu @@ -356,13 +356,9 @@ __kernel void k_tersoff_mod_zeta(const __global numtyp4 *restrict x_, ijkparam_c5, rsq1, rsq2, delr1, delr2); } - //int jj = (nbor_j-offset_j-2*nbor_pitch)/n_stride; - //int idx = jj*n_stride + i*t_per_atom + offset_j; - //idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor int idx = nbor_j; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// i, nbor_j, offset_j, idx); acc_zeta(z, tid, t_per_atom, offset_k); numtyp4 ts1_ijparam = ts1[ijparam]; //fetch4(ts1_ijparam,ijparam,ts1_tex); @@ -587,14 +583,9 @@ __kernel void k_tersoff_mod_three_center(const __global numtyp4 *restrict x_, numtyp r1inv = ucl_rsqrt(rsq1); // look up for zeta_ij - - //int jj = (nbor_j-offset_j-2*nbor_pitch) / n_stride; - //int idx = jj*n_stride + i*t_per_atom + offset_j; - //idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor int idx = nbor_j; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// i, nbor_j, offset_j, idx); acctyp4 zeta_ij = zetaij[idx]; // fetch(zeta_ij,idx,zeta_tex); numtyp force = zeta_ij.x*tpainv; numtyp prefactor = zeta_ij.y; @@ -831,13 +822,9 @@ __kernel void k_tersoff_mod_three_end(const __global numtyp4 *restrict x_, offset_kf = red_acc[2*m+1]; } - //int iix = (ijnum - offset_kf - 2*nbor_pitch) / n_stride; - //int idx = iix*n_stride + j*t_per_atom + offset_kf; - //idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor int idx = ijnum; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, ijnum, offset_kf, idx); acctyp4 zeta_ji = zetaij[idx]; // fetch(zeta_ji,idx,zeta_tex); numtyp force = zeta_ji.x*tpainv; numtyp prefactor_ji = zeta_ji.y; @@ -902,13 +889,9 @@ __kernel void k_tersoff_mod_three_end(const __global numtyp4 *restrict x_, f.y += fi[1]; f.z += fi[2]; - //int kk = (nbor_k - offset_k - 2*nbor_pitch) / n_stride; - //int idx = kk*n_stride + j*t_per_atom + offset_k; - //idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor int idx = nbor_k; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, nbor_k, offset_k, idx); acctyp4 zeta_jk = zetaij[idx]; // fetch(zeta_jk,idx,zeta_tex); numtyp prefactor_jk = zeta_jk.y; int jkiparam=elem2param[jtype*nelements*nelements+ktype*nelements+itype]; @@ -1085,13 +1068,9 @@ __kernel void k_tersoff_mod_three_end_vatom(const __global numtyp4 *restrict x_, offset_kf = red_acc[2*m+1]; } - //int iix = (ijnum - offset_kf - 2*nbor_pitch) / n_stride; - //int idx = iix*n_stride + j*t_per_atom + offset_kf; - //idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor int idx = ijnum; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, ijnum, offset_kf, idx); acctyp4 zeta_ji = zetaij[idx]; // fetch(zeta_ji,idx,zeta_tex); numtyp force = zeta_ji.x*tpainv; numtyp prefactor_ji = zeta_ji.y; @@ -1163,13 +1142,9 @@ __kernel void k_tersoff_mod_three_end_vatom(const __global numtyp4 *restrict x_, virial[4] += TWOTHIRD*(mdelr1[0]*fj[2] + delr2[0]*fk[2]); virial[5] += TWOTHIRD*(mdelr1[1]*fj[2] + delr2[1]*fk[2]); - //int kk = (nbor_k - offset_k - 2*nbor_pitch) / n_stride; - //int idx = kk*n_stride + j*t_per_atom + offset_k; - //idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor int idx = nbor_k; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, nbor_k, offset_k, idx); acctyp4 zeta_jk = zetaij[idx]; // fetch(zeta_jk,idx,zeta_tex); numtyp prefactor_jk = zeta_jk.y; diff --git a/lib/gpu/lal_tersoff_zbl.cpp b/lib/gpu/lal_tersoff_zbl.cpp index ebf67285ed..92db59679e 100644 --- a/lib/gpu/lal_tersoff_zbl.cpp +++ b/lib/gpu/lal_tersoff_zbl.cpp @@ -23,7 +23,7 @@ const char *tersoff_zbl=0; #include "lal_tersoff_zbl.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define TersoffZT TersoffZBL extern Device device; @@ -355,4 +355,4 @@ void TersoffZT::loop(const bool _eflag, const bool _vflag, const int evatom) { } template class TersoffZBL; - +} diff --git a/lib/gpu/lal_tersoff_zbl.cu b/lib/gpu/lal_tersoff_zbl.cu index 73ff51c704..b574a529c0 100644 --- a/lib/gpu/lal_tersoff_zbl.cu +++ b/lib/gpu/lal_tersoff_zbl.cu @@ -359,13 +359,9 @@ __kernel void k_tersoff_zbl_zeta(const __global numtyp4 *restrict x_, rsq1, rsq2, delr1, delr2); } - //int jj = (nbor_j-offset_j-2*nbor_pitch)/n_stride; - //int idx = jj*n_stride + i*t_per_atom + offset_j; - //idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor int idx = nbor_j; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// i, nbor_j, offset_j, idx); acc_zeta(z, tid, t_per_atom, offset_k); numtyp4 ts1_ijparam = ts1[ijparam]; //fetch4(ts1_ijparam,ijparam,ts1_tex); @@ -603,14 +599,9 @@ __kernel void k_tersoff_zbl_three_center(const __global numtyp4 *restrict x_, numtyp r1inv = ucl_rsqrt(rsq1); // look up for zeta_ij - - //int jj = (nbor_j-offset_j-2*nbor_pitch) / n_stride; - //int idx = jj*n_stride + i*t_per_atom + offset_j; - //idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_j in dev_short_nbor int idx = nbor_j; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// i, nbor_j, offset_j, idx); acctyp4 zeta_ij = zetaij[idx]; // fetch(zeta_ij,idx,zeta_tex); numtyp force = zeta_ij.x*tpainv; numtyp prefactor = zeta_ij.y; @@ -841,13 +832,9 @@ __kernel void k_tersoff_zbl_three_end(const __global numtyp4 *restrict x_, offset_kf = red_acc[2*m+1]; } - //int iix = (ijnum - offset_kf - 2*nbor_pitch) / n_stride; - //int idx = iix*n_stride + j*t_per_atom + offset_kf; - //idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor int idx = ijnum; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, ijnum, offset_kf, idx); acctyp4 zeta_ji = zetaij[idx]; // fetch(zeta_ji,idx,zeta_tex); numtyp force = zeta_ji.x*tpainv; numtyp prefactor_ji = zeta_ji.y; @@ -909,13 +896,9 @@ __kernel void k_tersoff_zbl_three_end(const __global numtyp4 *restrict x_, f.y += fi[1]; f.z += fi[2]; - //int kk = (nbor_k - offset_k - 2*nbor_pitch) / n_stride; - //int idx = kk*n_stride + j*t_per_atom + offset_k; - //idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor int idx = nbor_k; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, nbor_k, offset_k, idx); acctyp4 zeta_jk = zetaij[idx]; // fetch(zeta_jk,idx,zeta_tex); numtyp prefactor_jk = zeta_jk.y; int jkiparam=elem2param[jtype*nelements*nelements+ktype*nelements+itype]; @@ -1086,13 +1069,9 @@ __kernel void k_tersoff_zbl_three_end_vatom(const __global numtyp4 *restrict x_, offset_kf = red_acc[2*m+1]; } - //int iix = (ijnum - offset_kf - 2*nbor_pitch) / n_stride; - //int idx = iix*n_stride + j*t_per_atom + offset_kf; - //idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to ijnum in dev_short_nbor int idx = ijnum; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, ijnum, offset_kf, idx); acctyp4 zeta_ji = zetaij[idx]; // fetch(zeta_ji,idx,zeta_tex); numtyp force = zeta_ji.x*tpainv; numtyp prefactor_ji = zeta_ji.y; @@ -1161,13 +1140,9 @@ __kernel void k_tersoff_zbl_three_end_vatom(const __global numtyp4 *restrict x_, virial[4] += TWOTHIRD*(mdelr1[0]*fj[2] + delr2[0]*fk[2]); virial[5] += TWOTHIRD*(mdelr1[1]*fj[2] + delr2[1]*fk[2]); - //int kk = (nbor_k - offset_k - 2*nbor_pitch) / n_stride; - //int idx = kk*n_stride + j*t_per_atom + offset_k; - //idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor + // idx to zetaij is shifted by n_stride relative to nbor_k in dev_short_nbor int idx = nbor_k; if (dev_packed==dev_nbor) idx -= n_stride; -// zeta_idx(dev_nbor,dev_packed, nbor_pitch, n_stride, t_per_atom, -// j, nbor_k, offset_k, idx); acctyp4 zeta_jk = zetaij[idx]; // fetch(zeta_jk,idx,zeta_tex); numtyp prefactor_jk = zeta_jk.y; diff --git a/lib/gpu/lal_ufm.cpp b/lib/gpu/lal_ufm.cpp index c7aa2cca39..9b7d42dec9 100644 --- a/lib/gpu/lal_ufm.cpp +++ b/lib/gpu/lal_ufm.cpp @@ -25,7 +25,7 @@ const char *ufm=0; #include "lal_ufm.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define UFMT UFM extern Device device; @@ -170,3 +170,4 @@ void UFMT::loop(const bool _eflag, const bool _vflag) { } template class UFM; +} diff --git a/lib/gpu/lal_vashishta.cpp b/lib/gpu/lal_vashishta.cpp index 5a01a9bd46..350ae8e8fd 100644 --- a/lib/gpu/lal_vashishta.cpp +++ b/lib/gpu/lal_vashishta.cpp @@ -23,7 +23,7 @@ const char *vashishta=0; #include "lal_vashishta.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define VashishtaT Vashishta extern Device device; @@ -295,4 +295,4 @@ void VashishtaT::loop(const bool _eflag, const bool _vflag, const int evatom) { } template class Vashishta; - +} diff --git a/lib/gpu/lal_yukawa.cpp b/lib/gpu/lal_yukawa.cpp index a316d195ac..453139e537 100644 --- a/lib/gpu/lal_yukawa.cpp +++ b/lib/gpu/lal_yukawa.cpp @@ -23,7 +23,7 @@ const char *yukawa=0; #include "lal_yukawa.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define YukawaT Yukawa extern Device device; @@ -147,3 +147,4 @@ void YukawaT::loop(const bool _eflag, const bool _vflag) { } template class Yukawa; +} diff --git a/lib/gpu/lal_yukawa_colloid.cpp b/lib/gpu/lal_yukawa_colloid.cpp index af29938a68..e71e962ffd 100644 --- a/lib/gpu/lal_yukawa_colloid.cpp +++ b/lib/gpu/lal_yukawa_colloid.cpp @@ -23,7 +23,7 @@ const char *yukawa_colloid=0; #include "lal_yukawa_colloid.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define YukawaColloidT YukawaColloid extern Device device; @@ -289,3 +289,4 @@ void YukawaColloidT::loop(const bool _eflag, const bool _vflag) { } template class YukawaColloid; +} diff --git a/lib/gpu/lal_yukawa_colloid.cu b/lib/gpu/lal_yukawa_colloid.cu index 48ab47bc94..a3cbbbc11c 100644 --- a/lib/gpu/lal_yukawa_colloid.cu +++ b/lib/gpu/lal_yukawa_colloid.cu @@ -89,10 +89,10 @@ __kernel void k_yukawa_colloid(const __global numtyp4 *restrict x_, if (rsq -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define ZBLT ZBL extern Device device; @@ -157,3 +157,4 @@ void ZBLT::loop(const bool _eflag, const bool _vflag) { } template class ZBL; +} diff --git a/lib/gpu/lal_zbl.cu b/lib/gpu/lal_zbl.cu index b7f379c833..33c850e134 100644 --- a/lib/gpu/lal_zbl.cu +++ b/lib/gpu/lal_zbl.cu @@ -129,16 +129,13 @@ __kernel void k_zbl(const __global numtyp4 *restrict x_, int mtype=itype*lj_types+jtype; if (rsqcut_innersq) { - t = r - cut_inner; - force = t*t * (coeff1[mtype].x + coeff1[mtype].y*t); - } - + if (rsq>cut_innersq) { + t = r - cut_inner; + force = t*t * (coeff1[mtype].x + coeff1[mtype].y*t); + } force *= (numtyp)-1.0*ucl_recip(r); f.x+=delx*force; @@ -148,11 +145,10 @@ __kernel void k_zbl(const __global numtyp4 *restrict x_, if (eflag>0) { numtyp e=e_zbl(r, coeff2[mtype].x, coeff2[mtype].y, coeff2[mtype].z, coeff2[mtype].w, coeff1[mtype].z); - e += coeff3[mtype].z; - if (rsq > cut_innersq) { - e += t*t*t * (coeff3[mtype].x + coeff3[mtype].y*t); - } - + e += coeff3[mtype].z; + if (rsq > cut_innersq) { + e += t*t*t * (coeff3[mtype].x + coeff3[mtype].y*t); + } energy+=e; } if (vflag>0) { @@ -232,15 +228,13 @@ __kernel void k_zbl_fast(const __global numtyp4 *restrict x_, if (rsqcut_innersq) { - t = r - cut_inner; - force += t*t * (coeff1[mtype].x + coeff1[mtype].y*t); - } + if (rsq>cut_innersq) { + t = r - cut_inner; + force += t*t * (coeff1[mtype].x + coeff1[mtype].y*t); + } force *= (numtyp)-1.0*ucl_recip(r); @@ -251,11 +245,10 @@ __kernel void k_zbl_fast(const __global numtyp4 *restrict x_, if (eflag>0) { numtyp e=e_zbl(r, coeff2[mtype].x, coeff2[mtype].y, coeff2[mtype].z, coeff2[mtype].w, coeff1[mtype].z); - e += coeff3[mtype].z; - if (rsq > cut_innersq) { - e += t*t*t * (coeff3[mtype].x + coeff3[mtype].y*t); - } - + e += coeff3[mtype].z; + if (rsq > cut_innersq) { + e += t*t*t * (coeff3[mtype].x + coeff3[mtype].y*t); + } energy+=e; } if (vflag>0) { diff --git a/lib/kokkos/CHANGELOG.md b/lib/kokkos/CHANGELOG.md index 9d503663ae..8d196e2c35 100644 --- a/lib/kokkos/CHANGELOG.md +++ b/lib/kokkos/CHANGELOG.md @@ -1,5 +1,39 @@ # Change Log +## [2.9.00](https://github.com/kokkos/kokkos/tree/2.9.00) (2019-06-24) +[Full Changelog](https://github.com/kokkos/kokkos/compare/2.8.00...2.9.00) + +**Implemented enhancements:** + +- Capability: CUDA Streams [\#1723](https://github.com/kokkos/kokkos/issues/1723) +- Capability: CUDA Stream support for parallel\_reduce [\#2061](https://github.com/kokkos/kokkos/issues/2061) +- Capability: Feature Request: TeamVectorRange [\#713](https://github.com/kokkos/kokkos/issues/713) +- Capability: Adding HPX backend [\#2080](https://github.com/kokkos/kokkos/issues/2080) +- Capability: TaskScheduler to have multiple queues [\#565](https://github.com/kokkos/kokkos/issues/565) +- Capability: Support for additional reductions in ScatterView [\#1674](https://github.com/kokkos/kokkos/issues/1674) +- Capability: Request: deep\_copy within parallel regions [\#689](https://github.com/kokkos/kokkos/issues/689) +- Capability: Feature Request: `create\_mirror\_view\_without\_initializing` [\#1765](https://github.com/kokkos/kokkos/issues/1765) +- View: Use SFINAE to restrict possible View type conversions [\#2127](https://github.com/kokkos/kokkos/issues/2127) +- Deprecation: Deprecate ExecutionSpace::fence\(\) as static function and make it non-static [\#2140](https://github.com/kokkos/kokkos/issues/2140) +- Deprecation: Deprecate LayoutTileLeft [\#2122](https://github.com/kokkos/kokkos/issues/2122) +- Macros: KOKKOS\_RESTRICT defined for non-Intel compilers [\#2038](https://github.com/kokkos/kokkos/issues/2038) + +**Fixed bugs:** + +- Cuda: TeamThreadRange loop count on device is passed by reference to host static constexpr [\#1733](https://github.com/kokkos/kokkos/issues/1733) +- Cuda: Build error with relocatable device code with CUDA 10.1 GCC 7.3 [\#2134](https://github.com/kokkos/kokkos/issues/2134) +- Cuda: cudaFuncSetCacheConfig is setting CachePreferShared too often [\#2066](https://github.com/kokkos/kokkos/issues/2066) +- Cuda: TeamPolicy doesn't throw then created with non-viable vector length and also doesn't backscale to viable one [\#2020](https://github.com/kokkos/kokkos/issues/2020) +- Cuda: cudaMemcpy error for large league sizes on V100 [\#1991](https://github.com/kokkos/kokkos/issues/1991) +- Cuda: illegal warp sync in parallel\_reduce by functor on Turing 75 [\#1958](https://github.com/kokkos/kokkos/issues/1958) +- TeamThreadRange: Inconsistent results from TeamThreadRange reduction [\#1905](https://github.com/kokkos/kokkos/issues/1905) +- Atomics: atomic\_fetch\_oper & atomic\_oper\_fetch don't build for complex\ [\#1964](https://github.com/kokkos/kokkos/issues/1964) +- Views: Kokkos randomread Views leak memory [\#2155](https://github.com/kokkos/kokkos/issues/2155) +- ScatterView: LayoutLeft overload currently non-functional [\#2165](https://github.com/kokkos/kokkos/issues/2165) +- KNL: With intel 17.2.174 illegal instruction in random number test [\#2078](https://github.com/kokkos/kokkos/issues/2078) +- Bitset: Enable copy constructor on device [\#2094](https://github.com/kokkos/kokkos/issues/2094) +- Examples: do not compile due to template deduction error \(multi\_fem\) [\#1928](https://github.com/kokkos/kokkos/issues/1928) + ## [2.8.00](https://github.com/kokkos/kokkos/tree/2.8.00) (2019-02-05) [Full Changelog](https://github.com/kokkos/kokkos/compare/2.7.24...2.8.00) diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index a90e86b9f8..e9ad57f0ae 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -23,7 +23,7 @@ KOKKOS_DEBUG ?= "no" KOKKOS_USE_TPLS ?= "" # Options: c++11,c++14,c++1y,c++17,c++1z,c++2a KOKKOS_CXX_STANDARD ?= "c++11" -# Options: aggressive_vectorization,disable_profiling,disable_deprecated_code,enable_large_mem_tests +# Options: aggressive_vectorization,disable_profiling,enable_deprecated_code,disable_deprecated_code,enable_large_mem_tests KOKKOS_OPTIONS ?= "" # Option for setting ETI path KOKKOS_ETI_PATH ?= ${KOKKOS_PATH}/core/src/eti @@ -33,11 +33,19 @@ KOKKOS_CMAKE ?= "no" # Options: force_uvm,use_ldg,rdc,enable_lambda KOKKOS_CUDA_OPTIONS ?= "enable_lambda" +# Default settings specific options. +# Options: enable_async_dispatch +KOKKOS_HPX_OPTIONS ?= "" + # Return a 1 if a string contains a substring and 0 if not # Note the search string should be without '"' # Example: $(call kokkos_has_string,"hwloc,librt",hwloc) # Will return a 1 kokkos_has_string=$(if $(findstring $2,$1),1,0) +# Returns 1 if the path exists, 0 otherwise +# Example: $(call kokkos_path_exists,/path/to/file) +# Will return a 1 if /path/to/file exists +kokkos_path_exists=$(if $(wildcard $1),1,0) # Check for general settings. KOKKOS_INTERNAL_ENABLE_DEBUG := $(call kokkos_has_string,$(KOKKOS_DEBUG),yes) @@ -58,6 +66,7 @@ KOKKOS_INTERNAL_ENABLE_COMPILER_WARNINGS := $(call kokkos_has_string,$(KOKKOS_OP KOKKOS_INTERNAL_OPT_RANGE_AGGRESSIVE_VECTORIZATION := $(call kokkos_has_string,$(KOKKOS_OPTIONS),aggressive_vectorization) KOKKOS_INTERNAL_DISABLE_PROFILING := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_profiling) KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_deprecated_code) +KOKKOS_INTERNAL_ENABLE_DEPRECATED_CODE := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_deprecated_code) KOKKOS_INTERNAL_DISABLE_DUALVIEW_MODIFY_CHECK := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_dualview_modify_check) KOKKOS_INTERNAL_ENABLE_PROFILING_LOAD_PRINT := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_profile_load_print) KOKKOS_INTERNAL_ENABLE_LARGE_MEM_TESTS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_large_mem_tests) @@ -65,6 +74,7 @@ KOKKOS_INTERNAL_CUDA_USE_LDG := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS), KOKKOS_INTERNAL_CUDA_USE_UVM := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),force_uvm) KOKKOS_INTERNAL_CUDA_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),rdc) KOKKOS_INTERNAL_CUDA_USE_LAMBDA := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_lambda) +KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH := $(call kokkos_has_string,$(KOKKOS_HPX_OPTIONS),enable_async_dispatch) KOKKOS_INTERNAL_ENABLE_ETI := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_eti) @@ -72,12 +82,15 @@ KOKKOS_INTERNAL_ENABLE_ETI := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_ KOKKOS_INTERNAL_USE_OPENMP := $(call kokkos_has_string,$(subst OpenMPTarget,,$(KOKKOS_DEVICES)),OpenMP) KOKKOS_INTERNAL_USE_PTHREADS := $(call kokkos_has_string,$(KOKKOS_DEVICES),Pthread) KOKKOS_INTERNAL_USE_QTHREADS := $(call kokkos_has_string,$(KOKKOS_DEVICES),Qthreads) +KOKKOS_INTERNAL_USE_HPX := $(call kokkos_has_string,$(KOKKOS_DEVICES),HPX) KOKKOS_INTERNAL_USE_SERIAL := $(call kokkos_has_string,$(KOKKOS_DEVICES),Serial) ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 0) ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 0) ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 0) - KOKKOS_INTERNAL_USE_SERIAL := 1 + ifeq ($(KOKKOS_INTERNAL_USE_HPX), 0) + KOKKOS_INTERNAL_USE_SERIAL := 1 + endif endif endif endif @@ -112,7 +125,7 @@ KOKKOS_INTERNAL_COMPILER_XL := $(strip $(shell $(CXX) -qversion 2 KOKKOS_INTERNAL_COMPILER_CRAY := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep "CC-" | wc -l)) KOKKOS_INTERNAL_COMPILER_NVCC := $(strip $(shell export OMPI_CXX=$(OMPI_CXX); export MPICH_CXX=$(MPICH_CXX); $(CXX) --version 2>&1 | grep nvcc | wc -l)) KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),clang) -KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),apple-darwin) +KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),Apple LLVM) KOKKOS_INTERNAL_COMPILER_HCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),HCC) # Check Host Compiler if using NVCC through nvcc_wrapper @@ -283,9 +296,9 @@ KOKKOS_INTERNAL_USE_ARCH_NVIDIA := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_KEPLE + $(KOKKOS_INTERNAL_USE_ARCH_KEPLER37) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL61) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL60) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ - + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ + + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53)) @@ -300,19 +313,19 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 0) + $(KOKKOS_INTERNAL_USE_ARCH_KEPLER37) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL61) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL60) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ - + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ + + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53)) endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 1) - ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) - ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) - KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc) - CUDA_PATH ?= $(KOKKOS_INTERNAL_NVCC_PATH:/bin/nvcc=) + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc) + CUDA_PATH ?= $(KOKKOS_INTERNAL_NVCC_PATH:/bin/nvcc=) + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) KOKKOS_INTERNAL_OPENMPTARGET_FLAG := $(KOKKOS_INTERNAL_OPENMPTARGET_FLAG) --cuda-path=$(CUDA_PATH) endif endif @@ -441,6 +454,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_QTHREADS") endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_HPX") +endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_SERIAL") endif @@ -559,9 +576,15 @@ ifeq ($(KOKKOS_INTERNAL_DISABLE_PROFILING), 0) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_PROFILING") endif -ifeq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 0) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_DEPRECATED_CODE") +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 0) + ifeq ($(KOKKOS_INTERNAL_ENABLE_DEPRECATED_CODE), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_DEPRECATED_CODE") + endif + ifeq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 0) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_DEPRECATED_CODE") + endif endif + ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_ETI") endif @@ -593,8 +616,13 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) ifeq ($(KOKKOS_INTERNAL_CUDA_USE_RELOC), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE") - KOKKOS_CXXFLAGS += --relocatable-device-code=true - KOKKOS_LDFLAGS += --relocatable-device-code=true + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + KOKKOS_CXXFLAGS += -fcuda-rdc + KOKKOS_LDFLAGS += -fcuda-rdc + else + KOKKOS_CXXFLAGS += --relocatable-device-code=true + KOKKOS_LDFLAGS += --relocatable-device-code=true + endif endif ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) @@ -625,6 +653,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) endif endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + ifeq ($(KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_HPX_ASYNC_DISPATCH") + endif +endif + # Add Architecture flags. ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ARMV80), 1) @@ -908,7 +942,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) KOKKOS_INTERNAL_CUDA_ARCH_FLAG=--cuda-gpu-arch KOKKOS_CXXFLAGS += -x cuda else - $(error Makefile.kokkos: CUDA is enabled but the compiler is neither NVCC nor Clang) + $(error Makefile.kokkos: CUDA is enabled but the compiler is neither NVCC nor Clang (got version string $(KOKKOS_CXX_VERSION)) ) endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER30), 1) @@ -1058,10 +1092,18 @@ endif ifneq ($(KOKKOS_CMAKE), yes) KOKKOS_CXXFLAGS += -I$(CUDA_PATH)/include endif - KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64 - KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib64 + ifeq ($(call kokkos_path_exists,$(CUDA_PATH)/lib64), 1) + KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64 + KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib64 + KOKKOS_TPL_LIBRARY_DIRS += $(CUDA_PATH)/lib64 + else ifeq ($(call kokkos_path_exists,$(CUDA_PATH)/lib), 1) + KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib + KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib + KOKKOS_TPL_LIBRARY_DIRS += $(CUDA_PATH)/lib + else + $(error Can't find CUDA library directory: no lib64 or lib directory in $(CUDA_PATH)) + endif KOKKOS_TPL_INCLUDE_DIRS += $(CUDA_PATH)/include - KOKKOS_TPL_LIBRARY_DIRS += $(CUDA_PATH)/lib64 ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) KOKKOS_CXXFLAGS += --cuda-path=$(CUDA_PATH) endif @@ -1124,6 +1166,33 @@ ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) KOKKOS_TPL_LIBRARY_NAMES += qthread endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.cpp) + KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.hpp) + ifneq ($(HPX_PATH),) + ifeq ($(KOKKOS_INTERNAL_ENABLE_DEBUG), 1) + KOKKOS_CXXFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --cflags hpx_application_debug) + KOKKOS_CXXLDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application_debug) + KOKKOS_LDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application_debug) + else + KOKKOS_CXXFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --cflags hpx_application) + KOKKOS_CXXLDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application) + KOKKOS_LDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application) + endif + else + ifeq ($(KOKKOS_INTERNAL_ENABLE_DEBUG), 1) + KOKKOS_CXXFLAGS += $(shell pkg-config --cflags hpx_application_debug) + KOKKOS_CXXLDFLAGS += $(shell pkg-config --libs hpx_application_debug) + KOKKOS_LDFLAGS += $(shell pkg-config --libs hpx_application_debug) + else + KOKKOS_CXXFLAGS += $(shell pkg-config --cflags hpx_application) + KOKKOS_CXXLDFLAGS += $(shell pkg-config --libs hpx_application) + KOKKOS_LDFLAGS += $(shell pkg-config --libs hpx_application) + endif + endif + KOKKOS_TPL_LIBRARY_NAMES += hpx +endif + # Explicitly set the GCC Toolchain for Clang. ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) KOKKOS_INTERNAL_GCC_PATH = $(shell which g++) diff --git a/lib/kokkos/Makefile.targets b/lib/kokkos/Makefile.targets index 44da1e082a..e7d5a3c907 100644 --- a/lib/kokkos/Makefile.targets +++ b/lib/kokkos/Makefile.targets @@ -30,6 +30,8 @@ Kokkos_SharedAlloc.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_ $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_SharedAlloc.cpp Kokkos_MemoryPool.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_MemoryPool.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_MemoryPool.cpp +Kokkos_HostSpace_deepcopy.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_HostSpace_deepcopy.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_HostSpace_deepcopy.cpp ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) @@ -38,8 +40,8 @@ endif endif ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) -Kokkos_Cuda_Impl.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Impl.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Impl.cpp +Kokkos_Cuda_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Instance.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Instance.cpp Kokkos_CudaSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_CudaSpace.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_CudaSpace.cpp Kokkos_Cuda_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Task.cpp @@ -92,6 +94,13 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) endif endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) +Kokkos_HPX.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX.cpp +Kokkos_HPX_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX_Task.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX_Task.cpp +endif + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) Kokkos_OpenMPTarget_Exec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp diff --git a/lib/kokkos/algorithms/cmake/Dependencies.cmake b/lib/kokkos/algorithms/cmake/Dependencies.cmake index c36b62523f..1b41310681 100644 --- a/lib/kokkos/algorithms/cmake/Dependencies.cmake +++ b/lib/kokkos/algorithms/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES KokkosCore KokkosContainers - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp index 8bdd876723..7fb8505fe5 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp @@ -328,6 +328,8 @@ public: parallel_for("Kokkos::Sort::Copy", Kokkos::RangePolicy(0,len),functor); } + + Kokkos::fence(); } template diff --git a/lib/kokkos/algorithms/unit_tests/CMakeLists.txt b/lib/kokkos/algorithms/unit_tests/CMakeLists.txt index f5aa24e9be..e238b37c8e 100644 --- a/lib/kokkos/algorithms/unit_tests/CMakeLists.txt +++ b/lib/kokkos/algorithms/unit_tests/CMakeLists.txt @@ -42,6 +42,12 @@ IF(Kokkos_ENABLE_OpenMP) ) ENDIF() +IF(Kokkos_ENABLE_HPX) + LIST( APPEND SOURCES + TestHPX.cpp + ) +ENDIF() + IF(Kokkos_ENABLE_Serial) LIST( APPEND SOURCES TestSerial.cpp diff --git a/lib/kokkos/algorithms/unit_tests/Makefile b/lib/kokkos/algorithms/unit_tests/Makefile index b5848c451e..3c862d03dc 100644 --- a/lib/kokkos/algorithms/unit_tests/Makefile +++ b/lib/kokkos/algorithms/unit_tests/Makefile @@ -49,6 +49,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) TEST_TARGETS += test-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = TestHPX.o UnitTestMain.o gtest-all.o + TARGETS += KokkosAlgorithms_UnitTest_HPX + TEST_TARGETS += test-hpx +endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL = TestSerial.o UnitTestMain.o gtest-all.o TARGETS += KokkosAlgorithms_UnitTest_Serial @@ -67,6 +73,9 @@ KokkosAlgorithms_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosAlgorithms_UnitTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosAlgorithms_UnitTest_OpenMP +KokkosAlgorithms_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosAlgorithms_UnitTest_HPX + KokkosAlgorithms_UnitTest_Serial: $(OBJ_SERIAL) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_SERIAL) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosAlgorithms_UnitTest_Serial @@ -82,6 +91,9 @@ test-threads: KokkosAlgorithms_UnitTest_Threads test-openmp: KokkosAlgorithms_UnitTest_OpenMP ./KokkosAlgorithms_UnitTest_OpenMP +test-hpx: KokkosAlgorithms_UnitTest_HPX + ./KokkosAlgorithms_UnitTest_HPX + test-serial: KokkosAlgorithms_UnitTest_Serial ./KokkosAlgorithms_UnitTest_Serial diff --git a/lib/kokkos/algorithms/unit_tests/TestHPX.cpp b/lib/kokkos/algorithms/unit_tests/TestHPX.cpp new file mode 100644 index 0000000000..e5b7dbdb7a --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestHPX.cpp @@ -0,0 +1,96 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#include +#ifdef KOKKOS_ENABLE_HPX + +#include +#include + +//---------------------------------------------------------------------------- +#include +#include +#include + +namespace Test { + +class hpx : public ::testing::Test { +protected: + static void SetUpTestCase() + { + std::cout << std::setprecision(5) << std::scientific; + } + + static void TearDownTestCase() + { + } +}; + +#define HPX_RANDOM_XORSHIFT64( num_draws ) \ + TEST_F( hpx, Random_XorShift64 ) { \ + Impl::test_random >(num_draws); \ + } + +#define HPX_RANDOM_XORSHIFT1024( num_draws ) \ + TEST_F( hpx, Random_XorShift1024 ) { \ + Impl::test_random >(num_draws); \ + } + +#define HPX_SORT_UNSIGNED( size ) \ + TEST_F( hpx, SortUnsigned ) { \ + Impl::test_sort< Kokkos::Experimental::HPX, unsigned >(size); \ + } + +HPX_RANDOM_XORSHIFT64( 10240000 ) +HPX_RANDOM_XORSHIFT1024( 10130144 ) +HPX_SORT_UNSIGNED(171) + +#undef HPX_RANDOM_XORSHIFT64 +#undef HPX_RANDOM_XORSHIFT1024 +#undef HPX_SORT_UNSIGNED +} // namespace test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTHPX_PREVENT_LINK_ERROR() {} +#endif + diff --git a/lib/kokkos/algorithms/unit_tests/TestSort.hpp b/lib/kokkos/algorithms/unit_tests/TestSort.hpp index e0c646c199..5fd7f09b50 100644 --- a/lib/kokkos/algorithms/unit_tests/TestSort.hpp +++ b/lib/kokkos/algorithms/unit_tests/TestSort.hpp @@ -225,9 +225,9 @@ void test_dynamic_view_sort(unsigned int n ) Kokkos::Random_XorShift64_Pool g(1931); Kokkos::fill_random(keys_view,g,Kokkos::Random_XorShift64_Pool::generator_type::MAX_URAND); - ExecutionSpace::fence(); + ExecutionSpace().fence(); Kokkos::deep_copy(keys,keys_view); - //ExecutionSpace::fence(); + //ExecutionSpace().fence(); double sum_before = 0.0; double sum_after = 0.0; @@ -237,9 +237,9 @@ void test_dynamic_view_sort(unsigned int n ) Kokkos::sort(keys, 0 /* begin */ , n /* end */ ); - ExecutionSpace::fence(); // Need this fence to prevent BusError with Cuda + ExecutionSpace().fence(); // Need this fence to prevent BusError with Cuda Kokkos::deep_copy( keys_view , keys ); - //ExecutionSpace::fence(); + //ExecutionSpace().fence(); Kokkos::parallel_reduce(n,sum(keys_view),sum_after); Kokkos::parallel_reduce(n-1,is_sorted_struct(keys_view),sort_fails); diff --git a/lib/kokkos/cmake/kokkos_build.cmake b/lib/kokkos/cmake/kokkos_build.cmake index 8178483d01..f9b995baae 100644 --- a/lib/kokkos/cmake/kokkos_build.cmake +++ b/lib/kokkos/cmake/kokkos_build.cmake @@ -76,8 +76,20 @@ IF(KOKKOS_SEPARATE_LIBS) ) foreach(lib IN LISTS KOKKOS_TPL_LIBRARY_NAMES) - if ("${lib}" STREQUAL "cuda") + if (("${lib}" STREQUAL "cuda") AND (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) set(LIB_cuda "-lcuda") + elseif ("${lib}" STREQUAL "hpx") + find_package(HPX REQUIRED) + if(${HPX_FOUND}) + target_link_libraries(kokkoscore PUBLIC ${HPX_LIBRARIES}) + target_link_libraries(kokkoscontainers PUBLIC ${HPX_LIBRARIES}) + target_link_libraries(kokkosalgorithms PUBLIC ${HPX_LIBRARIES}) + target_include_directories(kokkoscore PUBLIC ${HPX_INCLUDE_DIRS}) + target_include_directories(kokkoscontainers PUBLIC ${HPX_INCLUDE_DIRS}) + target_include_directories(kokkosalgorithms PUBLIC ${HPX_INCLUDE_DIRS}) + else() + message(ERROR "HPX not found. Check the value of HPX_DIR (= ${HPX_DIR}) or CMAKE_PREFIX_PATH (= ${CMAKE_PREFIX_PATH}).") + endif() else() find_library(LIB_${lib} ${lib} PATHS ${KOKKOS_TPL_LIBRARY_DIRS}) endif() @@ -158,8 +170,16 @@ ELSE() ) foreach(lib IN LISTS KOKKOS_TPL_LIBRARY_NAMES) - if ("${lib}" STREQUAL "cuda") + if (("${lib}" STREQUAL "cuda") AND (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) set(LIB_cuda "-lcuda") + elseif ("${lib}" STREQUAL "hpx") + find_package(HPX REQUIRED) + if(${HPX_FOUND}) + target_link_libraries(kokkos PUBLIC ${HPX_LIBRARIES}) + target_include_directories(kokkos PUBLIC ${HPX_INCLUDE_DIRS}) + else() + message(ERROR "HPX not found. Check the value of HPX_DIR (= ${HPX_DIR}) or CMAKE_PREFIX_PATH (= ${CMAKE_PREFIX_PATH}).") + endif() else() find_library(LIB_${lib} ${lib} PATHS ${KOKKOS_TPL_LIBRARY_DIRS}) endif() diff --git a/lib/kokkos/cmake/kokkos_functions.cmake b/lib/kokkos/cmake/kokkos_functions.cmake index bc490115af..616618753b 100644 --- a/lib/kokkos/cmake/kokkos_functions.cmake +++ b/lib/kokkos/cmake/kokkos_functions.cmake @@ -95,7 +95,7 @@ function(set_kokkos_cxx_compiler) message(FATAL_ERROR "Compiling CUDA code directly with Clang requires version 4.0.0 or higher.") endif() elseif(NOT INTERNAL_CXX_COMPILER_ID STREQUAL NVIDIA) - message(FATAL_ERROR "Invalid compiler for CUDA. The compiler must be nvcc_wrapper or Clang.") + message(FATAL_ERROR "Invalid compiler for CUDA. The compiler must be nvcc_wrapper or Clang, but compiler ID was ${INTERNAL_CXX_COMPILER_ID}") endif() endif() diff --git a/lib/kokkos/cmake/kokkos_options.cmake b/lib/kokkos/cmake/kokkos_options.cmake index be494e5df0..e730a94664 100644 --- a/lib/kokkos/cmake/kokkos_options.cmake +++ b/lib/kokkos/cmake/kokkos_options.cmake @@ -14,6 +14,7 @@ list(APPEND KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST OpenMP Pthread Qthread + HPX Cuda ROCm HWLOC @@ -23,6 +24,7 @@ list(APPEND KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST Cuda_Relocatable_Device_Code Cuda_UVM Cuda_LDG_Intrinsic + HPX_ASYNC_DISPATCH Debug Debug_DualView_Modify_Check Debug_Bounds_Check @@ -116,6 +118,7 @@ list(APPEND KOKKOS_DEVICES_LIST OpenMP # OpenMP Pthread # pthread Qthreads # qthreads + HPX # HPX Serial # serial ROCm # Relocatable device code ) @@ -173,6 +176,19 @@ set(KOKKOS_INTERNAL_RELOCATABLE_DEVICE_CODE rdc) set(KOKKOS_INTERNAL_LAMBDA enable_lambda) +#------------------------------------------------------------------------------- +# List of possible Options for HPX +#------------------------------------------------------------------------------- +# From Makefile.kokkos: Options: enable_async_dispatch +set(KOKKOS_HPX_OPTIONS_LIST) +list(APPEND KOKKOS_HPX_OPTIONS_LIST + ASYNC_DISPATCH # enable_async_dispatch + ) + +# Map of cmake variables to Makefile variables +set(KOKKOS_INTERNAL_ENABLE_ASYNC_DISPATCH enable_async_dispatch) + + #------------------------------------------------------------------------------- #------------------------------- Create doc strings ---------------------------- #------------------------------------------------------------------------------- @@ -202,6 +218,11 @@ set(KOKKOS_SEPARATE_LIBS OFF CACHE BOOL "OFF = kokkos. ON = kokkoscore, kokkosc # Qthreads options. set(KOKKOS_QTHREADS_DIR "" CACHE PATH "Location of Qthreads library.") +# HPX options. +set(KOKKOS_HPX_DIR "" CACHE PATH "Location of HPX library.") + +# Whether to build separate libraries or now +set(KOKKOS_SEPARATE_TESTS OFF CACHE BOOL "Provide unit test targets with finer granularity.") #------------------------------------------------------------------------------- #------------------------------- KOKKOS_DEVICES -------------------------------- @@ -215,6 +236,11 @@ IF(Trilinos_ENABLE_Kokkos) ELSE() set_kokkos_default_default(QTHREADS OFF) ENDIF() + IF(TPL_ENABLE_HPX) + set_kokkos_default_default(HPX ON) + ELSE() + set_kokkos_default_default(HPX OFF) + ENDIF() IF(Trilinos_ENABLE_OpenMP) set_kokkos_default_default(OPENMP ${Trilinos_ENABLE_OpenMP}) ELSE() @@ -231,6 +257,7 @@ ELSE() set_kokkos_default_default(OPENMP OFF) set_kokkos_default_default(PTHREAD OFF) set_kokkos_default_default(QTHREAD OFF) + set_kokkos_default_default(HPX OFF) set_kokkos_default_default(CUDA OFF) set_kokkos_default_default(ROCM OFF) ENDIF() @@ -241,6 +268,7 @@ set(KOKKOS_ENABLE_SERIAL ${KOKKOS_INTERNAL_ENABLE_SERIAL_DEFAULT} CACHE BOOL "Wh set(KOKKOS_ENABLE_OPENMP ${KOKKOS_INTERNAL_ENABLE_OPENMP_DEFAULT} CACHE BOOL "Enable OpenMP support in Kokkos." FORCE) set(KOKKOS_ENABLE_PTHREAD ${KOKKOS_INTERNAL_ENABLE_PTHREAD_DEFAULT} CACHE BOOL "Enable Pthread support in Kokkos.") set(KOKKOS_ENABLE_QTHREADS ${KOKKOS_INTERNAL_ENABLE_QTHREADS_DEFAULT} CACHE BOOL "Enable Qthreads support in Kokkos.") +set(KOKKOS_ENABLE_HPX ${KOKKOS_INTERNAL_ENABLE_HPX_DEFAULT} CACHE BOOL "Enable HPX support in Kokkos.") set(KOKKOS_ENABLE_CUDA ${KOKKOS_INTERNAL_ENABLE_CUDA_DEFAULT} CACHE BOOL "Enable CUDA support in Kokkos.") set(KOKKOS_ENABLE_ROCM ${KOKKOS_INTERNAL_ENABLE_ROCM_DEFAULT} CACHE BOOL "Enable ROCm support in Kokkos.") @@ -343,6 +371,18 @@ set(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE ${KOKKOS_INTERNAL_ENABLE_CUDA_REL set(KOKKOS_ENABLE_CUDA_LAMBDA ${KOKKOS_INTERNAL_ENABLE_CUDA_LAMBDA_DEFAULT} CACHE BOOL "Enable lambdas for CUDA. (cuda option)") +#------------------------------------------------------------------------------- +#------------------------------- KOKKOS_HPX_OPTIONS ---------------------------- +#------------------------------------------------------------------------------- + +# HPX options. +# Set Defaults +set_kokkos_default_default(HPX_ASYNC_DISPATCH OFF) + +# Set actual options +set(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH ${KOKKOS_INTERNAL_ENABLE_HPX_ASYNC_DISPATCH_DEFAULT} CACHE BOOL "Enable HPX async dispatch.") + + #------------------------------------------------------------------------------- #----------------------- HOST ARCH AND LEGACY TRIBITS -------------------------- #------------------------------------------------------------------------------- @@ -376,4 +416,3 @@ foreach(opt ${KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST}) SET(Kokkos_ENABLE_${opt} ${KOKKOS_ENABLE_${OPT}} CACHE BOOL "CamelCase Compatibility setting for KOKKOS_ENABLE_${OPT}") ENDIF() endforeach() - diff --git a/lib/kokkos/cmake/kokkos_settings.cmake b/lib/kokkos/cmake/kokkos_settings.cmake index 387ced6d52..2c622d0de9 100644 --- a/lib/kokkos/cmake/kokkos_settings.cmake +++ b/lib/kokkos/cmake/kokkos_settings.cmake @@ -198,6 +198,8 @@ if(KOKKOS_CMAKE_VERBOSE) message(STATUS " Host Parallel: Pthread") elseif(KOKKOS_ENABLE_QTHREADS) message(STATUS " Host Parallel: Qthreads") + elseif(KOKKOS_ENABLE_HPX) + message(STATUS " Host Parallel: HPX") else() message(STATUS " Host Parallel: None") endif() @@ -244,6 +246,10 @@ if(KOKKOS_CMAKE_VERBOSE) message(STATUS " KOKKOS_MEMKIND_DIR: ${KOKKOS_MEMKIND_DIR}") endif() + if(KOKKOS_HPX_DIR) + message(STATUS " KOKKOS_HPX_DIR: ${KOKKOS_HPX_DIR}") + endif() + message(STATUS "") message(STATUS "Final kokkos settings variable:") message(STATUS " ${KOKKOS_SETTINGS}") diff --git a/lib/kokkos/cmake/tribits.cmake b/lib/kokkos/cmake/tribits.cmake index f8eebc29f8..1f467f0662 100644 --- a/lib/kokkos/cmake/tribits.cmake +++ b/lib/kokkos/cmake/tribits.cmake @@ -9,6 +9,10 @@ IF(NOT DEFINED ${PROJECT_NAME}_ENABLE_OpenMP) SET(${PROJECT_NAME}_ENABLE_OpenMP OFF) ENDIF() +IF(NOT DEFINED ${PROJECT_NAME}_ENABLE_HPX) + SET(${PROJECT_NAME}_ENABLE_HPX OFF) +ENDIF() + IF(NOT DEFINED ${PROJECT_NAME}_ENABLE_DEBUG) SET(${PROJECT_NAME}_ENABLE_DEBUG OFF) ENDIF() @@ -309,6 +313,10 @@ ENDFUNCTION() FUNCTION(TRIBITS_TPL_TENTATIVELY_ENABLE) ENDFUNCTION() +FUNCTION(TRIBITS_ADD_ADVANCED_TEST) + # TODO Write this +ENDFUNCTION() + FUNCTION(TRIBITS_ADD_EXECUTABLE_AND_TEST EXE_NAME) SET(options STANDARD_PASS_OUTPUT WILL_FAIL) diff --git a/lib/kokkos/containers/cmake/Dependencies.cmake b/lib/kokkos/containers/cmake/Dependencies.cmake index 1d71d8af34..5e29157369 100644 --- a/lib/kokkos/containers/cmake/Dependencies.cmake +++ b/lib/kokkos/containers/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES KokkosCore - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/containers/performance_tests/CMakeLists.txt b/lib/kokkos/containers/performance_tests/CMakeLists.txt index 1203a8bd81..3c6584bc34 100644 --- a/lib/kokkos/containers/performance_tests/CMakeLists.txt +++ b/lib/kokkos/containers/performance_tests/CMakeLists.txt @@ -24,6 +24,10 @@ IF(Kokkos_ENABLE_OpenMP) LIST( APPEND SOURCES TestOpenMP.cpp) ENDIF() +IF(Kokkos_ENABLE_HPX) + LIST( APPEND SOURCES TestHPX.cpp) +ENDIF() + # Per #374, we always want to build this test, but we only want to run # it as a PERFORMANCE test. That's why we separate building the test # from running the test. diff --git a/lib/kokkos/containers/performance_tests/Makefile b/lib/kokkos/containers/performance_tests/Makefile index ebed75ccd6..f309a220d0 100644 --- a/lib/kokkos/containers/performance_tests/Makefile +++ b/lib/kokkos/containers/performance_tests/Makefile @@ -49,6 +49,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) TEST_TARGETS += test-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = TestHPX.o TestMain.o gtest-all.o + TARGETS += KokkosContainers_PerformanceTest_HPX + TEST_TARGETS += test-hpx +endif + KokkosContainers_PerformanceTest_Cuda: $(OBJ_CUDA) $(KOKKOS_LINK_DEPENDS) $(LINK) $(KOKKOS_LDFLAGS) $(LDFLAGS) $(EXTRA_PATH) $(OBJ_CUDA) $(KOKKOS_LIBS) $(LIB) -o KokkosContainers_PerformanceTest_Cuda @@ -61,6 +67,9 @@ KokkosContainers_PerformanceTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosContainers_PerformanceTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(KOKKOS_LDFLAGS) $(LDFLAGS) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) -o KokkosContainers_PerformanceTest_OpenMP +KokkosContainers_PerformanceTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(KOKKOS_LDFLAGS) $(LDFLAGS) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) -o KokkosContainers_PerformanceTest_HPX + test-cuda: KokkosContainers_PerformanceTest_Cuda ./KokkosContainers_PerformanceTest_Cuda @@ -73,6 +82,9 @@ test-threads: KokkosContainers_PerformanceTest_Threads test-openmp: KokkosContainers_PerformanceTest_OpenMP ./KokkosContainers_PerformanceTest_OpenMP +test-hpx: KokkosContainers_PerformanceTest_HPX + ./KokkosContainers_PerformanceTest_HPX + build_all: $(TARGETS) test: $(TEST_TARGETS) diff --git a/lib/kokkos/containers/performance_tests/TestDynRankView.hpp b/lib/kokkos/containers/performance_tests/TestDynRankView.hpp index 0d2fae32a3..db6274e057 100644 --- a/lib/kokkos/containers/performance_tests/TestDynRankView.hpp +++ b/lib/kokkos/containers/performance_tests/TestDynRankView.hpp @@ -197,7 +197,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::RangePolicy policy(0,par_size); Kokkos::parallel_for( policy , FunctorType(testview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_view = timer.seconds(); std::cout << " View time (init only): " << elapsed_time_view << std::endl; @@ -205,7 +205,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::View sumview("sumview",par_size); Kokkos::parallel_for( policy , typename FunctorType::SumComputationTest(testview, sumview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_compview = timer.seconds(); std::cout << " View sum computation time: " << elapsed_time_view << std::endl; @@ -215,7 +215,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::parallel_for( policy , FunctorStrideType(teststrideview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_strideview = timer.seconds(); std::cout << " Strided View time (init only): " << elapsed_time_strideview << std::endl; } @@ -226,7 +226,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::RangePolicy policy(0,par_size); Kokkos::parallel_for( policy , FunctorType(testview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_view_rank7 = timer.seconds(); std::cout << " View Rank7 time (init only): " << elapsed_time_view_rank7 << std::endl; } @@ -237,14 +237,14 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::RangePolicy policy(0,par_size); Kokkos::parallel_for( policy , FunctorType(testdrview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_drview = timer.seconds(); std::cout << " DynRankView time (init only): " << elapsed_time_drview << std::endl; timer.reset(); Kokkos::DynRankView sumview("sumview",par_size); Kokkos::parallel_for( policy , typename FunctorType::SumComputationTest(testdrview, sumview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_compdrview = timer.seconds(); std::cout << " DynRankView sum computation time: " << elapsed_time_compdrview << std::endl; diff --git a/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp b/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp index dcaca776be..98997b3239 100644 --- a/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp +++ b/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp @@ -192,7 +192,7 @@ void test_global_to_local_ids(unsigned num_ids) { generate_ids gen(local_2_global); } - Device::fence(); + Device().fence(); // generate elasped_time = timer.seconds(); std::cout << elasped_time << ", "; @@ -201,7 +201,7 @@ void test_global_to_local_ids(unsigned num_ids) { fill_map fill(global_2_local, local_2_global); } - Device::fence(); + Device().fence(); // fill elasped_time = timer.seconds(); @@ -214,7 +214,7 @@ void test_global_to_local_ids(unsigned num_ids) { find_test find(global_2_local, local_2_global,num_errors); } - Device::fence(); + Device().fence(); // find elasped_time = timer.seconds(); diff --git a/lib/kokkos/containers/performance_tests/TestHPX.cpp b/lib/kokkos/containers/performance_tests/TestHPX.cpp new file mode 100644 index 0000000000..0f43377cee --- /dev/null +++ b/lib/kokkos/containers/performance_tests/TestHPX.cpp @@ -0,0 +1,130 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#if defined( KOKKOS_ENABLE_HPX ) + +#include + +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + + +namespace Performance { + +class hpx : public ::testing::Test { +protected: + static void SetUpTestCase() + { + std::cout << std::setprecision(5) << std::scientific; + + Kokkos::initialize(); + Kokkos::print_configuration( std::cout ); + } + + static void TearDownTestCase() + { + Kokkos::finalize(); + } +}; + +TEST_F( hpx, dynrankview_perf ) +{ + std::cout << "HPX" << std::endl; + std::cout << " DynRankView vs View: Initialization Only " << std::endl; + test_dynrankview_op_perf( 8192 ); +} + +TEST_F( hpx, global_2_local) +{ + std::cout << "HPX" << std::endl; + std::cout << "size, create, generate, fill, find" << std::endl; + for (unsigned i=Performance::begin_id_size; i<=Performance::end_id_size; i *= Performance::id_step) + test_global_to_local_ids(i); +} + +TEST_F( hpx, unordered_map_performance_near) +{ + unsigned num_hpx = 4; + std::ostringstream base_file_name; + base_file_name << "hpx-" << num_hpx << "-near"; + Perf::run_performance_tests(base_file_name.str()); +} + +TEST_F( hpx, unordered_map_performance_far) +{ + unsigned num_hpx = 4; + std::ostringstream base_file_name; + base_file_name << "hpx-" << num_hpx << "-far"; + Perf::run_performance_tests(base_file_name.str()); +} + +TEST_F( hpx, scatter_view) +{ + std::cout << "ScatterView data-duplicated test:\n"; + Perf::test_scatter_view(10, 1000 * 1000); +//std::cout << "ScatterView atomics test:\n"; +//Perf::test_scatter_view(10, 1000 * 1000); +} + +} // namespace test +#else +void KOKKOS_CONTAINERS_PERFORMANCE_TESTS_TESTHPX_PREVENT_EMPTY_LINK_ERROR() {} +#endif + diff --git a/lib/kokkos/containers/performance_tests/TestScatterView.hpp b/lib/kokkos/containers/performance_tests/TestScatterView.hpp index 03129d2b09..bd9121bb82 100644 --- a/lib/kokkos/containers/performance_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/performance_tests/TestScatterView.hpp @@ -83,6 +83,7 @@ void test_scatter_view(int m, int n) for (int k = 0; k < m; ++k) { Kokkos::parallel_for(policy, f2, "hand_coded_duplicate_scatter_view_test"); } + Kokkos::fence(); auto t = timer.seconds(); std::cout << "hand-coded test took " << t << " seconds\n"; } @@ -101,6 +102,7 @@ void test_scatter_view(int m, int n) for (int k = 0; k < m; ++k) { Kokkos::parallel_for(policy, f, "scatter_view_test"); } + Kokkos::fence(); auto t = timer.seconds(); std::cout << "test took " << t << " seconds\n"; } diff --git a/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp b/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp index e8734b259d..8d09281ed3 100644 --- a/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp +++ b/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp @@ -108,7 +108,7 @@ struct UnorderedMapTest std::cout << std::setprecision(2) << std::fixed << std::setw(5) << (1e9*(seconds/(inserts))) << "; " << std::flush; histogram.calculate(); - Device::fence(); + Device().fence(); } void print(std::ostream & metrics_out, std::ostream & length_out, std::ostream & distance_out, std::ostream & block_distance_out) @@ -236,7 +236,7 @@ void run_performance_tests(std::string const & base_file_name) uint32_t inserts = static_cast(test_ratios[j]*(capacity)); std::cout << capacity << std::flush; UnorderedMapTest test(capacity, inserts*collisions[i], collisions[i]); - Device::fence(); + Device().fence(); test.print(metrics_out, length_out, distance_out, block_distance_out); } std::cout << "\b\b " << std::endl; diff --git a/lib/kokkos/containers/src/Kokkos_Bitset.hpp b/lib/kokkos/containers/src/Kokkos_Bitset.hpp index bfe8080f3b..4d78430fc6 100644 --- a/lib/kokkos/containers/src/Kokkos_Bitset.hpp +++ b/lib/kokkos/containers/src/Kokkos_Bitset.hpp @@ -107,22 +107,20 @@ public: } } - /// assignment - Bitset & operator = (Bitset const & rhs) - { - this->m_size = rhs.m_size; - this->m_last_block_mask = rhs.m_last_block_mask; - this->m_blocks = rhs.m_blocks; + KOKKOS_INLINE_FUNCTION + Bitset (const Bitset&) = default; - return *this; - } + KOKKOS_INLINE_FUNCTION + Bitset& operator= (const Bitset&) = default; - /// copy constructor - Bitset( Bitset const & rhs) - : m_size( rhs.m_size ) - , m_last_block_mask( rhs.m_last_block_mask ) - , m_blocks( rhs.m_blocks ) - {} + KOKKOS_INLINE_FUNCTION + Bitset (Bitset&&) = default; + + KOKKOS_INLINE_FUNCTION + Bitset& operator= (Bitset&&) = default; + + KOKKOS_INLINE_FUNCTION + ~Bitset () = default; /// number of bits in the set /// can be call from the host or the device diff --git a/lib/kokkos/containers/src/Kokkos_DualView.hpp b/lib/kokkos/containers/src/Kokkos_DualView.hpp index f6631a4149..d9b14d67a2 100644 --- a/lib/kokkos/containers/src/Kokkos_DualView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DualView.hpp @@ -484,8 +484,8 @@ public: } } if(std::is_same::value) { - t_dev::execution_space::fence(); - t_host::execution_space::fence(); + typename t_dev::execution_space().fence(); + typename t_host::execution_space().fence(); } } diff --git a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp index 3f284e6a8d..d1e6704a57 100644 --- a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp @@ -75,7 +75,7 @@ struct DynRankDimTraits { , const size_t N4 , const size_t N5 , const size_t N6 - , const size_t N7 ) + , const size_t /* N7 */) { return ( (N6 == unspecified && N5 == unspecified && N4 == unspecified && N3 == unspecified && N2 == unspecified && N1 == unspecified && N0 == unspecified) ? 0 @@ -106,7 +106,7 @@ struct DynRankDimTraits { // Extra overload to match that for specialize types v2 template KOKKOS_INLINE_FUNCTION - static size_t computeRank( const Kokkos::Impl::ViewCtorProp& prop, const Layout& layout ) + static size_t computeRank( const Kokkos::Impl::ViewCtorProp& /* prop */, const Layout& layout ) { return computeRank(layout); } @@ -155,7 +155,7 @@ struct DynRankDimTraits { // Extra overload to match that for specialize types template KOKKOS_INLINE_FUNCTION - static typename std::enable_if< (std::is_same::value || std::is_same::value || std::is_same::value) , typename Traits::array_layout >::type createLayout( const Kokkos::Impl::ViewCtorProp& prop, const typename Traits::array_layout& layout ) + static typename std::enable_if< (std::is_same::value || std::is_same::value || std::is_same::value) , typename Traits::array_layout >::type createLayout( const Kokkos::Impl::ViewCtorProp& /* prop */, const typename Traits::array_layout& layout ) { return createLayout( layout ); } @@ -655,7 +655,7 @@ public: const size_t dim_scalar = m_map.dimension_scalar(); const size_t bytes = this->span() / dim_scalar; - typedef Kokkos::View > tmp_view_type; + typedef Kokkos::View > tmp_view_type; tmp_view_type rankone_view(this->data(), bytes, dim_scalar); return rankone_view(i0); } @@ -1060,7 +1060,7 @@ public: } // Copy the input allocation properties with possibly defaulted properties - alloc_prop prop( arg_prop ); + alloc_prop prop_copy( arg_prop ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) @@ -1070,18 +1070,18 @@ public: // Fence using the trait's executon space (which will be Kokkos::Cuda) // to avoid incomplete type errors from usng Kokkos::Cuda directly. if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ Kokkos::Impl::SharedAllocationRecord<> * - record = m_map.allocate_shared( prop , Impl::DynRankDimTraits::template createLayout(arg_prop, arg_layout) ); + record = m_map.allocate_shared( prop_copy, Impl::DynRankDimTraits::template createLayout(arg_prop, arg_layout) ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ @@ -1609,7 +1609,7 @@ struct DynRankViewFill { closure.execute(); - execution_space::fence(); + execution_space().fence(); } }; @@ -1650,6 +1650,7 @@ struct DynRankViewRemap { typedef Kokkos::RangePolicy< ExecSpace > Policy ; const Kokkos::Impl::ParallelFor< DynRankViewRemap , Policy > closure( *this , Policy( 0 , n0 ) ); closure.execute(); + // Kokkos::fence(); // ?? } KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp index ab782a82ad..37d56e7cfb 100644 --- a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp @@ -288,8 +288,8 @@ public: >::type resize_serial( IntType const & n ) { - typedef typename traits::value_type value_type ; - typedef value_type * value_pointer_type ; + typedef typename traits::value_type local_value_type ; + typedef local_value_type * value_pointer_type ; const uintptr_t NC = ( n + m_chunk_mask ) >> m_chunk_shift ; // New total number of chunks needed for resize @@ -304,8 +304,8 @@ public: if ( *pc < NC ) { while ( *pc < NC ) { m_chunks[*pc] = reinterpret_cast - ( - typename traits::memory_space().allocate( sizeof(value_type) << m_chunk_shift ) + ( + typename traits::memory_space().allocate( sizeof(local_value_type) << m_chunk_shift ) ); ++*pc ; } @@ -314,7 +314,7 @@ public: while ( NC + 1 <= *pc ) { --*pc ; typename traits::memory_space().deallocate( m_chunks[*pc] - , sizeof(value_type) << m_chunk_shift ); + , sizeof(local_value_type) << m_chunk_shift ); m_chunks[*pc] = 0 ; } } @@ -376,8 +376,8 @@ public: closure.execute(); - traits::execution_space::fence(); - //Impl::ChunkArraySpace< typename traits::memory_space >::memory_space::execution_space::fence(); + typename traits::execution_space().fence(); + //Impl::ChunkArraySpace< typename traits::memory_space >::memory_space::execution_space().fence(); } void construct_shared_allocation() diff --git a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp index b614764ee7..4ce1f4d84f 100644 --- a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp +++ b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp @@ -202,8 +202,8 @@ namespace Kokkos { template ::value, iType>::type = 0> KOKKOS_INLINE_FUNCTION - int64_t begin(const iType dimension) const { - return dimension < Rank ? m_begins[dimension] : 0; + int64_t begin(const iType local_dimension) const { + return local_dimension < Rank ? m_begins[local_dimension] : 0; } KOKKOS_INLINE_FUNCTION @@ -211,7 +211,9 @@ namespace Kokkos { template ::value, iType>::type = 0> KOKKOS_INLINE_FUNCTION - int64_t end(const iType dimension) const {return begin(dimension) + m_map.extent(dimension);} + int64_t end(const iType local_dimension) const { + return begin(local_dimension) + m_map.extent(local_dimension); + } private: @@ -1068,7 +1070,7 @@ namespace Kokkos { } // Copy the input allocation properties with possibly defaulted properties - alloc_prop prop( arg_prop ); + alloc_prop prop_copy( arg_prop ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) @@ -1078,18 +1080,18 @@ namespace Kokkos { // Fence using the trait's executon space (which will be Kokkos::Cuda) // to avoid incomplete type errors from usng Kokkos::Cuda directly. if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ Kokkos::Impl::SharedAllocationRecord<> * - record = m_map.allocate_shared( prop , arg_layout ); + record = m_map.allocate_shared( prop_copy , arg_layout ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ diff --git a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp index 8e56857887..a8c05e3f36 100644 --- a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp +++ b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp @@ -57,9 +57,16 @@ namespace Kokkos { namespace Experimental { -//TODO: replace this enum with the Kokkos::Sum, etc reducers for parallel_reduce +/* + * Reduction Type list + * - These corresponds to subset of the reducers in parallel_reduce + * - See Implementations of ScatterValue for details. + */ enum : int { ScatterSum, + ScatterProd, + ScatterMax, + ScatterMin, }; enum : int { @@ -114,6 +121,21 @@ struct DefaultContribution +struct DefaultDuplication { + enum : int { value = Kokkos::Experimental::ScatterDuplicated }; +}; +template <> +struct DefaultContribution { + enum : int { value = Kokkos::Experimental::ScatterAtomic }; +}; +template <> +struct DefaultContribution { + enum : int { value = Kokkos::Experimental::ScatterNonAtomic }; +}; +#endif + #ifdef KOKKOS_ENABLE_THREADS template <> struct DefaultDuplication { @@ -144,39 +166,277 @@ struct DefaultContribution is the object returned by the access operator() of ScatterAccess, + This class inherits from the Sum<> reducer and it wraps join(dest, src) with convenient operator+=, etc. + Note the addition of update(ValueType const& rhs) and reset() so that all reducers can have common functions + See ReduceDuplicates and ResetDuplicates ) */ template struct ScatterValue; template -struct ScatterValue { +struct ScatterValue : + Sum { public: - KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : value( value_in ) {} - KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : value( other.value ) {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Sum(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Sum(other.reference()) + {} KOKKOS_FORCEINLINE_FUNCTION void operator+=(ValueType const& rhs) { - value += rhs; + this->join( this->reference(), rhs ); } KOKKOS_FORCEINLINE_FUNCTION void operator-=(ValueType const& rhs) { - value -= rhs; + this->join( this->reference(), -rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); } - private: - ValueType& value; }; +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps Kokkos::atomic_add with convenient + operator+=, etc. This version also has the update(rhs) and reset() functions. */ template -struct ScatterValue { +struct ScatterValue : + Sum { public: - KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : value( value_in ) {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Sum(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION void operator+=(ValueType const& rhs) { - Kokkos::atomic_add(&value, rhs); + this->join(this->reference(), rhs); } KOKKOS_FORCEINLINE_FUNCTION void operator-=(ValueType const& rhs) { - Kokkos::atomic_add(&value, -rhs); + this->join(this->reference(), -rhs); } - private: - ValueType& value; + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + Kokkos::atomic_add(&dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + Kokkos::atomic_add(&dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() of ScatterAccess, + This class inherits from the Prod<> reducer and it wraps join(dest, src) with convenient operator*=, etc. + Note the addition of update(ValueType const& rhs) and reset() so that all reducers can have common functions + See ReduceDuplicates and ResetDuplicates ) */ +template +struct ScatterValue : + Prod { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Prod(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Prod(other.reference()) + {} + KOKKOS_FORCEINLINE_FUNCTION void operator*=(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void operator/=(ValueType const& rhs) { + this->join( this->reference(), static_cast(1)/rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps and atomic_prod with convenient + operator*=, etc. atomic_prod uses the atomic_compare_exchange. This version also has the update(rhs) and reset() functions. */ +template +struct ScatterValue : + Prod { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Prod(value_in) + {} + + KOKKOS_FORCEINLINE_FUNCTION void operator*=(ValueType const& rhs) { + this->join(this->reference(), rhs); + } + KOKKOS_FORCEINLINE_FUNCTION void operator/=(ValueType const& rhs) { + this->join(this->reference(), static_cast(1)/rhs); + } + + KOKKOS_FORCEINLINE_FUNCTION + void atomic_prod(ValueType & dest, const ValueType& src) const { + + bool success = false; + while(!success) { + ValueType dest_old = dest; + ValueType dest_new = dest_old * src; + dest_new = Kokkos::atomic_compare_exchange(&dest,dest_old,dest_new); + success = ( (dest_new - dest_old)/dest_old <= 1e-15 ); + } + } + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + atomic_prod(dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + atomic_prod(dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } + +}; + +/* ScatterValue is the object returned by the access operator() of ScatterAccess, + This class inherits from the Min<> reducer and it wraps join(dest, src) with convenient update(rhs). + Note the addition of update(ValueType const& rhs) and reset() are so that all reducers can have a common update function + See ReduceDuplicates and ResetDuplicates ) */ +template +struct ScatterValue : + Min { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Min(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Min(other.reference()) + {} + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps and atomic_min with the update(rhs) + function. atomic_min uses the atomic_compare_exchange. This version also has the reset() function */ +template +struct ScatterValue : + Min { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Min(value_in) + {} + + KOKKOS_FORCEINLINE_FUNCTION + void atomic_min(ValueType & dest, const ValueType& src) const { + + bool success = false; + while(!success) { + ValueType dest_old = dest; + ValueType dest_new = ( dest_old > src ) ? src : dest_old; + dest_new = Kokkos::atomic_compare_exchange(&dest,dest_old,dest_new); + success = ( (dest_new - dest_old)/dest_old <= 1e-15 ); + } + } + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + atomic_min(dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + atomic_min(dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } + +}; + +/* ScatterValue is the object returned by the access operataor() of ScatterAccess, + This class inherits from the Max<> reducer and it wraps join(dest, src) with convenient update(rhs). + Note the addition of update(ValueType const& rhs) and reset() are so that all reducers can have a common update function + See ReduceDuplicates and ResetDuplicates ) */ +template +struct ScatterValue : + Max { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Max(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Max(other.reference()) + {} + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps and atomic_max with the update(rhs) + function. atomic_max uses the atomic_compare_exchange. This version also has the reset() function */ +template +struct ScatterValue : + Max { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Max(value_in) + {} + + KOKKOS_FORCEINLINE_FUNCTION + void atomic_max(ValueType & dest, const ValueType& src) const { + + bool success = false; + while(!success) { + ValueType dest_old = dest; + ValueType dest_new = ( dest_old < src ) ? src : dest_old; + dest_new = Kokkos::atomic_compare_exchange(&dest,dest_old,dest_new); + success = ( (dest_new - dest_old)/dest_old <= 1e-15 ); + } + } + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + atomic_max(dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + atomic_max(dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } + }; /* DuplicatedDataType, given a View DataType, will create a new DataType @@ -226,6 +486,18 @@ struct DuplicatedDataType { typedef typename DuplicatedDataType::value_type* value_type; }; +/* Insert integer argument pack into array */ + +template +void args_to_array(size_t* array, int pos, T dim0) { + array[pos] = dim0; +} +template +void args_to_array(size_t* array, int pos, T dim0, Dims ... dims) { + array[pos] = dim0; + args_to_array(array,pos+1,dims...); +} + /* Slice is just responsible for stuffing the correct number of Kokkos::ALL arguments on the correct side of the index in a call to subview() to get a subview where the index specified is the largest-stride one. */ @@ -304,21 +576,26 @@ struct ReduceDuplicatesBase { } }; -template -struct ReduceDuplicates : - public ReduceDuplicatesBase +/* ReduceDuplicates -- Perform reduction on destination array using strided source + * Use ScatterValue<> specific to operation to wrap destination array so that + * the reduction operation can be accessed via the update(rhs) function */ +template +struct ReduceDuplicates : + public ReduceDuplicatesBase { - typedef ReduceDuplicatesBase Base; + typedef ReduceDuplicatesBase Base; ReduceDuplicates(ValueType const* src_in, ValueType* dst_in, size_t stride_in, size_t start_in, size_t n_in, std::string const& name): Base(src_in, dst_in, stride_in, start_in, n_in, name) {} KOKKOS_FORCEINLINE_FUNCTION void operator()(size_t i) const { for (size_t j = Base::start; j < Base::n; ++j) { - Base::dst[i] += Base::src[i + Base::stride * j]; + ScatterValue sv(Base::dst[i]); + sv.update( Base::src[i + Base::stride * j] ); } } }; + template struct ResetDuplicates; @@ -347,19 +624,24 @@ struct ResetDuplicatesBase { } }; -template -struct ResetDuplicates : - public ResetDuplicatesBase +/* ResetDuplicates -- Perform reset on destination array + * Use ScatterValue<> specific to operation to wrap destination array so that + * the reset operation can be accessed via the reset() function */ +template +struct ResetDuplicates : + public ResetDuplicatesBase { - typedef ResetDuplicatesBase Base; + typedef ResetDuplicatesBase Base; ResetDuplicates(ValueType* data_in, size_t size_in, std::string const& name): Base(data_in, size_in, name) {} KOKKOS_FORCEINLINE_FUNCTION void operator()(size_t i) const { - Base::data[i] = Kokkos::reduction_identity::sum(); + ScatterValue sv(Base::data[i]); + sv.reset(); } }; + }}} // Kokkos::Impl::Experimental namespace Kokkos { @@ -519,12 +801,22 @@ public: typedef Kokkos::Impl::Experimental::ScatterValue< original_value_type, Op, override_contribution> value_type; + KOKKOS_INLINE_FUNCTION + ScatterAccess() : + view(view_type()) { + } + KOKKOS_INLINE_FUNCTION ScatterAccess(view_type const& view_in) : view(view_in) { } + KOKKOS_INLINE_FUNCTION + ~ScatterAccess() + { + } + template KOKKOS_FORCEINLINE_FUNCTION value_type operator()(Args ... args) const { @@ -608,7 +900,7 @@ public: } template - inline + KOKKOS_FORCEINLINE_FUNCTION ScatterAccess access() const { return ScatterAccess{*this}; @@ -729,14 +1021,14 @@ public: : unique_token() { size_t arg_N[8] = { - original_view.extent(0), - original_view.extent(1), - original_view.extent(2), - original_view.extent(3), - original_view.extent(4), - original_view.extent(5), - original_view.extent(6), - 0 + original_view.rank>0?original_view.extent(0):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>1?original_view.extent(1):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>2?original_view.extent(2):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>3?original_view.extent(3):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>4?original_view.extent(4):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>5?original_view.extent(5):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>6?original_view.extent(6):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + KOKKOS_IMPL_CTOR_DEFAULT_ARG }; arg_N[internal_view_type::rank - 1] = unique_token.size(); internal_view = internal_view_type( @@ -748,14 +1040,28 @@ public: } template - ScatterView(std::string const& name, Dims ... dims) - : internal_view(Kokkos::ViewAllocateWithoutInitializing(name), dims ..., unique_token.size()) - { + ScatterView(std::string const& name, Dims ... dims) { + original_view_type original_view; + size_t arg_N[8] = { + original_view.rank>0?original_view.static_extent(0):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>1?original_view.static_extent(1):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>2?original_view.static_extent(2):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>3?original_view.static_extent(3):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>4?original_view.static_extent(4):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>5?original_view.static_extent(5):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>6?original_view.static_extent(6):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + KOKKOS_IMPL_CTOR_DEFAULT_ARG + }; + Kokkos::Impl::Experimental::args_to_array(arg_N,0,dims ...); + arg_N[internal_view_type::rank - 1] = unique_token.size(); + internal_view = internal_view_type(Kokkos::ViewAllocateWithoutInitializing(name), + arg_N[0], arg_N[1], arg_N[2], arg_N[3], + arg_N[4], arg_N[5], arg_N[6], arg_N[7]); reset(); } template - inline + KOKKOS_FORCEINLINE_FUNCTION ScatterAccess access() const { return ScatterAccess{*this}; @@ -770,9 +1076,13 @@ public: } template - void contribute_into(View const& dest) const + void contribute_into(View const& dest) const { - typedef View dest_type; + typedef View dest_type; + static_assert(std::is_same< + typename dest_type::value_type, + typename original_view_type::non_const_value_type>::value, + "ScatterView deep_copy destination has wrong value_type"); static_assert(std::is_same< typename dest_type::array_layout, Kokkos::LayoutLeft>::value, @@ -891,12 +1201,14 @@ public: typedef Kokkos::Impl::Experimental::ScatterValue< original_value_type, Op, override_contribution> value_type; - inline ScatterAccess(view_type const& view_in) + KOKKOS_FORCEINLINE_FUNCTION + ScatterAccess(view_type const& view_in) : view(view_in) , thread_id(view_in.unique_token.acquire()) { } - inline ~ScatterAccess() { + KOKKOS_FORCEINLINE_FUNCTION + ~ScatterAccess() { if (thread_id != ~thread_id_type(0)) view.unique_token.release(thread_id); } @@ -926,8 +1238,9 @@ private: public: // do need to allow moves though, for the common // auto b = a.access(); - // that assignments turns into a move constructor call - inline ScatterAccess(ScatterAccess&& other) + // that assignments turns into a move constructor call + KOKKOS_FORCEINLINE_FUNCTION + ScatterAccess(ScatterAccess&& other) : view(other.view) , thread_id(other.thread_id) { diff --git a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp index 64601e6b59..aed723288f 100644 --- a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp +++ b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp @@ -437,9 +437,9 @@ public: { bool result = !erasable(); if (is_insertable_map && result) { - execution_space::fence(); + execution_space().fence(); set_flag(erasable_idx); - execution_space::fence(); + execution_space().fence(); } return result; } @@ -448,10 +448,10 @@ public: { bool result = erasable(); if (is_insertable_map && result) { - execution_space::fence(); + execution_space().fence(); Impl::UnorderedMapErase f(*this); f.apply(); - execution_space::fence(); + execution_space().fence(); reset_flag(erasable_idx); } return result; diff --git a/lib/kokkos/containers/src/Kokkos_Vector.hpp b/lib/kokkos/containers/src/Kokkos_Vector.hpp index 76c515941e..9b151d9505 100644 --- a/lib/kokkos/containers/src/Kokkos_Vector.hpp +++ b/lib/kokkos/containers/src/Kokkos_Vector.hpp @@ -121,12 +121,12 @@ public: if( DV::template need_sync() ) { set_functor_host f(DV::h_view,val); parallel_for(n,f); - DV::t_host::execution_space::fence(); + typename DV::t_host::execution_space().fence(); DV::template modify(); } else { set_functor f(DV::d_view,val); parallel_for(n,f); - DV::t_dev::execution_space::fence(); + typename DV::t_dev::execution_space().fence(); DV::template modify(); } } diff --git a/lib/kokkos/containers/unit_tests/CMakeLists.txt b/lib/kokkos/containers/unit_tests/CMakeLists.txt index 0f94afec8c..8564bd9ddd 100644 --- a/lib/kokkos/containers/unit_tests/CMakeLists.txt +++ b/lib/kokkos/containers/unit_tests/CMakeLists.txt @@ -86,6 +86,31 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( ) ENDIF() +IF(Kokkos_ENABLE_HPX) +TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_HPX + SOURCES + UnitTestMain.cpp + hpx/TestHPX_BitSet.cpp + hpx/TestHPX_DualView.cpp + hpx/TestHPX_DynamicView.cpp + hpx/TestHPX_DynRankViewAPI_generic.cpp + hpx/TestHPX_DynRankViewAPI_rank12345.cpp + hpx/TestHPX_DynRankViewAPI_rank67.cpp + hpx/TestHPX_ErrorReporter.cpp + hpx/TestHPX_OffsetView.cpp + hpx/TestHPX_ScatterView.cpp + hpx/TestHPX_StaticCrsGraph.cpp + hpx/TestHPX_UnorderedMap.cpp + hpx/TestHPX_Vector.cpp + hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) +ENDIF() + IF(Kokkos_ENABLE_Cuda) TRIBITS_ADD_EXECUTABLE_AND_TEST( UnitTest_Cuda diff --git a/lib/kokkos/containers/unit_tests/Makefile b/lib/kokkos/containers/unit_tests/Makefile index c0e5d2820c..a7e0233f8a 100644 --- a/lib/kokkos/containers/unit_tests/Makefile +++ b/lib/kokkos/containers/unit_tests/Makefile @@ -4,6 +4,7 @@ GTEST_PATH = ../../TPL/gtest vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/openmp +vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/hpx vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/serial vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/threads vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/rocm @@ -106,6 +107,25 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) TEST_TARGETS += test-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = UnitTestMain.o gtest-all.o + OBJ_HPX += TestHPX_BitSet.o + OBJ_HPX += TestHPX_DualView.o + OBJ_HPX += TestHPX_DynamicView.o + OBJ_HPX += TestHPX_DynRankViewAPI_generic.o + OBJ_HPX += TestHPX_DynRankViewAPI_rank12345.o + OBJ_HPX += TestHPX_DynRankViewAPI_rank67.o + OBJ_HPX += TestHPX_ErrorReporter.o + OBJ_HPX += TestHPX_OffsetView.o + OBJ_HPX += TestHPX_ScatterView.o + OBJ_HPX += TestHPX_StaticCrsGraph.o + OBJ_HPX += TestHPX_UnorderedMap.o + OBJ_HPX += TestHPX_Vector.o + OBJ_HPX += TestHPX_ViewCtorPropEmbeddedDim.o + TARGETS += KokkosContainers_UnitTest_HPX + TEST_TARGETS += test-hpx +endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL = UnitTestMain.o gtest-all.o OBJ_SERIAL += TestSerial_BitSet.o @@ -137,6 +157,9 @@ KokkosContainers_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosContainers_UnitTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_OpenMP +KokkosContainers_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_HPX + KokkosContainers_UnitTest_Serial: $(OBJ_SERIAL) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_SERIAL) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_Serial @@ -152,6 +175,9 @@ test-threads: KokkosContainers_UnitTest_Threads test-openmp: KokkosContainers_UnitTest_OpenMP ./KokkosContainers_UnitTest_OpenMP +test-hpx: KokkosContainers_UnitTest_HPX + ./KokkosContainers_UnitTest_HPX + test-serial: KokkosContainers_UnitTest_Serial ./KokkosContainers_UnitTest_Serial diff --git a/lib/kokkos/containers/unit_tests/TestBitset.hpp b/lib/kokkos/containers/unit_tests/TestBitset.hpp index 6200124644..371c0288b1 100644 --- a/lib/kokkos/containers/unit_tests/TestBitset.hpp +++ b/lib/kokkos/containers/unit_tests/TestBitset.hpp @@ -66,7 +66,7 @@ struct TestBitset unsigned testit(unsigned collisions) { - execution_space::fence(); + execution_space().fence(); unsigned count = 0; Kokkos::parallel_reduce( m_bitset.size()*collisions, *this, count); @@ -114,7 +114,7 @@ struct TestBitsetTest unsigned testit() { - execution_space::fence(); + execution_space().fence(); unsigned count = 0; Kokkos::parallel_reduce( m_bitset.size(), *this, count); @@ -151,7 +151,7 @@ struct TestBitsetAny unsigned testit() { - execution_space::fence(); + execution_space().fence(); unsigned count = 0; Kokkos::parallel_reduce( m_bitset.size(), *this, count); diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp index 6684a55452..13e56c9f8d 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp @@ -1276,6 +1276,7 @@ public: Kokkos::deep_copy( dx , hx ); Kokkos::deep_copy( dy , dx ); Kokkos::deep_copy( hy , dy ); + Kokkos::fence(); for ( size_t ip = 0 ; ip < N0 ; ++ip ) { for ( size_t i1 = 0 ; i1 < N1 ; ++i1 ) { @@ -1286,6 +1287,7 @@ public: Kokkos::deep_copy( dx , T(0) ); Kokkos::deep_copy( hx , dx ); + Kokkos::fence(); for ( size_t ip = 0 ; ip < N0 ; ++ip ) { for ( size_t i1 = 0 ; i1 < N1 ; ++i1 ) { diff --git a/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp b/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp index ecb7542232..7e48089b43 100644 --- a/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp +++ b/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp @@ -162,6 +162,7 @@ struct ErrorReporterDriver : public ErrorReporterDriverBase void execute(int reporter_capacity, int test_size) { Kokkos::parallel_for(Kokkos::RangePolicy(0,test_size), *this); + Kokkos::fence(); driver_base::check_expectations(reporter_capacity, test_size); } @@ -194,6 +195,7 @@ struct ErrorReporterDriverUseLambda : public ErrorReporterDriverBase driver_base::m_errorReporter.add_report(work_idx, report); } }); + Kokkos::fence(); driver_base::check_expectations(reporter_capacity, test_size); } diff --git a/lib/kokkos/containers/unit_tests/TestScatterView.hpp b/lib/kokkos/containers/unit_tests/TestScatterView.hpp index d402a91b9f..a9d97b32f3 100644 --- a/lib/kokkos/containers/unit_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/unit_tests/TestScatterView.hpp @@ -48,79 +48,387 @@ namespace Test { +template +struct test_scatter_view_impl_cls; + template -void test_scatter_view_config(int n) +struct test_scatter_view_impl_cls { - Kokkos::View original_view("original_view", n); - { - auto scatter_view = Kokkos::Experimental::create_scatter_view - < Kokkos::Experimental::ScatterSum - , duplication - , contribution - > (original_view); -#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) - auto policy = Kokkos::RangePolicy(0, n); - auto f = KOKKOS_LAMBDA(int i) { +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterSum + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 0.0; + host_view(i, 1) = 0.0; + host_view(i, 2) = 0.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Sum"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { auto scatter_access = scatter_view.access(); auto scatter_access_atomic = scatter_view.template access(); for (int j = 0; j < 10; ++j) { - auto k = (i + j) % n; + auto k = (i + j) % scatterSize; scatter_access(k, 0) += 4.2; scatter_access_atomic(k, 1) += 2.0; scatter_access(k, 2) += 1.0; } - }; - Kokkos::parallel_for(policy, f, "scatter_view_test"); -#endif - Kokkos::Experimental::contribute(original_view, scatter_view); - scatter_view.reset_except(original_view); -#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) - Kokkos::parallel_for(policy, f, "scatter_view_test"); -#endif - Kokkos::Experimental::contribute(original_view, scatter_view); - } -#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) - Kokkos::fence(); - auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), original_view); - Kokkos::fence(); - for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { - auto val0 = host_view(i, 0); - auto val1 = host_view(i, 1); - auto val2 = host_view(i, 2); - EXPECT_TRUE(std::fabs((val0 - 84.0) / 84.0) < 1e-15); - EXPECT_TRUE(std::fabs((val1 - 40.0) / 40.0) < 1e-15); - EXPECT_TRUE(std::fabs((val2 - 20.0) / 20.0) < 1e-15); - } -#endif - { - Kokkos::Experimental::ScatterView - < double*[3] - , Layout - , ExecSpace - , Kokkos::Experimental::ScatterSum - , duplication - , contribution - > - persistent_view("persistent", n); - auto result_view = persistent_view.subview(); - contribute(result_view, persistent_view); - } -} + } -template + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 84.0) / 84.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 40.0) / 40.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 20.0) / 20.0) < 1e-14); + } + } +}; + + +template +struct test_scatter_view_impl_cls +{ +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterProd + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 1.0; + host_view(i, 1) = 1.0; + host_view(i, 2) = 1.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { + auto scatter_access = scatter_view.access(); + auto scatter_access_atomic = scatter_view.template access(); + for (int j = 0; j < 4; ++j) { + auto k = (i + j) % scatterSize; + scatter_access(k, 0) *= 4.0; + scatter_access_atomic(k, 1) *= 2.0; + scatter_access(k, 2) *= 1.0; + } + } + + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 65536.0) / 65536.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 256.0) / 256.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 1.0) / 1.0) < 1e-14); + } + } +}; + + +template +struct test_scatter_view_impl_cls +{ +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterMin + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 999999.0; + host_view(i, 1) = 999999.0; + host_view(i, 2) = 999999.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { + auto scatter_access = scatter_view.access(); + auto scatter_access_atomic = scatter_view.template access(); + for (int j = 0; j < 4; ++j) { + auto k = (i + j) % scatterSize; + scatter_access(k, 0).update((double)(j+1)*4); + scatter_access_atomic(k, 1).update((double)(j+1)*2.0); + scatter_access(k, 2).update((double)(j+1)*1.0); + } + } + + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 4.0) / 4.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 2.0) / 2.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 1.0) / 1.0) < 1e-14); + } + } +}; + + +template +struct test_scatter_view_impl_cls +{ +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterMax + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 0.0; + host_view(i, 1) = 0.0; + host_view(i, 2) = 0.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { + auto scatter_access = scatter_view.access(); + auto scatter_access_atomic = scatter_view.template access(); + for (int j = 0; j < 4; ++j) { + auto k = (i + j) % scatterSize; + scatter_access(k, 0).update((double)(j+1)*4); + scatter_access_atomic(k, 1).update((double)(j+1)*2.0); + scatter_access(k, 2).update((double)(j+1)*1.0); + } + } + + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 16.0) / 16.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 8.0) / 8.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 4.0) / 4.0) < 1e-14); + } + } +}; + + + +template +struct test_scatter_view_config +{ + public: + typedef typename test_scatter_view_impl_cls::scatter_view_type scatter_view_def; + typedef typename test_scatter_view_impl_cls::orig_view_type orig_view_def; + + test_scatter_view_config() { + } + + void run_test(int n) + { + //Test creation via create_scatter_view + { + orig_view_def original_view("original_view", n); + scatter_view_def scatter_view = Kokkos::Experimental::create_scatter_view + < op + , duplication + , contribution + > (original_view); + + test_scatter_view_impl_cls scatter_view_test_impl(scatter_view); + scatter_view_test_impl.initialize(original_view); + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + scatter_view.reset_except(original_view); + + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + Kokkos::fence(); + + scatter_view_test_impl.validateResults(original_view); + + { + scatter_view_def persistent_view("persistent", n); + auto result_view = persistent_view.subview(); + contribute(result_view, persistent_view); + Kokkos::fence(); + } + } + //Test creation via constructor + { + orig_view_def original_view("original_view", n); + scatter_view_def scatter_view(original_view); + + test_scatter_view_impl_cls scatter_view_test_impl(scatter_view); + scatter_view_test_impl.initialize(original_view); + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + scatter_view.reset_except(original_view); + + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + Kokkos::fence(); + + scatter_view_test_impl.validateResults(original_view); + + { + scatter_view_def persistent_view("persistent", n); + auto result_view = persistent_view.subview(); + contribute(result_view, persistent_view); + Kokkos::fence(); + } + } + } + +}; + + +template struct TestDuplicatedScatterView { TestDuplicatedScatterView(int n) { + // ScatterSum test test_scatter_view_config(n); + Kokkos::Experimental::ScatterNonAtomic, + ScatterType> test_sv_right_config; + test_sv_right_config.run_test(n); + test_scatter_view_config test_sv_left_config; + test_sv_left_config.run_test(n); } }; #ifdef KOKKOS_ENABLE_CUDA // disable duplicated instantiation with CUDA until // UniqueToken can support it -template <> -struct TestDuplicatedScatterView { +template +struct TestDuplicatedScatterView { TestDuplicatedScatterView(int) { } }; @@ -129,14 +437,14 @@ struct TestDuplicatedScatterView { #ifdef KOKKOS_ENABLE_ROCM // disable duplicated instantiation with ROCm until // UniqueToken can support it -template <> -struct TestDuplicatedScatterView { +template +struct TestDuplicatedScatterView { TestDuplicatedScatterView(int) { } }; #endif -template +template void test_scatter_view(int n) { // all of these configurations should compile okay, but only some of them are @@ -149,29 +457,47 @@ void test_scatter_view(int n) if (unique_token.size() == 1) { test_scatter_view_config(n); + Kokkos::Experimental::ScatterNonAtomic, + ScatterType> test_sv_config; + test_sv_config.run_test(n); } #ifdef KOKKOS_ENABLE_SERIAL if (!std::is_same::value) { #endif test_scatter_view_config(n); + Kokkos::Experimental::ScatterAtomic, + ScatterType> test_sv_config; + test_sv_config.run_test(n); #ifdef KOKKOS_ENABLE_SERIAL } #endif - - TestDuplicatedScatterView duptest(n); + // with hundreds of threads we were running out of memory. + // limit (n) so that duplication doesn't exceed 8GB + constexpr std::size_t maximum_allowed_total_bytes = 8ull * 1024ull * 1024ull * 1024ull; + std::size_t const maximum_allowed_copy_bytes = maximum_allowed_total_bytes / std::size_t(unique_token.size()); + constexpr std::size_t bytes_per_value = sizeof(double) * 3; + std::size_t const maximum_allowed_copy_values = maximum_allowed_copy_bytes / bytes_per_value; + n = std::min(n, int(maximum_allowed_copy_values)); + TestDuplicatedScatterView duptest(n); } TEST_F( TEST_CATEGORY, scatterview) { #ifndef KOKKOS_ENABLE_ROCM - test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + // tests were timing out in DEBUG mode, reduce the amount of work #ifdef KOKKOS_ENABLE_DEBUG - test_scatter_view(100000); + int big_n = 100 * 1000; #else - test_scatter_view(10000000); + int big_n = 10 * 1000 * 1000; #endif + test_scatter_view(big_n); + test_scatter_view(big_n); + test_scatter_view(big_n); + test_scatter_view(big_n); #endif } diff --git a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp index 426db1dbf0..2d34267df3 100644 --- a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp +++ b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp @@ -69,7 +69,7 @@ struct TestInsert void testit( bool rehash_on_fail = true ) { - execution_space::fence(); + execution_space().fence(); uint32_t failed_count = 0; do { @@ -82,7 +82,7 @@ struct TestInsert } } while (rehash_on_fail && failed_count > 0u); - execution_space::fence(); + execution_space().fence(); } @@ -122,9 +122,9 @@ struct TestInsert void testit() { - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for(m_num_erase, *this); - execution_space::fence(); + execution_space().fence(); } KOKKOS_INLINE_FUNCTION @@ -161,9 +161,9 @@ struct TestInsert void testit(value_type &errors) { - execution_space::execution_space::fence(); + execution_space().fence(); Kokkos::parallel_reduce(m_map.capacity(), *this, errors); - execution_space::execution_space::fence(); + execution_space().fence(); } KOKKOS_INLINE_FUNCTION @@ -247,7 +247,7 @@ void test_failed_insert( uint32_t num_nodes) map_type map(num_nodes); Impl::TestInsert test_insert(map, 2u*num_nodes, 1u); test_insert.testit(false /*don't rehash on fail*/); - Device::execution_space::fence(); + typename Device::execution_space().fence(); EXPECT_TRUE( map.failed_insert() ); } diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp new file mode 100644 index 0000000000..cec24e00c7 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp new file mode 100644 index 0000000000..358b42d1aa --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp @@ -0,0 +1,65 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TEST_HPX_HPP +#define KOKKOS_TEST_HPX_HPP + +#include + +namespace Test { + +class hpx : public ::testing::Test { +protected: + static void SetUpTestCase() { + } + + static void TearDownTestCase() { + } +}; + +} // namespace Test + +#define TEST_CATEGORY hpx +#define TEST_EXECSPACE Kokkos::Experimental::HPX + +#endif diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp new file mode 100644 index 0000000000..80af9dc33a --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp new file mode 100644 index 0000000000..95d49c8acf --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp new file mode 100644 index 0000000000..72e0bc6616 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp new file mode 100644 index 0000000000..5a104f0de2 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp new file mode 100644 index 0000000000..718b322684 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp new file mode 100644 index 0000000000..ea819ae343 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp new file mode 100644 index 0000000000..4d3684923f --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp new file mode 100644 index 0000000000..6a871cc121 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp new file mode 100644 index 0000000000..fbb70a762b --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp new file mode 100644 index 0000000000..7e7aad309f --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp new file mode 100644 index 0000000000..5fb3664197 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp new file mode 100644 index 0000000000..fb9c263c83 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/cmake/Dependencies.cmake b/lib/kokkos/core/cmake/Dependencies.cmake index 8d9872725e..9ad7660bdf 100644 --- a/lib/kokkos/core/cmake/Dependencies.cmake +++ b/lib/kokkos/core/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC QTHREADS DLlib + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC QTHREADS DLlib HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/core/perf_test/CMakeLists.txt b/lib/kokkos/core/perf_test/CMakeLists.txt index d9c0f89413..d92462a357 100644 --- a/lib/kokkos/core/perf_test/CMakeLists.txt +++ b/lib/kokkos/core/perf_test/CMakeLists.txt @@ -47,6 +47,7 @@ TRIBITS_ADD_EXECUTABLE( PerformanceTest_TaskDAG SOURCES test_taskdag.cpp COMM serial mpi + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) TRIBITS_ADD_TEST( diff --git a/lib/kokkos/core/perf_test/Makefile b/lib/kokkos/core/perf_test/Makefile index a0ce1e2c31..ca98ca6dde 100644 --- a/lib/kokkos/core/perf_test/Makefile +++ b/lib/kokkos/core/perf_test/Makefile @@ -30,6 +30,7 @@ TARGETS = # OBJ_PERF = PerfTestMain.o gtest-all.o +OBJ_PERF += PerfTest_ExecSpacePartitioning.o OBJ_PERF += PerfTestGramSchmidt.o OBJ_PERF += PerfTestHexGrad.o OBJ_PERF += PerfTest_CustomReduction.o diff --git a/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp b/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp index bb2fb5fce5..ff9bf5a91b 100644 --- a/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp +++ b/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp @@ -44,6 +44,8 @@ #ifndef KOKKOS_BLAS_KERNELS_HPP #define KOKKOS_BLAS_KERNELS_HPP +#include + namespace Kokkos { template< class ConstVectorType , @@ -123,15 +125,10 @@ struct Dot { typedef typename Device::execution_space execution_space ; - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< Type::Rank > >::type ok_rank ; + static_assert( static_cast(Type::Rank) == static_cast(1), + "Dot static_assert Fail: Rank != 1"); -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename Type::execution_space >::type ok_device ;*/ - typedef double value_type ; #if 1 @@ -164,13 +161,8 @@ struct DotSingle { typedef typename Device::execution_space execution_space ; - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< Type::Rank > >::type ok_rank ; - -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename Type::execution_space >::type ok_device ;*/ + static_assert( static_cast(Type::Rank) == static_cast(1), + "DotSingle static_assert Fail: Rank != 1"); typedef double value_type ; @@ -204,25 +196,11 @@ struct Scale { typedef typename Device::execution_space execution_space ; -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename ScalarType::execution_space >::type - ok_scalar_device ; + static_assert( static_cast(ScalarType::Rank) == static_cast(0), + "Scale static_assert Fail: ScalarType::Rank != 0"); - typedef typename - Impl::StaticAssertSame< execution_space , - typename VectorType::execution_space >::type - ok_vector_device ;*/ - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 0 > , - Impl::unsigned_< ScalarType::Rank > >::type - ok_scalar_rank ; - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< VectorType::Rank > >::type - ok_vector_rank ; + static_assert( static_cast(VectorType::Rank) == static_cast(1), + "Scale static_assert Fail: VectorType::Rank != 1"); #if 1 typename ScalarType::const_type alpha ; @@ -251,35 +229,14 @@ struct AXPBY { typedef typename Device::execution_space execution_space ; -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename ScalarType::execution_space >::type - ok_scalar_device ; + static_assert( static_cast(ScalarType::Rank) == static_cast(0), + "AXPBY static_assert Fail: ScalarType::Rank != 0"); - typedef typename - Impl::StaticAssertSame< execution_space , - typename ConstVectorType::execution_space >::type - ok_const_vector_device ; + static_assert( static_cast(ConstVectorType::Rank) == static_cast(1), + "AXPBY static_assert Fail: ConstVectorType::Rank != 1"); - typedef typename - Impl::StaticAssertSame< execution_space , - typename VectorType::execution_space >::type - ok_vector_device ;*/ - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 0 > , - Impl::unsigned_< ScalarType::Rank > >::type - ok_scalar_rank ; - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< ConstVectorType::Rank > >::type - ok_const_vector_rank ; - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< VectorType::Rank > >::type - ok_vector_rank ; + static_assert( static_cast(VectorType::Rank) == static_cast(1), + "AXPBY static_assert Fail: VectorType::Rank != 1"); #if 1 typename ScalarType::const_type alpha , beta ; diff --git a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp index b169b02903..d812b16d85 100644 --- a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp +++ b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp @@ -183,7 +183,7 @@ struct ModifiedGramSchmidt } } - execution_space::fence(); + execution_space().fence(); return timer.seconds(); } diff --git a/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp b/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp index b228dd2e2e..03285a375c 100644 --- a/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp +++ b/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp @@ -253,12 +253,12 @@ struct HexGrad double dt_min = 0 ; Kokkos::parallel_for( count , Init( coord ) ); - execution_space::fence(); + execution_space().fence(); for ( int i = 0 ; i < iter ; ++i ) { Kokkos::Timer timer ; Kokkos::parallel_for( count , HexGrad( coord , grad ) ); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; diff --git a/lib/kokkos/core/perf_test/PerfTestMDRange.hpp b/lib/kokkos/core/perf_test/PerfTestMDRange.hpp index 51affa6a2e..f433451f78 100644 --- a/lib/kokkos/core/perf_test/PerfTestMDRange.hpp +++ b/lib/kokkos/core/perf_test/PerfTestMDRange.hpp @@ -125,15 +125,15 @@ struct MultiDimRangePerf3D Kokkos::MDRangePolicy, execution_space > policy(point_type{{0,0,0}},point_type{{icount,jcount,kcount}},tile_type{{Ti,Tj,Tk}} ); Kokkos::parallel_for( policy_initA, Init(Atest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest, icount+2, jcount+2, kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for( policy, FunctorType(Atest, Btest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; @@ -189,15 +189,15 @@ struct MultiDimRangePerf3D Kokkos::MDRangePolicy, execution_space > policy({{0,0,0}},{{icount,jcount,kcount}},{{Ti,Tj,Tk}} ); Kokkos::parallel_for( policy_initA, Init(Atest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest, icount+2, jcount+2, kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for( policy, FunctorType(Atest, Btest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; @@ -368,15 +368,15 @@ struct RangePolicyCollapseTwo double dt_min = 0; Kokkos::parallel_for( policy, Init(Atest,icount,jcount,kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest,icount+2,jcount+2,kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for(policy, FunctorType(Atest, Btest, icount, jcount, kcount)); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; @@ -513,15 +513,15 @@ struct RangePolicyCollapseAll double dt_min = 0; Kokkos::parallel_for( policy, Init(Atest,icount,jcount,kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest,icount+2,jcount+2,kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for(policy, FunctorType(Atest, Btest, icount, jcount, kcount)); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; diff --git a/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp b/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp new file mode 100644 index 0000000000..2fc889beed --- /dev/null +++ b/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp @@ -0,0 +1,564 @@ +#include +#include +#include + + +namespace Test { + +namespace { + template + struct SpaceInstance { + static ExecSpace create() { + return ExecSpace(); + } + static void destroy(ExecSpace&) { + } + static bool overlap() { + return false; + } + }; + + #ifndef KOKKOS_ENABLE_DEBUG + #ifdef KOKKOS_ENABLE_CUDA + template<> + struct SpaceInstance { + static Kokkos::Cuda create() { + cudaStream_t stream; + cudaStreamCreate(&stream); + return Kokkos::Cuda(stream); + } + static void destroy(Kokkos::Cuda& space) { + cudaStream_t stream = space.cuda_stream(); + cudaStreamDestroy(stream); + } + static bool overlap() { + bool value = true; + auto local_rank_str = std::getenv("CUDA_LAUNCH_BLOCKING"); + if(local_rank_str) { + value = (std::atoi(local_rank_str)==0); + } + return value; + } + }; + #endif + #endif +} + +struct FunctorRange { + int M,R; + Kokkos::View a; + FunctorRange(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i) const { + for(int r=0;r a; + FunctorMDRange(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i, const int) const { + for(int j=0;j a; + FunctorTeam(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const Kokkos::TeamPolicy::member_type& team) const { + int i = team.league_rank(); + for(int r=0;r a; + FunctorRangeReduce(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i, double& tmp) const { + for(int r=0;r a; + FunctorMDRangeReduce(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i, const int, double& tmp) const { + for(int j=0;j a; + FunctorTeamReduce(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const Kokkos::TeamPolicy::member_type& team, double& tmp) const { + int i = team.league_rank(); + for(int r=0;r::create(); + TEST_EXECSPACE space2 = SpaceInstance::create(); + + Kokkos::View a("A",N,M); + FunctorRange f(M,R,a); + FunctorRangeReduce fr(M,R,a); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel0", + Kokkos::RangePolicy(0,N), FunctorRange(M,R,a)); + + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel1", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space1,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel2", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space2,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + Kokkos::Timer timer; + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel3", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel4", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel5", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space1,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorRange(M,R,a)); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel6", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space2,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorRange(M,R,a)); + Kokkos::fence(); + double time_overlap = timer.seconds(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel7", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel8", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + double time_end = timer.seconds(); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE( (time_end > 1.5*time_overlap) ); + } + printf("Time RangePolicy: NonOverlap: %lf Time Overlap: %lf\n",time_end,time_overlap); + + Kokkos::View result("result"); + Kokkos::View result1("result1"); + Kokkos::View result2("result2"); + Kokkos::View h_result("h_result"); + Kokkos::View h_result1("h_result1"); + Kokkos::View h_result2("h_result2"); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_fenced = timer.seconds(); + Kokkos::deep_copy(h_result,result); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + double time_not_fenced = timer.seconds(); + Kokkos::fence(); + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_fenced>2.0*time_not_fenced); + } + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_no_overlapped_reduce = timer.seconds(); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space1,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result1); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space2,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result2); + Kokkos::fence(); + double time_overlapped_reduce = timer.seconds(); + + Kokkos::deep_copy(h_result2,result2); + Kokkos::deep_copy(h_result1,result1); + + ASSERT_EQ(h_result1(),h_result()); + ASSERT_EQ(h_result2(),h_result()); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_overlapped_reduce < 1.5*time_no_overlapped_reduce); + } + printf("Time RangePolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n",time_no_overlapped_reduce,time_overlapped_reduce); + SpaceInstance::destroy(space1); + SpaceInstance::destroy(space2); +} + +TEST_F( default_exec, overlap_mdrange_policy ) { + int N = 200; + int M = 10000; + int R = 10; + + TEST_EXECSPACE space; + TEST_EXECSPACE space1 = SpaceInstance::create(); + TEST_EXECSPACE space2 = SpaceInstance::create(); + + Kokkos::View a("A",N,M); + FunctorMDRange f(M,R,a); + FunctorMDRangeReduce fr(M,R,a); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel0", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>({0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorMDRange(M,R,a)); + + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel1", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space1,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel2", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space2,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + Kokkos::Timer timer; + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel3", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel4", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel5", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space1,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorMDRange(M,R,a)); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel6", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space2,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorMDRange(M,R,a)); + Kokkos::fence(); + double time_overlap = timer.seconds(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel7", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel8", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + double time_end = timer.seconds(); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE( (time_end > 1.5*time_overlap) ); + } + printf("Time MDRangePolicy: NonOverlap: %lf Time Overlap: %lf\n",time_end,time_overlap); + + Kokkos::View result("result"); + Kokkos::View result1("result1"); + Kokkos::View result2("result2"); + Kokkos::View h_result("h_result"); + Kokkos::View h_result1("h_result1"); + Kokkos::View h_result2("h_result2"); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_fenced = timer.seconds(); + Kokkos::deep_copy(h_result,result); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + double time_not_fenced = timer.seconds(); + Kokkos::fence(); + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_fenced>2.0*time_not_fenced); + } + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_no_overlapped_reduce = timer.seconds(); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space1,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result1); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space2,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result2); + Kokkos::fence(); + double time_overlapped_reduce = timer.seconds(); + + Kokkos::deep_copy(h_result2,result2); + Kokkos::deep_copy(h_result1,result1); + + ASSERT_EQ(h_result1(),h_result()); + ASSERT_EQ(h_result2(),h_result()); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_overlapped_reduce < 1.5*time_no_overlapped_reduce); + } + printf("Time MDRangePolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n",time_no_overlapped_reduce,time_overlapped_reduce); + SpaceInstance::destroy(space2); + SpaceInstance::destroy(space1); + +} + +TEST_F( default_exec, overlap_team_policy ) { + int N = 20; + int M = 1000000; + int R = 10; + + TEST_EXECSPACE space; + TEST_EXECSPACE space1 = SpaceInstance::create(); + TEST_EXECSPACE space2 = SpaceInstance::create(); + + Kokkos::View a("A",N,M); + FunctorTeam f(M,R,a); + FunctorTeamReduce fr(M,R,a); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel0", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorTeam(M,R,a)); + + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel1", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space1,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel2", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space2,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + Kokkos::Timer timer; + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel3", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel4", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel5", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space1,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorTeam(M,R,a)); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel6", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space2,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorTeam(M,R,a)); + Kokkos::fence(); + double time_overlap = timer.seconds(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel7", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel8", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + double time_end = timer.seconds(); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE( (time_end > 1.5*time_overlap) ); + } + printf("Time TeamPolicy: NonOverlap: %lf Time Overlap: %lf\n",time_end,time_overlap); + + Kokkos::View result("result"); + Kokkos::View result1("result1"); + Kokkos::View result2("result2"); + Kokkos::View h_result("h_result"); + Kokkos::View h_result1("h_result1"); + Kokkos::View h_result2("h_result2"); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_fenced = timer.seconds(); + Kokkos::deep_copy(h_result,result); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + double time_not_fenced = timer.seconds(); + Kokkos::fence(); + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_fenced>2.0*time_not_fenced); + } + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_no_overlapped_reduce = timer.seconds(); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space1,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result1); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space2,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result2); + Kokkos::fence(); + double time_overlapped_reduce = timer.seconds(); + + Kokkos::deep_copy(h_result2,result2); + Kokkos::deep_copy(h_result1,result1); + + ASSERT_EQ(h_result1(),h_result()); + ASSERT_EQ(h_result2(),h_result()); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_overlapped_reduce < 1.5*time_no_overlapped_reduce); + } + printf("Time TeamPolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n",time_no_overlapped_reduce,time_overlapped_reduce); + SpaceInstance::destroy(space1); + SpaceInstance::destroy(space2); +} +} diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp b/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp index 7d64591d9f..685194c150 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp @@ -121,6 +121,7 @@ void run_allocateview_tests(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a_ptr[i] = 0.0; }); + Kokkos::fence(); Kokkos::kokkos_free(a_ptr); } time_raw = timer.seconds()/R; diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp b/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp index 3f46187957..eff31c69bb 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp @@ -95,6 +95,7 @@ void run_deepcopyview_tests123(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -135,6 +136,7 @@ void run_deepcopyview_tests45(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -169,6 +171,7 @@ void run_deepcopyview_tests6(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -202,6 +205,7 @@ void run_deepcopyview_tests7(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -235,6 +239,7 @@ void run_deepcopyview_tests8(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp b/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp index c50d13d1ed..b17356f0c8 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp @@ -90,6 +90,7 @@ void run_fillview_tests123(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -126,6 +127,7 @@ void run_fillview_tests45(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -157,6 +159,7 @@ void run_fillview_tests6(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -187,6 +190,7 @@ void run_fillview_tests7(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -217,6 +221,7 @@ void run_fillview_tests8(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp b/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp index 2720f4855c..b5019b467a 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp @@ -95,7 +95,9 @@ void run_resizeview_tests123(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -143,7 +145,9 @@ void run_resizeview_tests45(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -181,7 +185,9 @@ void run_resizeview_tests6(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -218,7 +224,9 @@ void run_resizeview_tests7(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -255,7 +263,9 @@ void run_resizeview_tests8(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif diff --git a/lib/kokkos/core/perf_test/test_atomic.cpp b/lib/kokkos/core/perf_test/test_atomic.cpp index 6bb22e4e30..24e4f015d3 100644 --- a/lib/kokkos/core/perf_test/test_atomic.cpp +++ b/lib/kokkos/core/perf_test/test_atomic.cpp @@ -69,7 +69,7 @@ typedef Kokkos::DefaultExecutionSpace exec_space; #define WHITE 8 void textcolor(int attr, int fg, int bg) -{ char command[13]; +{ char command[40]; /* Command is the control command to the terminal */ sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40); @@ -85,7 +85,7 @@ struct ZeroFunctor{ typedef typename Kokkos::View::HostMirror h_type; type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { data() = 0; } }; @@ -101,7 +101,7 @@ struct AddFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { Kokkos::atomic_fetch_add(&data(),(T)1); } }; @@ -113,12 +113,12 @@ T AddLoop(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct AddFunctor f_add; f_add.data = data; Kokkos::parallel_for(loop,f_add); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -132,7 +132,7 @@ struct AddNonAtomicFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { data()+=(T)1; } }; @@ -145,12 +145,12 @@ T AddLoopNonAtomic(int loop) { f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct AddNonAtomicFunctor f_add; f_add.data = data; Kokkos::parallel_for(loop,f_add); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -178,7 +178,7 @@ struct CASFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { T old = data(); T newval, assumed; do { @@ -197,12 +197,12 @@ T CASLoop(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct CASFunctor f_cas; f_cas.data = data; Kokkos::parallel_for(loop,f_cas); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -217,7 +217,7 @@ struct CASNonAtomicFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { volatile T assumed; volatile T newval; bool fail=1; @@ -240,12 +240,12 @@ T CASLoopNonAtomic(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct CASNonAtomicFunctor f_cas; f_cas.data = data; Kokkos::parallel_for(loop,f_cas); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -296,19 +296,19 @@ T ExchLoop(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); typename ZeroFunctor::type data2("Data"); typename ZeroFunctor::h_type h_data2("HData"); f_zero.data = data2; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct ExchFunctor f_exch; f_exch.data = data; f_exch.data2 = data2; Kokkos::parallel_for(loop,f_exch); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); Kokkos::deep_copy(h_data2,data2); @@ -339,19 +339,19 @@ T ExchLoopNonAtomic(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); typename ZeroFunctor::type data2("Data"); typename ZeroFunctor::h_type h_data2("HData"); f_zero.data = data2; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct ExchNonAtomicFunctor f_exch; f_exch.data = data; f_exch.data2 = data2; Kokkos::parallel_for(loop,f_exch); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); Kokkos::deep_copy(h_data2,data2); diff --git a/lib/kokkos/core/perf_test/test_mempool.cpp b/lib/kokkos/core/perf_test/test_mempool.cpp index 9fd58eda91..c47730ec69 100644 --- a/lib/kokkos/core/perf_test/test_mempool.cpp +++ b/lib/kokkos/core/perf_test/test_mempool.cpp @@ -153,6 +153,7 @@ struct TestFunctor { typedef Kokkos::RangePolicy< ExecSpace , TagDel > policy ; Kokkos::parallel_for( policy(0,range_iter), *this ); + Kokkos::fence(); } //---------------------------------------- diff --git a/lib/kokkos/core/perf_test/test_taskdag.cpp b/lib/kokkos/core/perf_test/test_taskdag.cpp index 8d5e1c475f..41198edfe1 100644 --- a/lib/kokkos/core/perf_test/test_taskdag.cpp +++ b/lib/kokkos/core/perf_test/test_taskdag.cpp @@ -92,27 +92,26 @@ long fib_alloc_count( long n ) return count[ n & mask ]; } -template< class Space > +template< class Scheduler > struct TestFib { - using Scheduler = Kokkos::TaskScheduler< Space > ; using MemorySpace = typename Scheduler::memory_space ; using MemberType = typename Scheduler::member_type ; - using FutureType = Kokkos::Future< long , Space > ; + using FutureType = Kokkos::BasicFuture< long , Scheduler > ; typedef long value_type ; - Scheduler sched ; FutureType dep[2] ; const value_type n ; KOKKOS_INLINE_FUNCTION - TestFib( const Scheduler & arg_sched , const value_type arg_n ) - : sched( arg_sched ), dep{} , n( arg_n ) {} + TestFib( const value_type arg_n ) + : dep{} , n( arg_n ) {} KOKKOS_INLINE_FUNCTION - void operator()( const MemberType & , value_type & result ) noexcept + void operator()( MemberType & member, value_type & result ) noexcept { + auto& sched = member.scheduler(); if ( n < 2 ) { result = n ; } @@ -126,13 +125,13 @@ struct TestFib { dep[1] = Kokkos::task_spawn ( Kokkos::TaskSingle( sched, Kokkos::TaskPriority::High ) - , TestFib( sched, n - 2 ) ); + , TestFib( n - 2 ) ); dep[0] = Kokkos::task_spawn ( Kokkos::TaskSingle( sched ) - , TestFib( sched, n - 1 ) ); + , TestFib( n - 1 ) ); - Kokkos::Future< ExecSpace > fib_all = Kokkos::when_all( dep, 2 ); + auto fib_all = sched.when_all( dep, 2 ); if ( ! dep[0].is_null() && ! dep[1].is_null() && ! fib_all.is_null() ) { // High priority to retire this branch. @@ -202,13 +201,15 @@ int main( int argc , char* argv[] ) return -1; } - typedef TestFib< ExecSpace > Functor ; + using Scheduler = Kokkos::TaskSchedulerMultiple; + + typedef TestFib< Scheduler > Functor ; Kokkos::initialize(argc,argv); { - Functor::Scheduler sched( Functor::MemorySpace() + Scheduler sched( Functor::MemorySpace() , total_alloc_size , min_block_size , max_block_size @@ -217,21 +218,21 @@ int main( int argc , char* argv[] ) Functor::FutureType f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ) - , Functor( sched , fib_input ) + , Functor( fib_input ) ); Kokkos::wait( sched ); test_result = f.get(); - task_count_max = sched.allocated_task_count_max(); - task_count_accum = sched.allocated_task_count_accum(); + //task_count_max = sched.allocated_task_count_max(); + //task_count_accum = sched.allocated_task_count_accum(); - if ( number_alloc != task_count_accum ) { - std::cout << " number_alloc( " << number_alloc << " )" - << " != task_count_accum( " << task_count_accum << " )" - << std::endl ; - } + //if ( number_alloc != task_count_accum ) { + // std::cout << " number_alloc( " << number_alloc << " )" + // << " != task_count_accum( " << task_count_accum << " )" + // << std::endl ; + //} if ( fib_output != test_result ) { std::cout << " answer( " << fib_output << " )" @@ -239,7 +240,7 @@ int main( int argc , char* argv[] ) << std::endl ; } - if ( fib_output != test_result || number_alloc != task_count_accum ) { + if ( fib_output != test_result) { // || number_alloc != task_count_accum ) { printf(" TEST FAILED\n"); return -1; } @@ -252,7 +253,7 @@ int main( int argc , char* argv[] ) Functor::FutureType ftmp = Kokkos::host_spawn( Kokkos::TaskSingle( sched ) - , Functor( sched , fib_input ) + , Functor( fib_input ) ); Kokkos::wait( sched ); diff --git a/lib/kokkos/core/src/CMakeLists.txt b/lib/kokkos/core/src/CMakeLists.txt index ab7f3f55c7..a941c5da0c 100644 --- a/lib/kokkos/core/src/CMakeLists.txt +++ b/lib/kokkos/core/src/CMakeLists.txt @@ -61,6 +61,16 @@ IF(KOKKOS_LEGACY_TRIBITS) #----------------------------------------------------------------------------- + FILE(GLOB HEADERS_HPX HPX/*.hpp) + FILE(GLOB SOURCES_HPX HPX/*.cpp) + + LIST(APPEND HEADERS_PRIVATE ${HEADERS_HPX} ) + LIST(APPEND SOURCES ${SOURCES_HPX} ) + + INSTALL(FILES ${HEADERS_HPX} DESTINATION ${TRILINOS_INCDIR}/HPX/) + + #----------------------------------------------------------------------------- + FILE(GLOB HEADERS_CUDA Cuda/*.hpp) FILE(GLOB SOURCES_CUDA Cuda/*.cpp) diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp deleted file mode 100644 index c31b7f5b5d..0000000000 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp +++ /dev/null @@ -1,419 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 2.0 -// Copyright (2014) Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_CUDAEXEC_HPP -#define KOKKOS_CUDAEXEC_HPP - -#include -#ifdef KOKKOS_ENABLE_CUDA - -#include -#include -#include -#include -#include -#include -#include - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -struct CudaTraits { - enum { WarpSize = 32 /* 0x0020 */ }; - enum { WarpIndexMask = 0x001f /* Mask for warpindex */ }; - enum { WarpIndexShift = 5 /* WarpSize == 1 << WarpShift */ }; - - enum { SharedMemoryBanks = 32 /* Compute device 2.0 */ }; - enum { SharedMemoryCapacity = 0x0C000 /* 48k shared / 16k L1 Cache */ }; - enum { SharedMemoryUsage = 0x04000 /* 16k shared / 48k L1 Cache */ }; - - enum { UpperBoundGridCount = 65535 /* Hard upper bound */ }; - enum { ConstantMemoryCapacity = 0x010000 /* 64k bytes */ }; - enum { ConstantMemoryUsage = 0x008000 /* 32k bytes */ }; - enum { ConstantMemoryCache = 0x002000 /* 8k bytes */ }; - - typedef unsigned long - ConstantGlobalBufferType[ ConstantMemoryUsage / sizeof(unsigned long) ]; - - enum { ConstantMemoryUseThreshold = 0x000200 /* 512 bytes */ }; - - KOKKOS_INLINE_FUNCTION static - CudaSpace::size_type warp_count( CudaSpace::size_type i ) - { return ( i + WarpIndexMask ) >> WarpIndexShift ; } - - KOKKOS_INLINE_FUNCTION static - CudaSpace::size_type warp_align( CudaSpace::size_type i ) - { - enum { Mask = ~CudaSpace::size_type( WarpIndexMask ) }; - return ( i + WarpIndexMask ) & Mask ; - } -}; - -//---------------------------------------------------------------------------- - -CudaSpace::size_type cuda_internal_multiprocessor_count(); -CudaSpace::size_type cuda_internal_maximum_warp_count(); -CudaSpace::size_type cuda_internal_maximum_grid_count(); -CudaSpace::size_type cuda_internal_maximum_shared_words(); - -CudaSpace::size_type cuda_internal_maximum_concurrent_block_count(); - -CudaSpace::size_type * cuda_internal_scratch_flags( const CudaSpace::size_type size ); -CudaSpace::size_type * cuda_internal_scratch_space( const CudaSpace::size_type size ); -CudaSpace::size_type * cuda_internal_scratch_unified( const CudaSpace::size_type size ); - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#if defined( __CUDACC__ ) - -/** \brief Access to constant memory on the device */ -#ifdef KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE - -__device__ __constant__ -extern unsigned long kokkos_impl_cuda_constant_memory_buffer[] ; - -#else - -__device__ __constant__ -unsigned long kokkos_impl_cuda_constant_memory_buffer[ Kokkos::Impl::CudaTraits::ConstantMemoryUsage / sizeof(unsigned long) ] ; - -#endif - -namespace Kokkos { -namespace Impl { - void* cuda_resize_scratch_space(std::int64_t bytes, bool force_shrink = false); -} -} - -template< typename T > -inline -__device__ -T * kokkos_impl_cuda_shared_memory() -{ extern __shared__ Kokkos::CudaSpace::size_type sh[]; return (T*) sh ; } - -namespace Kokkos { -namespace Impl { - -//---------------------------------------------------------------------------- -// See section B.17 of Cuda C Programming Guide Version 3.2 -// for discussion of -// __launch_bounds__(maxThreadsPerBlock,minBlocksPerMultiprocessor) -// function qualifier which could be used to improve performance. -//---------------------------------------------------------------------------- -// Maximize L1 cache and minimize shared memory: -// cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1 ); -// For 2.0 capability: 48 KB L1 and 16 KB shared -//---------------------------------------------------------------------------- - -template< class DriverType> -__global__ -static void cuda_parallel_launch_constant_memory() -{ - const DriverType & driver = - *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); - - driver(); -} - -template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > -__global__ -__launch_bounds__(maxTperB, minBperSM) -static void cuda_parallel_launch_constant_memory() -{ - const DriverType & driver = - *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); - - driver(); -} - -template< class DriverType> -__global__ -static void cuda_parallel_launch_local_memory( const DriverType driver ) -{ - driver(); -} - -template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > -__global__ -__launch_bounds__(maxTperB, minBperSM) -static void cuda_parallel_launch_local_memory( const DriverType driver ) -{ - driver(); -} - -template < class DriverType - , class LaunchBounds = Kokkos::LaunchBounds<> - , bool Large = ( CudaTraits::ConstantMemoryUseThreshold < sizeof(DriverType) ) > -struct CudaParallelLaunch ; - -template < class DriverType - , unsigned int MaxThreadsPerBlock - , unsigned int MinBlocksPerSM > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds< MaxThreadsPerBlock - , MinBlocksPerSM > - , true > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - // Fence before changing settings and copying closure - Kokkos::Cuda::fence(); - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_constant_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - // Copy functor to constant memory on the device - cudaMemcpyToSymbol( - kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType) ); - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_constant_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - <<< grid , block , shmem , stream >>>(); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -template < class DriverType > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds<> - , true > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - // Fence before changing settings and copying closure - Kokkos::Cuda::fence(); - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_constant_memory< DriverType > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - // Copy functor to constant memory on the device - cudaMemcpyToSymbol( - kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType) ); - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_constant_memory< DriverType > - <<< grid , block , shmem , stream >>>(); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -template < class DriverType - , unsigned int MaxThreadsPerBlock - , unsigned int MinBlocksPerSM > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds< MaxThreadsPerBlock - , MinBlocksPerSM > - , false > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_local_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_local_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - <<< grid , block , shmem , stream >>>( driver ); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -template < class DriverType > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds<> - , false > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_local_memory< DriverType > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_local_memory< DriverType > - <<< grid , block , shmem , stream >>>( driver ); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -//---------------------------------------------------------------------------- - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#endif /* defined( __CUDACC__ ) */ -#endif /* defined( KOKKOS_ENABLE_CUDA ) */ -#endif /* #ifndef KOKKOS_CUDAEXEC_HPP */ - diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp index e13744e327..4c9ed47085 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp @@ -55,7 +55,7 @@ #include #include -#include +//#include #include #if defined(KOKKOS_ENABLE_PROFILING) @@ -183,7 +183,7 @@ void * CudaUVMSpace::allocate( const size_t arg_alloc_size ) const enum { max_uvm_allocations = 65536 }; - Cuda::fence(); + Cuda::impl_static_fence(); if ( arg_alloc_size > 0 ) { Kokkos::Impl::num_uvm_allocations++; @@ -194,7 +194,7 @@ void * CudaUVMSpace::allocate( const size_t arg_alloc_size ) const CUDA_SAFE_CALL( cudaMallocManaged( &ptr, arg_alloc_size , cudaMemAttachGlobal ) ); } - Cuda::fence(); + Cuda::impl_static_fence(); return ptr ; } @@ -217,14 +217,14 @@ void CudaSpace::deallocate( void * const arg_alloc_ptr , const size_t /* arg_all void CudaUVMSpace::deallocate( void * const arg_alloc_ptr , const size_t /* arg_alloc_size */ ) const { - Cuda::fence(); + Cuda::impl_static_fence(); try { if ( arg_alloc_ptr != nullptr ) { Kokkos::Impl::num_uvm_allocations--; CUDA_SAFE_CALL( cudaFree( arg_alloc_ptr ) ); } } catch(...) {} - Cuda::fence(); + Cuda::impl_static_fence(); } void CudaHostPinnedSpace::deallocate( void * const arg_alloc_ptr , const size_t /* arg_alloc_size */ ) const @@ -390,7 +390,7 @@ SharedAllocationRecord< Kokkos::CudaUVMSpace , void >:: { #if defined(KOKKOS_ENABLE_PROFILING) if(Kokkos::Profiling::profileLibraryLoaded()) { - Cuda::fence(); //Make sure I can access the label ... + Cuda::impl_static_fence(); //Make sure I can access the label ... Kokkos::Profiling::deallocateData( Kokkos::Profiling::SpaceHandle(Kokkos::CudaUVMSpace::name()),RecordBase::m_alloc_ptr->m_label, data(),size()); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp new file mode 100644 index 0000000000..9d4bcbc8cf --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp @@ -0,0 +1,657 @@ +/* +@HEADER +================================================================================ + +ORIGINAL LICENSE +---------------- + +Copyright (c) 2018, NVIDIA Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +================================================================================ + +LICENSE ASSOCIATED WITH SUBSEQUENT MODIFICATIONS +------------------------------------------------ + +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +@HEADER +*/ + +#include +#if defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#include + +#ifndef _SIMT_DETAILS_CONFIG +#define _SIMT_DETAILS_CONFIG + +namespace Kokkos { +namespace Impl { + + +#ifndef __simt_scope +// Modification: Kokkos GPU atomics should default to `gpu` scope +#define __simt_scope "gpu" +#endif + +#define __simt_fence_signal_() asm volatile("":::"memory") +#define __simt_fence_sc_() asm volatile("fence.sc." __simt_scope ";":::"memory") +#define __simt_fence_() asm volatile("fence." __simt_scope ";":::"memory") + +#define __simt_load_acquire_8_as_32(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b8 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_8_as_32(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b8 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_8_as_32(ptr,desired) asm volatile("st.release." __simt_scope ".b8 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") +#define __simt_store_relaxed_8_as_32(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b8 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") + +#define __simt_load_acquire_16(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b16 %0, [%1];" : "=h"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_16(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b16 %0, [%1];" : "=h"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_16(ptr,desired) asm volatile("st.release." __simt_scope ".b16 [%0], %1;" :: "l"(ptr), "h"(desired) : "memory") +#define __simt_store_relaxed_16(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b16 [%0], %1;" :: "l"(ptr), "h"(desired) : "memory") + +#define __simt_load_acquire_32(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b32 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_32(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b32 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_32(ptr,desired) asm volatile("st.release." __simt_scope ".b32 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") +#define __simt_store_relaxed_32(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b32 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_release_32(ptr,old,desired) asm volatile("atom.exch.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_acquire_32(ptr,old,desired) asm volatile("atom.exch.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_acq_rel_32(ptr,old,desired) asm volatile("atom.exch.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_relaxed_32(ptr,old,desired) asm volatile("atom.exch.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_cas_release_32(ptr,old,expected,desired) asm volatile("atom.cas.release." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_cas_acquire_32(ptr,old,expected,desired) asm volatile("atom.cas.acquire." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_cas_acq_rel_32(ptr,old,expected,desired) asm volatile("atom.cas.acq_rel." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_cas_relaxed_32(ptr,old,expected,desired) asm volatile("atom.cas.relaxed." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_add_release_32(ptr,old,addend) asm volatile("atom.add.release." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_add_acquire_32(ptr,old,addend) asm volatile("atom.add.acquire." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_add_acq_rel_32(ptr,old,addend) asm volatile("atom.add.acq_rel." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_add_relaxed_32(ptr,old,addend) asm volatile("atom.add.relaxed." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_and_release_32(ptr,old,andend) asm volatile("atom.and.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_and_acquire_32(ptr,old,andend) asm volatile("atom.and.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_and_acq_rel_32(ptr,old,andend) asm volatile("atom.and.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_and_relaxed_32(ptr,old,andend) asm volatile("atom.and.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_or_release_32(ptr,old,orend) asm volatile("atom.or.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_or_acquire_32(ptr,old,orend) asm volatile("atom.or.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_or_acq_rel_32(ptr,old,orend) asm volatile("atom.or.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_or_relaxed_32(ptr,old,orend) asm volatile("atom.or.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_xor_release_32(ptr,old,xorend) asm volatile("atom.xor.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") +#define __simt_xor_acquire_32(ptr,old,xorend) asm volatile("atom.xor.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") +#define __simt_xor_acq_rel_32(ptr,old,xorend) asm volatile("atom.xor.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") +#define __simt_xor_relaxed_32(ptr,old,xorend) asm volatile("atom.xor.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") + +#define __simt_load_acquire_64(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b64 %0, [%1];" : "=l"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_64(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b64 %0, [%1];" : "=l"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_64(ptr,desired) asm volatile("st.release." __simt_scope ".b64 [%0], %1;" :: "l"(ptr), "l"(desired) : "memory") +#define __simt_store_relaxed_64(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b64 [%0], %1;" :: "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_release_64(ptr,old,desired) asm volatile("atom.exch.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_acquire_64(ptr,old,desired) asm volatile("atom.exch.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_acq_rel_64(ptr,old,desired) asm volatile("atom.exch.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_relaxed_64(ptr,old,desired) asm volatile("atom.exch.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_cas_release_64(ptr,old,expected,desired) asm volatile("atom.cas.release." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_cas_acquire_64(ptr,old,expected,desired) asm volatile("atom.cas.acquire." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_cas_acq_rel_64(ptr,old,expected,desired) asm volatile("atom.cas.acq_rel." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_cas_relaxed_64(ptr,old,expected,desired) asm volatile("atom.cas.relaxed." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_add_release_64(ptr,old,addend) asm volatile("atom.add.release." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_add_acquire_64(ptr,old,addend) asm volatile("atom.add.acquire." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_add_acq_rel_64(ptr,old,addend) asm volatile("atom.add.acq_rel." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_add_relaxed_64(ptr,old,addend) asm volatile("atom.add.relaxed." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_and_release_64(ptr,old,andend) asm volatile("atom.and.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_and_acquire_64(ptr,old,andend) asm volatile("atom.and.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_and_acq_rel_64(ptr,old,andend) asm volatile("atom.and.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_and_relaxed_64(ptr,old,andend) asm volatile("atom.and.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_or_release_64(ptr,old,orend) asm volatile("atom.or.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_or_acquire_64(ptr,old,orend) asm volatile("atom.or.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_or_acq_rel_64(ptr,old,orend) asm volatile("atom.or.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_or_relaxed_64(ptr,old,orend) asm volatile("atom.or.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_xor_release_64(ptr,old,xorend) asm volatile("atom.xor.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") +#define __simt_xor_acquire_64(ptr,old,xorend) asm volatile("atom.xor.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") +#define __simt_xor_acq_rel_64(ptr,old,xorend) asm volatile("atom.xor.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") +#define __simt_xor_relaxed_64(ptr,old,xorend) asm volatile("atom.xor.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") + +#define __simt_nanosleep(timeout) asm volatile("nanosleep.u32 %0;" :: "r"(unsigned(timeout)) : ) + +/* + definitions +*/ + +#ifndef __GCC_ATOMIC_BOOL_LOCK_FREE +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#endif + +#ifndef __ATOMIC_RELAXED +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 +#endif + +inline __device__ int __stronger_order_simt_(int a, int b) { + if (b == __ATOMIC_SEQ_CST) return __ATOMIC_SEQ_CST; + if (b == __ATOMIC_RELAXED) return a; + switch (a) { + case __ATOMIC_SEQ_CST: + case __ATOMIC_ACQ_REL: return a; + case __ATOMIC_CONSUME: + case __ATOMIC_ACQUIRE: if (b != __ATOMIC_ACQUIRE) return __ATOMIC_ACQ_REL; else return __ATOMIC_ACQUIRE; + case __ATOMIC_RELEASE: if (b != __ATOMIC_RELEASE) return __ATOMIC_ACQ_REL; else return __ATOMIC_RELEASE; + case __ATOMIC_RELAXED: return b; + default: assert(0); + } + return __ATOMIC_SEQ_CST; +} + +/* + base +*/ + +#define DO__atomic_load_simt_(bytes, bits) \ +template::type = 0> \ +void __device__ __atomic_load_simt_ (const type *ptr, type *ret, int memorder) { \ + int##bits##_t tmp = 0; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_load_acquire_##bits(ptr, tmp); break; \ + case __ATOMIC_RELAXED: __simt_load_relaxed_##bits(ptr, tmp); break; \ + default: assert(0); \ + } \ + memcpy(ret, &tmp, bytes); \ +} +DO__atomic_load_simt_(1,32) +DO__atomic_load_simt_(2,16) +DO__atomic_load_simt_(4,32) +DO__atomic_load_simt_(8,64) + +template +type __device__ __atomic_load_n_simt_(const type *ptr, int memorder) { + type ret; + __atomic_load_simt_(ptr, &ret, memorder); + return ret; +} + +#define DO__atomic_store_simt_(bytes, bits) \ +template::type = 0> \ +void __device__ __atomic_store_simt_ (type *ptr, type *val, int memorder) { \ + int##bits##_t tmp = 0; \ + memcpy(&tmp, val, bytes); \ + switch (memorder) { \ + case __ATOMIC_RELEASE: __simt_store_release_##bits(ptr, tmp); break; \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_RELAXED: __simt_store_relaxed_##bits(ptr, tmp); break; \ + default: assert(0); \ + } \ +} +DO__atomic_store_simt_(1,32) +DO__atomic_store_simt_(2,16) +DO__atomic_store_simt_(4,32) +DO__atomic_store_simt_(8,64) + +template +void __device__ __atomic_store_n_simt_(type *ptr, type val, int memorder) { + __atomic_store_simt_(ptr, &val, memorder); +} + +#define DO__atomic_compare_exchange_simt_(bytes, bits) \ +template::type = 0> \ +bool __device__ __atomic_compare_exchange_simt_ (type *ptr, type *expected, const type *desired, bool, int success_memorder, int failure_memorder) { \ + int##bits##_t tmp = 0, old = 0, old_tmp; \ + memcpy(&tmp, desired, bytes); \ + memcpy(&old, expected, bytes); \ + old_tmp = old; \ + switch (__stronger_order_simt_(success_memorder, failure_memorder)) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_cas_acquire_##bits(ptr, old, old_tmp, tmp); break; \ + case __ATOMIC_ACQ_REL: __simt_cas_acq_rel_##bits(ptr, old, old_tmp, tmp); break; \ + case __ATOMIC_RELEASE: __simt_cas_release_##bits(ptr, old, old_tmp, tmp); break; \ + case __ATOMIC_RELAXED: __simt_cas_relaxed_##bits(ptr, old, old_tmp, tmp); break; \ + default: assert(0); \ + } \ + bool const ret = old == old_tmp; \ + memcpy(expected, &old, bytes); \ + return ret; \ +} +DO__atomic_compare_exchange_simt_(4, 32) +DO__atomic_compare_exchange_simt_(8, 64) + +template::type = 0> \ +bool __device__ __atomic_compare_exchange_simt_(type *ptr, type *expected, const type *desired, bool, int success_memorder, int failure_memorder) { + + using R = typename std::conditional::value, volatile uint32_t, uint32_t>::type; + auto const aligned = (R*)((intptr_t)ptr & ~(sizeof(uint32_t) - 1)); + auto const offset = uint32_t((intptr_t)ptr & (sizeof(uint32_t) - 1)) * 8; + auto const mask = ((1 << sizeof(type)*8) - 1) << offset; + + uint32_t old = *expected << offset, old_value; + while (1) { + old_value = (old & mask) >> offset; + if (old_value != *expected) + break; + uint32_t const attempt = (old & ~mask) | (*desired << offset); + if (__atomic_compare_exchange_simt_ (aligned, &old, &attempt, true, success_memorder, failure_memorder)) + return true; + } + *expected = old_value; + return false; +} + +template +bool __device__ __atomic_compare_exchange_n_simt_(type *ptr, type *expected, type desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_simt_(ptr, expected, &desired, weak, success_memorder, failure_memorder); +} + +#define DO__atomic_exchange_simt_(bytes, bits) \ +template::type = 0> \ +void __device__ __atomic_exchange_simt_ (type *ptr, type *val, type *ret, int memorder) { \ + int##bits##_t tmp = 0; \ + memcpy(&tmp, val, bytes); \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_exch_acquire_##bits(ptr, tmp, tmp); break; \ + case __ATOMIC_ACQ_REL: __simt_exch_acq_rel_##bits(ptr, tmp, tmp); break; \ + case __ATOMIC_RELEASE: __simt_exch_release_##bits(ptr, tmp, tmp); break; \ + case __ATOMIC_RELAXED: __simt_exch_relaxed_##bits(ptr, tmp, tmp); break; \ + default: assert(0); \ + } \ + memcpy(ret, &tmp, bytes); \ +} +DO__atomic_exchange_simt_(4,32) +DO__atomic_exchange_simt_(8,64) + +template::type = 0> +void __device__ __atomic_exchange_simt_ (type *ptr, type *val, type *ret, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + while(!__atomic_compare_exchange_simt_(ptr, &expected, val, true, memorder, memorder)) + ; + *ret = expected; +} + +template +type __device__ __atomic_exchange_n_simt_(type *ptr, type val, int memorder) { + type ret; + __atomic_exchange_simt_(ptr, &val, &ret, memorder); + return ret; +} + +#define DO__atomic_fetch_add_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_add_simt_ (type *ptr, delta val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_add_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_add_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_add_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_add_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_add_simt_(4, 32) +DO__atomic_fetch_add_simt_(8, 64) + +template::type = 0> +type __device__ __atomic_fetch_add_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected + val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_sub_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_sub_simt_ (type *ptr, delta val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_add_acquire_##bits(ptr, ret, -val); break; \ + case __ATOMIC_ACQ_REL: __simt_add_acq_rel_##bits(ptr, ret, -val); break; \ + case __ATOMIC_RELEASE: __simt_add_release_##bits(ptr, ret, -val); break; \ + case __ATOMIC_RELAXED: __simt_add_relaxed_##bits(ptr, ret, -val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_sub_simt_(4,32) +DO__atomic_fetch_sub_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_sub_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected - val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_and_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_and_simt_ (type *ptr, type val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_and_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_and_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_and_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_and_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_and_simt_(4,32) +DO__atomic_fetch_and_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_and_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected & val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_xor_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_xor_simt_ (type *ptr, type val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_xor_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_xor_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_xor_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_xor_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_xor_simt_(4,32) +DO__atomic_fetch_xor_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_xor_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected ^ val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_or_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_or_simt_ (type *ptr, type val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_or_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_or_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_or_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_or_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_or_simt_(4,32) +DO__atomic_fetch_or_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_or_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected | val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +template +inline bool __device__ __atomic_test_and_set_simt_(type *ptr, int memorder) { + return __atomic_exchange_n_simt_((char*)ptr, (char)1, memorder) == 1; +} +template +inline void __device__ __atomic_clear_simt_(type *ptr, int memorder) { + return __atomic_store_n_simt_((char*)ptr, (char)0, memorder); +} + +inline constexpr __device__ bool __atomic_always_lock_free_simt_ (size_t size, void *) { + return size <= 8; +} +inline __device__ bool __atomic_is_lock_free_simt_(size_t size, void * ptr) { + return __atomic_always_lock_free_simt_(size, ptr); +} + +/* + fences +*/ + +inline void __device__ __atomic_thread_fence_simt(int memorder) { + switch (memorder) { + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); break; + case __ATOMIC_CONSUME: + case __ATOMIC_ACQUIRE: + case __ATOMIC_ACQ_REL: + case __ATOMIC_RELEASE: __simt_fence_(); break; + case __ATOMIC_RELAXED: break; + default: assert(0); + } +} +inline void __device__ __atomic_signal_fence_simt(int memorder) { + __atomic_thread_fence_simt(memorder); +} + +/* + non-volatile +*/ + +template type __device__ __atomic_load_n_simt(const type *ptr, int memorder) { + return __atomic_load_n_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_load_simt(const type *ptr, type *ret, int memorder) { + __atomic_load_simt_(const_cast(ptr), ret, memorder); +} +template void __device__ __atomic_store_n_simt(type *ptr, type val, int memorder) { + __atomic_store_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_store_simt(type *ptr, type *val, int memorder) { + __atomic_store_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_exchange_n_simt(type *ptr, type val, int memorder) { + return __atomic_exchange_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_exchange_simt(type *ptr, type *val, type *ret, int memorder) { + __atomic_exchange_simt_(const_cast(ptr), val, ret, memorder); +} +template bool __device__ __atomic_compare_exchange_n_simt(type *ptr, type *expected, type desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_n_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template bool __device__ __atomic_compare_exchange_simt(type *ptr, type *expected, type *desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template type __device__ __atomic_fetch_add_simt(type *ptr, delta val, int memorder) { + return __atomic_fetch_add_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_sub_simt(type *ptr, delta val, int memorder) { + return __atomic_fetch_sub_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_and_simt(type *ptr, type val, int memorder) { + return __atomic_fetch_and_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_xor_simt(type *ptr, type val, int memorder) { + return __atomic_fetch_xor_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_or_simt(type *ptr, type val, int memorder) { + return __atomic_fetch_or_simt_(const_cast(ptr), val, memorder); +} +template bool __device__ __atomic_test_and_set_simt(void *ptr, int memorder) { + return __atomic_test_and_set_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_clear_simt(void *ptr, int memorder) { + return __atomic_clear_simt_(const_cast(ptr), memorder); +} +inline bool __device__ __atomic_always_lock_free_simt(size_t size, void *ptr) { + return __atomic_always_lock_free_simt_(size, const_cast(ptr)); +} +inline bool __device__ __atomic_is_lock_free_simt(size_t size, void *ptr) { + return __atomic_is_lock_free_simt_(size, const_cast(ptr)); +} + +/* + volatile +*/ + +template type __device__ __atomic_load_n_simt(const volatile type *ptr, int memorder) { + return __atomic_load_n_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_load_simt(const volatile type *ptr, type *ret, int memorder) { + __atomic_load_simt_(const_cast(ptr), ret, memorder); +} +template void __device__ __atomic_store_n_simt(volatile type *ptr, type val, int memorder) { + __atomic_store_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_store_simt(volatile type *ptr, type *val, int memorder) { + __atomic_store_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_exchange_n_simt(volatile type *ptr, type val, int memorder) { + return __atomic_exchange_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_exchange_simt(volatile type *ptr, type *val, type *ret, int memorder) { + __atomic_exchange_simt_(const_cast(ptr), val, ret, memorder); +} +template bool __device__ __atomic_compare_exchange_n_simt(volatile type *ptr, type *expected, type desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_n_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template bool __device__ __atomic_compare_exchange_simt(volatile type *ptr, type *expected, type *desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template type __device__ __atomic_fetch_add_simt(volatile type *ptr, delta val, int memorder) { + return __atomic_fetch_add_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_sub_simt(volatile type *ptr, delta val, int memorder) { + return __atomic_fetch_sub_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_and_simt(volatile type *ptr, type val, int memorder) { + return __atomic_fetch_and_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_xor_simt(volatile type *ptr, type val, int memorder) { + return __atomic_fetch_xor_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_or_simt(volatile type *ptr, type val, int memorder) { + return __atomic_fetch_or_simt_(const_cast(ptr), val, memorder); +} +template bool __device__ __atomic_test_and_set_simt(volatile void *ptr, int memorder) { + return __atomic_test_and_set_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_clear_simt(volatile void *ptr, int memorder) { + return __atomic_clear_simt_(const_cast(ptr), memorder); +} + + + +} // end namespace Impl +} // end namespace Kokkos + +#endif //_SIMT_DETAILS_CONFIG + +#ifndef KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED +/* + builtins +*/ + +#define __atomic_load_n __atomic_load_n_simt +#define __atomic_load __atomic_load_simt +#define __atomic_store_n __atomic_store_n_simt +#define __atomic_store __atomic_store_simt +#define __atomic_exchange_n __atomic_exchange_n_simt +#define __atomic_exchange __atomic_exchange_simt +#define __atomic_compare_exchange_n __atomic_compare_exchange_n_simt +#define __atomic_compare_exchange __atomic_compare_exchange_simt +#define __atomic_fetch_add __atomic_fetch_add_simt +#define __atomic_fetch_sub __atomic_fetch_sub_simt +#define __atomic_fetch_and __atomic_fetch_and_simt +#define __atomic_fetch_xor __atomic_fetch_xor_simt +#define __atomic_fetch_or __atomic_fetch_or_simt +#define __atomic_test_and_set __atomic_test_and_set_simt +#define __atomic_clear __atomic_clear_simt +#define __atomic_always_lock_free __atomic_always_lock_free_simt +#define __atomic_is_lock_free __atomic_is_lock_free_simt +#define __atomic_thread_fence __atomic_thread_fence_simt +#define __atomic_signal_fence __atomic_signal_fence_simt + +#define KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED + +#endif //__CUDA_ARCH__ && KOKKOS_ENABLE_CUDA_ASM_ATOMICS +#endif // KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp new file mode 100644 index 0000000000..bedb147227 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp @@ -0,0 +1,68 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifdef KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED + +#undef __atomic_load_n +#undef __atomic_load +#undef __atomic_store_n +#undef __atomic_store +#undef __atomic_exchange_n +#undef __atomic_exchange +#undef __atomic_compare_exchange_n +#undef __atomic_compare_exchange +#undef __atomic_fetch_add +#undef __atomic_fetch_sub +#undef __atomic_fetch_and +#undef __atomic_fetch_xor +#undef __atomic_fetch_or +#undef __atomic_test_and_set +#undef __atomic_clear +#undef __atomic_always_lock_free +#undef __atomic_is_lock_free +#undef __atomic_thread_fence +#undef __atomic_signal_fence + +#undef KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED + +#endif // KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp similarity index 69% rename from lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp rename to lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp index 145d93ed76..932bde2b37 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp @@ -58,7 +58,68 @@ struct CudaGetMaxBlockSize; template int cuda_get_max_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { - return CudaGetMaxBlockSize::get_block_size(f,vector_length, shmem_extra_block,shmem_extra_thread); + return CudaGetMaxBlockSize::get_block_size(f,vector_length, shmem_extra_block,shmem_extra_thread); +} + +template +int cuda_get_max_block_size(const CudaInternal* cuda_instance, const cudaFuncAttributes& attr, const FunctorType& f, const size_t vector_length, + const size_t shmem_block, const size_t shmem_thread) { + + const int min_blocks_per_sm = LaunchBounds::minBperSM == 0 ? + 1 : LaunchBounds::minBperSM ; + const int max_threads_per_block = LaunchBounds::maxTperB == 0 ? + cuda_instance->m_maxThreadsPerBlock : LaunchBounds::maxTperB ; + + const int regs_per_thread = attr.numRegs; + const int regs_per_sm = cuda_instance->m_regsPerSM; + const int shmem_per_sm = cuda_instance->m_shmemPerSM; + const int max_shmem_per_block = cuda_instance->m_maxShmemPerBlock; + const int max_blocks_per_sm = cuda_instance->m_maxBlocksPerSM; + const int max_threads_per_sm = cuda_instance->m_maxThreadsPerSM; + + int block_size = std::min(attr.maxThreadsPerBlock,max_threads_per_block); + + int functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + int total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + int max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + int max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + int blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + int threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + int opt_block_size = (blocks_per_sm>=min_blocks_per_sm) ? block_size : 0; + int opt_threads_per_sm = threads_per_sm; + //printf("BlockSizeMax: %i Shmem: %i %i %i %i Regs: %i %i Blocks: %i %i Achieved: %i %i Opt: %i %i\n",block_size, + // shmem_per_sm,max_shmem_per_block,functor_shmem,total_shmem, + // regs_per_sm,regs_per_thread,max_blocks_shmem,max_blocks_regs,blocks_per_sm,threads_per_sm,opt_block_size,opt_threads_per_sm); + block_size-=32; + while ((blocks_per_sm==0) && (block_size>=32)) { + functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + if((blocks_per_sm >= min_blocks_per_sm) && (blocks_per_sm <= max_blocks_per_sm)) { + if(threads_per_sm>=opt_threads_per_sm) { + opt_block_size = block_size; + opt_threads_per_sm = threads_per_sm; + } + } + //printf("BlockSizeMax: %i Shmem: %i %i %i %i Regs: %i %i Blocks: %i %i Achieved: %i %i Opt: %i %i\n",block_size, + // shmem_per_sm,max_shmem_per_block,functor_shmem,total_shmem, + // regs_per_sm,regs_per_thread,max_blocks_shmem,max_blocks_regs,blocks_per_sm,threads_per_sm,opt_block_size,opt_threads_per_sm); + block_size-=32; + } + return opt_block_size; } @@ -241,11 +302,71 @@ struct CudaGetOptBlockSize; template int cuda_get_opt_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { - return CudaGetOptBlockSize::get_block_size(f,vector_length,shmem_extra_block,shmem_extra_thread); + return CudaGetOptBlockSize::get_block_size(f,vector_length,shmem_extra_block,shmem_extra_thread); +} + +template +int cuda_get_opt_block_size(const CudaInternal* cuda_instance, const cudaFuncAttributes& attr, const FunctorType& f, const size_t vector_length, + const size_t shmem_block, const size_t shmem_thread) { + + const int min_blocks_per_sm = LaunchBounds::minBperSM == 0 ? + 1 : LaunchBounds::minBperSM ; + const int max_threads_per_block = LaunchBounds::maxTperB == 0 ? + cuda_instance->m_maxThreadsPerBlock : LaunchBounds::maxTperB ; + + const int regs_per_thread = attr.numRegs; + const int regs_per_sm = cuda_instance->m_regsPerSM; + const int shmem_per_sm = cuda_instance->m_shmemPerSM; + const int max_shmem_per_block = cuda_instance->m_maxShmemPerBlock; + const int max_blocks_per_sm = cuda_instance->m_maxBlocksPerSM; + const int max_threads_per_sm = cuda_instance->m_maxThreadsPerSM; + + int block_size = std::min(attr.maxThreadsPerBlock,max_threads_per_block); + + int functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + int total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + int max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + int max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + int blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + int threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + int opt_block_size = (blocks_per_sm>=min_blocks_per_sm) ? block_size : 0; + int opt_threads_per_sm = threads_per_sm; + + block_size-=32; + while ((block_size>=32)) { + functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + if((blocks_per_sm >= min_blocks_per_sm) && (blocks_per_sm <= max_blocks_per_sm)) { + if(threads_per_sm>=opt_threads_per_sm) { + opt_block_size = block_size; + opt_threads_per_sm = threads_per_sm; + } + } + block_size-=32; + } + return opt_block_size; } template -struct CudaGetOptBlockSize,true> { +struct CudaGetOptBlockSize,true> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; @@ -275,7 +396,7 @@ struct CudaGetOptBlockSize,true> { }; template -struct CudaGetOptBlockSize,false> { +struct CudaGetOptBlockSize,false> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; @@ -305,7 +426,7 @@ struct CudaGetOptBlockSize,false> { }; template -struct CudaGetOptBlockSize,true> { +struct CudaGetOptBlockSize,true> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp similarity index 86% rename from lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp rename to lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp index 4fd7a9c69e..0ca9e3c160 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp @@ -50,7 +50,8 @@ #include #include -#include +#include +#include #include #include #include @@ -217,78 +218,6 @@ const CudaInternalDevices & CudaInternalDevices::singleton() } -//---------------------------------------------------------------------------- - -class CudaInternal { -private: - - CudaInternal( const CudaInternal & ); - CudaInternal & operator = ( const CudaInternal & ); - - -public: - - typedef Cuda::size_type size_type ; - - int m_cudaDev ; - int m_cudaArch ; - unsigned m_multiProcCount ; - unsigned m_maxWarpCount ; - unsigned m_maxBlock ; - unsigned m_maxSharedWords ; - uint32_t m_maxConcurrency ; - size_type m_scratchSpaceCount ; - size_type m_scratchFlagsCount ; - size_type m_scratchUnifiedCount ; - size_type m_scratchUnifiedSupported ; - size_type m_streamCount ; - size_type * m_scratchSpace ; - size_type * m_scratchFlags ; - size_type * m_scratchUnified ; - uint32_t * m_scratchConcurrentBitset ; - cudaStream_t * m_stream ; - - static int was_initialized; - static int was_finalized; - - static CudaInternal & singleton(); - - int verify_is_initialized( const char * const label ) const ; - - int is_initialized() const - { return 0 != m_scratchSpace && 0 != m_scratchFlags ; } - - void initialize( int cuda_device_id , int stream_count ); - void finalize(); - - void print_configuration( std::ostream & ) const ; - - ~CudaInternal(); - - CudaInternal() - : m_cudaDev( -1 ) - , m_cudaArch( -1 ) - , m_multiProcCount( 0 ) - , m_maxWarpCount( 0 ) - , m_maxBlock( 0 ) - , m_maxSharedWords( 0 ) - , m_maxConcurrency( 0 ) - , m_scratchSpaceCount( 0 ) - , m_scratchFlagsCount( 0 ) - , m_scratchUnifiedCount( 0 ) - , m_scratchUnifiedSupported( 0 ) - , m_streamCount( 0 ) - , m_scratchSpace( 0 ) - , m_scratchFlags( 0 ) - , m_scratchUnified( 0 ) - , m_scratchConcurrentBitset( 0 ) - , m_stream( 0 ) - {} - - size_type * scratch_space( const size_type size ); - size_type * scratch_flags( const size_type size ); - size_type * scratch_unified( const size_type size ); -}; int CudaInternal::was_initialized = 0; int CudaInternal::was_finalized = 0; @@ -366,8 +295,11 @@ CudaInternal & CudaInternal::singleton() static CudaInternal self ; return self ; } +void CudaInternal::fence() const { + cudaStreamSynchronize(m_stream); +} -void CudaInternal::initialize( int cuda_device_id , int stream_count ) +void CudaInternal::initialize( int cuda_device_id , cudaStream_t stream ) { if ( was_finalized ) Kokkos::abort("Calling Cuda::initialize after Cuda::finalize is illegal\n"); was_initialized = 1; @@ -454,6 +386,15 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) m_maxBlock = cudaProp.maxGridSize[0] ; + m_shmemPerSM = cudaProp.sharedMemPerMultiprocessor ; + m_maxShmemPerBlock = cudaProp.sharedMemPerBlock ; + m_regsPerSM = cudaProp.regsPerMultiprocessor ; + m_maxBlocksPerSM = m_cudaArch < 500 ? 16 : ( + m_cudaArch < 750 ? 32 : ( + m_cudaArch == 750 ? 16 : 32)); + m_maxThreadsPerSM = cudaProp.maxThreadsPerMultiProcessor ; + m_maxThreadsPerBlock = cudaProp.maxThreadsPerBlock ; + //---------------------------------- m_scratchUnifiedSupported = cudaProp.unifiedAddressing ; @@ -482,10 +423,9 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) // Concurrent bitset for obtaining unique tokens from within // an executing kernel. { - const unsigned max_threads_per_sm = 2048 ; // up to capability 7.0 m_maxConcurrency = - max_threads_per_sm * cudaProp.multiProcessorCount ; + m_maxThreadsPerSM * cudaProp.multiProcessorCount ; const int32_t buffer_bound = Kokkos::Impl::concurrent_bitset::buffer_bound( m_maxConcurrency ); @@ -507,11 +447,6 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) } //---------------------------------- - if ( stream_count ) { - m_stream = (cudaStream_t*) ::malloc( stream_count * sizeof(cudaStream_t) ); - m_streamCount = stream_count ; - for ( size_type i = 0 ; i < m_streamCount ; ++i ) m_stream[i] = 0 ; - } } else { @@ -539,7 +474,7 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) if( Kokkos::show_warnings() && !cuda_launch_blocking() ) { std::cerr << "Kokkos::Cuda::initialize WARNING: Cuda is allocating into UVMSpace by default" << std::endl; std::cerr << " without setting CUDA_LAUNCH_BLOCKING=1." << std::endl; - std::cerr << " The code must call Cuda::fence() after each kernel" << std::endl; + std::cerr << " The code must call Cuda().fence() after each kernel" << std::endl; std::cerr << " or will likely crash when accessing data on the host." << std::endl; } @@ -568,7 +503,10 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) #endif // Init the array for used for arbitrarily sized atomics - Impl::initialize_host_cuda_lock_arrays(); + if(stream == 0) + Impl::initialize_host_cuda_lock_arrays(); + + m_stream = stream; } //---------------------------------------------------------------------------- @@ -578,7 +516,7 @@ enum { sizeScratchGrain = sizeof(ScratchGrain) }; Cuda::size_type * -CudaInternal::scratch_flags( const Cuda::size_type size ) +CudaInternal::scratch_flags( const Cuda::size_type size ) const { if ( verify_is_initialized("scratch_flags") && m_scratchFlagsCount * sizeScratchGrain < size ) { @@ -587,6 +525,9 @@ CudaInternal::scratch_flags( const Cuda::size_type size ) typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaSpace , void > Record ; + if( m_scratchFlags ) + Record::decrement( Record::get_record( m_scratchFlags ) ); + Record * const r = Record::allocate( Kokkos::CudaSpace() , "InternalScratchFlags" , ( sizeof( ScratchGrain ) * m_scratchFlagsCount ) ); @@ -602,7 +543,7 @@ CudaInternal::scratch_flags( const Cuda::size_type size ) } Cuda::size_type * -CudaInternal::scratch_space( const Cuda::size_type size ) +CudaInternal::scratch_space( const Cuda::size_type size ) const { if ( verify_is_initialized("scratch_space") && m_scratchSpaceCount * sizeScratchGrain < size ) { @@ -610,6 +551,9 @@ CudaInternal::scratch_space( const Cuda::size_type size ) typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaSpace , void > Record ; + if( m_scratchSpace ) + Record::decrement( Record::get_record( m_scratchSpace ) ); + Record * const r = Record::allocate( Kokkos::CudaSpace() , "InternalScratchSpace" , ( sizeof( ScratchGrain ) * m_scratchSpaceCount ) ); @@ -623,7 +567,7 @@ CudaInternal::scratch_space( const Cuda::size_type size ) } Cuda::size_type * -CudaInternal::scratch_unified( const Cuda::size_type size ) +CudaInternal::scratch_unified( const Cuda::size_type size ) const { if ( verify_is_initialized("scratch_unified") && m_scratchUnifiedSupported && m_scratchUnifiedCount * sizeScratchGrain < size ) { @@ -632,6 +576,9 @@ CudaInternal::scratch_unified( const Cuda::size_type size ) typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaHostPinnedSpace , void > Record ; + if( m_scratchUnified ) + Record::decrement( Record::get_record( m_scratchUnified ) ); + Record * const r = Record::allocate( Kokkos::CudaHostPinnedSpace() , "InternalScratchUnified" , ( sizeof( ScratchGrain ) * m_scratchUnifiedCount ) ); @@ -644,6 +591,31 @@ CudaInternal::scratch_unified( const Cuda::size_type size ) return m_scratchUnified ; } +Cuda::size_type * +CudaInternal::scratch_functor( const Cuda::size_type size ) const +{ + if ( verify_is_initialized("scratch_functor") && + m_scratchFunctorSize < size ) { + + m_scratchFunctorSize = size ; + + typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaSpace , void > Record ; + + if( m_scratchFunctor ) + Record::decrement( Record::get_record( m_scratchFunctor ) ); + + Record * const r = Record::allocate( Kokkos::CudaSpace() + , "InternalScratchFunctor" + , m_scratchFunctorSize ); + + Record::increment( r ); + + m_scratchFunctor = reinterpret_cast( r->data() ); + } + + return m_scratchFunctor ; +} + //---------------------------------------------------------------------------- void CudaInternal::finalize() @@ -653,13 +625,7 @@ void CudaInternal::finalize() Impl::finalize_host_cuda_lock_arrays(); - if ( m_stream ) { - for ( size_type i = 1 ; i < m_streamCount ; ++i ) { - cudaStreamDestroy( m_stream[i] ); - m_stream[i] = 0 ; - } - ::free( m_stream ); - } + if(m_stream!=0) cudaStreamDestroy(m_stream); typedef Kokkos::Impl::SharedAllocationRecord< CudaSpace > RecordCuda ; typedef Kokkos::Impl::SharedAllocationRecord< CudaHostPinnedSpace > RecordHost ; @@ -668,6 +634,8 @@ void CudaInternal::finalize() RecordCuda::decrement( RecordCuda::get_record( m_scratchSpace ) ); RecordHost::decrement( RecordHost::get_record( m_scratchUnified ) ); RecordCuda::decrement( RecordCuda::get_record( m_scratchConcurrentBitset ) ); + if(m_scratchFunctorSize>0) + RecordCuda::decrement( RecordCuda::get_record( m_scratchFunctor ) ); m_cudaDev = -1 ; m_multiProcCount = 0 ; @@ -713,14 +681,14 @@ Cuda::size_type cuda_internal_maximum_grid_count() Cuda::size_type cuda_internal_maximum_shared_words() { return CudaInternal::singleton().m_maxSharedWords ; } -Cuda::size_type * cuda_internal_scratch_space( const Cuda::size_type size ) -{ return CudaInternal::singleton().scratch_space( size ); } +Cuda::size_type * cuda_internal_scratch_space( const Cuda& instance, const Cuda::size_type size ) +{ return instance.impl_internal_space_instance()->scratch_space( size ); } -Cuda::size_type * cuda_internal_scratch_flags( const Cuda::size_type size ) -{ return CudaInternal::singleton().scratch_flags( size ); } +Cuda::size_type * cuda_internal_scratch_flags( const Cuda& instance, const Cuda::size_type size ) +{ return instance.impl_internal_space_instance()->scratch_flags( size ); } -Cuda::size_type * cuda_internal_scratch_unified( const Cuda::size_type size ) -{ return CudaInternal::singleton().scratch_unified( size ); } +Cuda::size_type * cuda_internal_scratch_unified( const Cuda& instance, const Cuda::size_type size ) +{ return instance.impl_internal_space_instance()->scratch_unified( size ); } } // namespace Impl @@ -749,7 +717,7 @@ void Cuda::initialize( const Cuda::SelectDevice config , size_t num_instances ) void Cuda::impl_initialize( const Cuda::SelectDevice config , size_t num_instances ) #endif { - Impl::CudaInternal::singleton().initialize( config.cuda_device_id , num_instances ); + Impl::CudaInternal::singleton().initialize( config.cuda_device_id , 0 ); #if defined(KOKKOS_ENABLE_PROFILING) Kokkos::Profiling::initialize(); @@ -800,19 +768,17 @@ void Cuda::impl_finalize() } Cuda::Cuda() - : m_device( Impl::CudaInternal::singleton().m_cudaDev ) - , m_stream( 0 ) + : m_space_instance( &Impl::CudaInternal::singleton() ) { Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor" ); } -Cuda::Cuda( const int instance_id ) - : m_device( Impl::CudaInternal::singleton().m_cudaDev ) - , m_stream( - Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor" ) - ? Impl::CudaInternal::singleton().m_stream[ instance_id % Impl::CudaInternal::singleton().m_streamCount ] - : 0 ) -{} +Cuda::Cuda(cudaStream_t stream) + : m_space_instance(new Impl::CudaInternal) +{ + Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor" ); + m_space_instance->initialize(Impl::CudaInternal::singleton().m_cudaDev,stream); +} void Cuda::print_configuration( std::ostream & s , const bool ) { Impl::CudaInternal::singleton().print_configuration( s ); } @@ -823,13 +789,27 @@ bool Cuda::sleep() { return false ; } bool Cuda::wake() { return true ; } #endif -void Cuda::fence() +void Cuda::impl_static_fence() { Kokkos::Impl::cuda_device_synchronize(); } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE +void Cuda::fence() { + impl_static_fence(); +} +#else +void Cuda::fence() const { + m_space_instance->fence(); +} +#endif + const char* Cuda::name() { return "Cuda"; } +cudaStream_t Cuda::cuda_stream() const { return m_space_instance->m_stream ; } +int Cuda::cuda_device() const { return m_space_instance->m_cudaDev ; } + + } // namespace Kokkos namespace Kokkos { diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp new file mode 100644 index 0000000000..f9e333fcf0 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp @@ -0,0 +1,156 @@ +#ifndef KOKKOS_CUDA_INSTANCE_HPP_ +#define KOKKOS_CUDA_INSTANCE_HPP_ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +struct CudaTraits { + enum { WarpSize = 32 /* 0x0020 */ }; + enum { WarpIndexMask = 0x001f /* Mask for warpindex */ }; + enum { WarpIndexShift = 5 /* WarpSize == 1 << WarpShift */ }; + + enum { ConstantMemoryUsage = 0x008000 /* 32k bytes */ }; + enum { ConstantMemoryCache = 0x002000 /* 8k bytes */ }; + enum { KernelArgumentLimit = 0x001000 /* 4k bytes */ }; + + typedef unsigned long + ConstantGlobalBufferType[ ConstantMemoryUsage / sizeof(unsigned long) ]; + +#if defined(KOKKOS_ARCH_VOLTA) || \ + defined(KOKKOS_ARCH_PASCAL) + enum { ConstantMemoryUseThreshold = 0x000200 /* 0 bytes -> always use constant (or global)*/ }; +#else + enum { ConstantMemoryUseThreshold = 0x000200 /* 512 bytes */ }; +#endif + + KOKKOS_INLINE_FUNCTION static + CudaSpace::size_type warp_count( CudaSpace::size_type i ) + { return ( i + WarpIndexMask ) >> WarpIndexShift ; } + + KOKKOS_INLINE_FUNCTION static + CudaSpace::size_type warp_align( CudaSpace::size_type i ) + { + enum { Mask = ~CudaSpace::size_type( WarpIndexMask ) }; + return ( i + WarpIndexMask ) & Mask ; + } +}; + +//---------------------------------------------------------------------------- + +CudaSpace::size_type cuda_internal_multiprocessor_count(); +CudaSpace::size_type cuda_internal_maximum_warp_count(); +CudaSpace::size_type cuda_internal_maximum_grid_count(); +CudaSpace::size_type cuda_internal_maximum_shared_words(); + +CudaSpace::size_type cuda_internal_maximum_concurrent_block_count(); + +CudaSpace::size_type * cuda_internal_scratch_flags( const Cuda&, const CudaSpace::size_type size ); +CudaSpace::size_type * cuda_internal_scratch_space( const Cuda&, const CudaSpace::size_type size ); +CudaSpace::size_type * cuda_internal_scratch_unified( const Cuda&, const CudaSpace::size_type size ); + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +namespace Kokkos { +namespace Impl { + +class CudaInternal { +private: + + CudaInternal( const CudaInternal & ); + CudaInternal & operator = ( const CudaInternal & ); + + +public: + + typedef Cuda::size_type size_type ; + + int m_cudaDev ; + + // Device Properties + int m_cudaArch ; + unsigned m_multiProcCount ; + unsigned m_maxWarpCount ; + unsigned m_maxBlock ; + unsigned m_maxSharedWords ; + uint32_t m_maxConcurrency ; + int m_shmemPerSM ; + int m_maxShmemPerBlock ; + int m_regsPerSM ; + int m_maxBlocksPerSM ; + int m_maxThreadsPerSM ; + int m_maxThreadsPerBlock ; + + mutable size_type m_scratchSpaceCount ; + mutable size_type m_scratchFlagsCount ; + mutable size_type m_scratchUnifiedCount ; + mutable size_type m_scratchFunctorSize ; + size_type m_scratchUnifiedSupported ; + size_type m_streamCount ; + mutable size_type * m_scratchSpace ; + mutable size_type * m_scratchFlags ; + mutable size_type * m_scratchUnified ; + mutable size_type * m_scratchFunctor ; + uint32_t * m_scratchConcurrentBitset ; + cudaStream_t m_stream ; + + static int was_initialized; + static int was_finalized; + + static CudaInternal & singleton(); + + int verify_is_initialized( const char * const label ) const ; + + int is_initialized() const + { return 0 != m_scratchSpace && 0 != m_scratchFlags ; } + + void initialize( int cuda_device_id , cudaStream_t stream = 0 ); + void finalize(); + + void print_configuration( std::ostream & ) const ; + + void fence() const ; + + ~CudaInternal(); + + CudaInternal() + : m_cudaDev( -1 ) + , m_cudaArch( -1 ) + , m_multiProcCount( 0 ) + , m_maxWarpCount( 0 ) + , m_maxBlock( 0 ) + , m_maxSharedWords( 0 ) + , m_maxConcurrency( 0 ) + , m_shmemPerSM( 0 ) + , m_maxShmemPerBlock( 0 ) + , m_regsPerSM( 0 ) + , m_maxBlocksPerSM( 0 ) + , m_maxThreadsPerSM( 0 ) + , m_maxThreadsPerBlock( 0 ) + , m_scratchSpaceCount( 0 ) + , m_scratchFlagsCount( 0 ) + , m_scratchUnifiedCount( 0 ) + , m_scratchFunctorSize( 0 ) + , m_scratchUnifiedSupported( 0 ) + , m_streamCount( 0 ) + , m_scratchSpace( 0 ) + , m_scratchFlags( 0 ) + , m_scratchUnified( 0 ) + , m_scratchFunctor( 0 ) + , m_scratchConcurrentBitset( 0 ) + , m_stream( 0 ) + {} + + size_type * scratch_space( const size_type size ) const ; + size_type * scratch_flags( const size_type size ) const ; + size_type * scratch_unified( const size_type size ) const ; + size_type * scratch_functor( const size_type size ) const ; +}; + +} // Namespace Impl +} // Namespace Kokkos +#endif diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp new file mode 100644 index 0000000000..2ec868c1f1 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp @@ -0,0 +1,579 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_CUDAEXEC_HPP +#define KOKKOS_CUDAEXEC_HPP + +#include +#ifdef KOKKOS_ENABLE_CUDA + +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#if defined( __CUDACC__ ) + +/** \brief Access to constant memory on the device */ +#ifdef KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE + +__device__ __constant__ +extern unsigned long kokkos_impl_cuda_constant_memory_buffer[] ; + +#else + +__device__ __constant__ +unsigned long kokkos_impl_cuda_constant_memory_buffer[ Kokkos::Impl::CudaTraits::ConstantMemoryUsage / sizeof(unsigned long) ] ; + +#endif + +namespace Kokkos { +namespace Impl { + void* cuda_resize_scratch_space(std::int64_t bytes, bool force_shrink = false); +} +} + +template< typename T > +inline +__device__ +T * kokkos_impl_cuda_shared_memory() +{ extern __shared__ Kokkos::CudaSpace::size_type sh[]; return (T*) sh ; } + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +// See section B.17 of Cuda C Programming Guide Version 3.2 +// for discussion of +// __launch_bounds__(maxThreadsPerBlock,minBlocksPerMultiprocessor) +// function qualifier which could be used to improve performance. +//---------------------------------------------------------------------------- +// Maximize L1 cache and minimize shared memory: +// cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1 ); +// For 2.0 capability: 48 KB L1 and 16 KB shared +//---------------------------------------------------------------------------- + +template< class DriverType> +__global__ +static void cuda_parallel_launch_constant_memory() +{ + const DriverType & driver = + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_constant_memory() +{ + const DriverType & driver = + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType> +__global__ +static void cuda_parallel_launch_local_memory( const DriverType driver ) +{ + driver(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_local_memory( const DriverType driver ) +{ + driver(); +} + +template< class DriverType> +__global__ +static void cuda_parallel_launch_global_memory( const DriverType* driver ) +{ + driver->operator()(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_global_memory( const DriverType* driver ) +{ + driver->operator()(); +} + +template< class DriverType> +__global__ +static void cuda_parallel_launch_constant_or_global_memory( const DriverType* driver_ptr ) +{ + const DriverType & driver = driver_ptr!=NULL ? *driver_ptr : + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_constant_or_global_memory( const DriverType* driver_ptr ) +{ + const DriverType & driver = driver_ptr!=NULL ? *driver_ptr : + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType > +struct DeduceCudaLaunchMechanism { + constexpr static const Kokkos::Experimental::WorkItemProperty::HintLightWeight_t light_weight = Kokkos::Experimental::WorkItemProperty::HintLightWeight; + constexpr static const Kokkos::Experimental::WorkItemProperty::HintHeavyWeight_t heavy_weight = Kokkos::Experimental::WorkItemProperty::HintHeavyWeight ; + constexpr static const typename DriverType::Policy::work_item_property property = typename DriverType::Policy::work_item_property(); + + static constexpr const Experimental::CudaLaunchMechanism valid_launch_mechanism = + // BuildValidMask + (sizeof(DriverType) + , Experimental::CudaLaunchMechanism LaunchMechanism = + DeduceCudaLaunchMechanism::launch_mechanism > +struct CudaParallelLaunch ; + +template < class DriverType + , unsigned int MaxThreadsPerBlock + , unsigned int MinBlocksPerSM> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds< MaxThreadsPerBlock + , MinBlocksPerSM > + , Experimental::CudaLaunchMechanism::ConstantMemory> +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_constant_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + // Copy functor to constant memory on the device + cudaMemcpyToSymbolAsync( + kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType), 0, cudaMemcpyHostToDevice, cudaStream_t(cuda_instance->m_stream)); + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_constant_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + <<< grid , block , shmem , cuda_instance->m_stream >>>(); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_constant_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM >); + return attr; + } +}; + +template < class DriverType> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds<0,0> + , Experimental::CudaLaunchMechanism::ConstantMemory > +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_constant_memory< DriverType > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + // Copy functor to constant memory on the device + cudaMemcpyToSymbolAsync( + kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType), 0, cudaMemcpyHostToDevice, cudaStream_t(cuda_instance->m_stream)); + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_constant_memory< DriverType > + <<< grid , block , shmem , cuda_instance->m_stream >>>(); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_constant_memory + < DriverType >); + return attr; + } +}; + +template < class DriverType + , unsigned int MaxThreadsPerBlock + , unsigned int MinBlocksPerSM > +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds< MaxThreadsPerBlock + , MinBlocksPerSM > + , Experimental::CudaLaunchMechanism::LocalMemory > +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_local_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_local_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_local_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM >); + return attr; + } +}; + +template < class DriverType> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds<0,0> + , Experimental::CudaLaunchMechanism::LocalMemory > +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_local_memory< DriverType > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_local_memory< DriverType > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_local_memory + < DriverType >); + return attr; + } +}; + +template < class DriverType + , unsigned int MaxThreadsPerBlock + , unsigned int MinBlocksPerSM> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds< MaxThreadsPerBlock + , MinBlocksPerSM> + , Experimental::CudaLaunchMechanism::GlobalMemory > +{ + inline + CudaParallelLaunch( const DriverType & driver + , const dim3 & grid + , const dim3 & block + , const int shmem + , CudaInternal* cuda_instance + , const bool prefer_shmem ) + { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { + + if ( cuda_instance->m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_global_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + DriverType* driver_ptr = NULL; + driver_ptr = reinterpret_cast(cuda_instance->scratch_functor(sizeof(DriverType))); + cudaMemcpyAsync(driver_ptr,&driver, sizeof(DriverType), cudaMemcpyDefault, cuda_instance->m_stream); + + // Invoke the driver function on the device + cuda_parallel_launch_global_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver_ptr ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_global_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM >); + return attr; + } + +}; + +template < class DriverType> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds<0,0> + , Experimental::CudaLaunchMechanism::GlobalMemory > +{ + inline + CudaParallelLaunch( const DriverType & driver + , const dim3 & grid + , const dim3 & block + , const int shmem + , CudaInternal* cuda_instance + , const bool prefer_shmem) + { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { + + if ( cuda_instance->m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_global_memory< DriverType > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + DriverType* driver_ptr = NULL; + driver_ptr = reinterpret_cast(cuda_instance->scratch_functor(sizeof(DriverType))); + cudaMemcpyAsync(driver_ptr,&driver, sizeof(DriverType), cudaMemcpyDefault, cuda_instance->m_stream); + + cuda_parallel_launch_global_memory< DriverType > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver_ptr ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_global_memory + < DriverType >); + return attr; + } +}; +//---------------------------------------------------------------------------- + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined( __CUDACC__ ) */ +#endif /* defined( KOKKOS_ENABLE_CUDA ) */ +#endif /* #ifndef KOKKOS_CUDAEXEC_HPP */ + diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp index 665d0732a7..c05fbcc6c1 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp @@ -55,9 +55,9 @@ #include #include -#include +#include #include -#include +#include #include #include #include @@ -73,6 +73,9 @@ //---------------------------------------------------------------------------- namespace Kokkos { + +extern bool show_warnings() noexcept; + namespace Impl { template< class ... Properties > @@ -85,10 +88,14 @@ public: typedef PolicyTraits traits; + template< class ExecSpace, class ... OtherProperties > + friend class TeamPolicyInternal; + private: enum { MAX_WARP = 8 }; + typename traits::execution_space m_space; int m_league_size ; int m_team_size ; int m_vector_length ; @@ -101,6 +108,19 @@ public: //! Execution space of this execution policy typedef Kokkos::Cuda execution_space ; + template + TeamPolicyInternal( const TeamPolicyInternal& p ) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_vector_length = p.m_vector_length; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + m_space = p.m_space; + } + TeamPolicyInternal& operator = (const TeamPolicyInternal& p) { m_league_size = p.m_league_size; m_team_size = p.m_team_size; @@ -110,6 +130,7 @@ public: m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; m_chunk_size = p.m_chunk_size; + m_space = p.m_space; return *this; } @@ -117,7 +138,7 @@ public: #ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > - inline static + static inline int team_size_max( const FunctorType & functor ) { int n = MAX_WARP * Impl::CudaTraits::WarpSize ; @@ -128,7 +149,7 @@ public: /* for team reduce */ + ( n + 2 ) * sizeof(double) /* for team shared */ + Impl::FunctorTeamShmemSize< FunctorType >::value( functor , n ); - if ( shmem_size < Impl::CudaTraits::SharedMemoryCapacity ) break ; + if ( shmem_size < typename traits::execution_space().impl_internal_space_instance()->m_maxShmemPerBlock ) break ; } return n ; @@ -138,7 +159,10 @@ public: template int team_size_max( const FunctorType& f, const ParallelForTag& ) const { typedef Impl::ParallelFor< FunctorType , TeamPolicy > closure_type; - int block_size = Kokkos::Impl::cuda_get_max_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + int block_size = Kokkos::Impl::cuda_get_max_block_size< FunctorType, typename traits::launch_bounds >( + space().impl_internal_space_instance(),attr,f ,(size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) ); return block_size/vector_length(); } @@ -150,7 +174,10 @@ public: typedef Impl::ParallelReduce< FunctorType , TeamPolicy, reducer_type > closure_type; typedef Impl::FunctorValueTraits< FunctorType , typename traits::work_tag > functor_value_traits; - int block_size = Kokkos::Impl::cuda_get_max_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + int block_size = Kokkos::Impl::cuda_get_max_block_size< FunctorType, typename traits::launch_bounds >( + space().impl_internal_space_instance(),attr,f ,(size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) + ((functor_value_traits::StaticValueSize!=0)?0:functor_value_traits::value_size( f ))); @@ -178,7 +205,11 @@ public: template int team_size_recommended( const FunctorType& f, const ParallelForTag& ) const { typedef Impl::ParallelFor< FunctorType , TeamPolicy > closure_type; - int block_size = Kokkos::Impl::cuda_get_opt_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< FunctorType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), + attr, f , (size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double)); return block_size/vector_length(); } @@ -190,10 +221,18 @@ public: typedef Impl::ParallelReduce< FunctorType , TeamPolicy, reducer_type > closure_type; typedef Impl::FunctorValueTraits< FunctorType , typename traits::work_tag > functor_value_traits; - int block_size = Kokkos::Impl::cuda_get_opt_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< FunctorType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), + attr, f , (size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) + ((functor_value_traits::StaticValueSize!=0)?0:functor_value_traits::value_size( f ))); - return block_size/vector_length(); + // Currently we require Power-of-2 team size for reductions. + int p2 = 1; + while(p2<=block_size) p2*=2; + p2/=2; + return p2/vector_length(); } @@ -201,6 +240,25 @@ public: int vector_length_max() { return Impl::CudaTraits::WarpSize; } + inline static + int verify_requested_vector_length( int requested_vector_length ) { + int test_vector_length = std::min( requested_vector_length, vector_length_max() ); + + // Allow only power-of-two vector_length + if ( !(is_integral_power_of_two( test_vector_length ) ) ) { + int test_pow2 = 1; + for (int i = 0; i < 5; i++) { + test_pow2 = test_pow2 << 1; + if (test_pow2 > test_vector_length) { + break; + } + } + test_vector_length = test_pow2 >> 1; + } + + return test_vector_length; + } + inline static int scratch_size_max(int level) { return (level==0? @@ -224,9 +282,14 @@ public: return m_thread_scratch_size[level]; } + inline typename traits::execution_space space() const { + return m_space; + } + TeamPolicyInternal() - : m_league_size( 0 ) - , m_team_size( 0 ) + : m_space(typename traits::execution_space()) + , m_league_size( 0 ) + , m_team_size( -1 ) , m_vector_length( 0 ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} @@ -234,22 +297,18 @@ public: {} /** \brief Specify league size, request team size */ - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space space_ , int league_size_ , int team_size_request , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( space_ ) + , m_league_size( league_size_ ) , m_team_size( team_size_request ) - , m_vector_length( vector_length_request ) + , m_vector_length( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -261,22 +320,18 @@ public: } /** \brief Specify league size, request team size */ - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space space_ , int league_size_ , const Kokkos::AUTO_t & /* team_size_request */ , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( space_ ) + , m_league_size( league_size_ ) , m_team_size( -1 ) - , m_vector_length( vector_length_request ) + , m_vector_length( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -285,18 +340,14 @@ public: TeamPolicyInternal( int league_size_ , int team_size_request , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( typename traits::execution_space() ) + , m_league_size( league_size_ ) , m_team_size( team_size_request ) - , m_vector_length ( vector_length_request ) + , m_vector_length ( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -310,18 +361,14 @@ public: TeamPolicyInternal( int league_size_ , const Kokkos::AUTO_t & /* team_size_request */ , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( typename traits::execution_space() ) + , m_league_size( league_size_ ) , m_team_size( -1 ) - , m_vector_length ( vector_length_request ) + , m_vector_length ( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -431,9 +478,10 @@ class ParallelFor< FunctorType , Kokkos::Cuda > { +public: + typedef Kokkos::RangePolicy< Traits ... > Policy; private: - typedef Kokkos::RangePolicy< Traits ... > Policy; typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::launch_bounds LaunchBounds ; @@ -479,11 +527,17 @@ public: void execute() const { const typename Policy::index_type nwork = m_policy.end() - m_policy.begin(); - const int block_size = Kokkos::Impl::cuda_get_opt_block_size< ParallelFor, LaunchBounds>( m_functor , 1, 0 , 0 ); - const dim3 block( 1 , block_size , 1); - const dim3 grid( std::min( typename Policy::index_type(( nwork + block.y - 1 ) / block.y) , typename Policy::index_type(cuda_internal_maximum_grid_count()) ) , 1 , 1); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + cudaFuncAttributes attr = CudaParallelLaunch< ParallelFor, LaunchBounds >:: + get_cuda_func_attributes(); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , 1, 0 , 0 ); + const dim3 block( 1 , block_size , 1); + const dim3 grid( std::min( typename Policy::index_type(( nwork + block.y - 1 ) / block.y) , + typename Policy::index_type(cuda_internal_maximum_grid_count()) ) , 1 , 1); + + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_policy.space().impl_internal_space_instance() , false ); } ParallelFor( const FunctorType & arg_functor , @@ -491,6 +545,7 @@ public: : m_functor( arg_functor ) , m_policy( arg_policy ) { } + }; @@ -501,8 +556,9 @@ class ParallelFor< FunctorType , Kokkos::Cuda > { -private: +public: typedef Kokkos::MDRangePolicy< Traits ... > Policy ; +private: using RP = Policy; typedef typename Policy::array_index_type array_index_type; typedef typename Policy::index_type index_type; @@ -526,7 +582,7 @@ public: void execute() const { if(m_rp.m_num_tiles==0) return; - const array_index_type maxblocks = static_cast(Kokkos::Impl::CudaTraits::UpperBoundGridCount); + const array_index_type maxblocks = static_cast(m_rp.space().impl_internal_space_instance()->m_maxBlock); if ( RP::rank == 2 ) { const dim3 block( m_rp.m_tile[0] , m_rp.m_tile[1] , 1); @@ -535,7 +591,7 @@ public: , std::min( ( m_rp.m_upper[1] - m_rp.m_lower[1] + block.y - 1 ) / block.y , maxblocks ) , 1 ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 3 ) { @@ -545,7 +601,7 @@ public: , std::min( ( m_rp.m_upper[1] - m_rp.m_lower[1] + block.y - 1 ) / block.y , maxblocks ) , std::min( ( m_rp.m_upper[2] - m_rp.m_lower[2] + block.z - 1 ) / block.z , maxblocks ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 4 ) { @@ -557,7 +613,7 @@ public: , std::min( ( m_rp.m_upper[2] - m_rp.m_lower[2] + block.y - 1 ) / block.y , maxblocks ) , std::min( ( m_rp.m_upper[3] - m_rp.m_lower[3] + block.z - 1 ) / block.z , maxblocks ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 5 ) { @@ -570,7 +626,7 @@ public: , static_cast(maxblocks) ) , std::min( ( m_rp.m_upper[4] - m_rp.m_lower[4] + block.z - 1 ) / block.z , maxblocks ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 6 ) { @@ -584,7 +640,7 @@ public: , std::min( static_cast( m_rp.m_tile_end[4] * m_rp.m_tile_end[5] ) , static_cast(maxblocks) ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else { @@ -609,9 +665,10 @@ class ParallelFor< FunctorType , Kokkos::Cuda > { +public: + typedef TeamPolicyInternal< Kokkos::Cuda , Properties ... > Policy ; private: - typedef TeamPolicyInternal< Kokkos::Cuda , Properties ... > Policy ; typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::launch_bounds LaunchBounds ; @@ -631,13 +688,14 @@ private: // const FunctorType m_functor ; + const Policy m_policy ; const size_type m_league_size ; - const size_type m_team_size ; + int m_team_size ; const size_type m_vector_size ; - const int m_shmem_begin ; - const int m_shmem_size ; + int m_shmem_begin ; + int m_shmem_size ; void* m_scratch_ptr[2] ; - const int m_scratch_size[2] ; + int m_scratch_size[2] ; template< class TagType > __device__ inline @@ -705,7 +763,7 @@ public: const dim3 grid( int(m_league_size) , 1 , 1 ); const dim3 block( int(m_vector_size) , int(m_team_size) , 1 ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this, grid, block, shmem_size_total ); // copy to device and execute + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this, grid, block, shmem_size_total, m_policy.space().impl_internal_space_instance() , true ); // copy to device and execute } @@ -713,26 +771,37 @@ public: , const Policy & arg_policy ) : m_functor( arg_functor ) + , m_policy( arg_policy ) , m_league_size( arg_policy.league_size() ) - , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelFor, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) + , m_team_size( arg_policy.team_size() ) , m_vector_size( arg_policy.vector_length() ) - , m_shmem_begin( sizeof(double) * ( m_team_size + 2 ) ) - , m_shmem_size( arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( m_functor , m_team_size ) ) - , m_scratch_ptr{NULL,NULL} - , m_scratch_size{arg_policy.scratch_size(0,m_team_size),arg_policy.scratch_size(1,m_team_size)} { + cudaFuncAttributes attr = CudaParallelLaunch< ParallelFor, LaunchBounds >:: + get_cuda_func_attributes(); + m_team_size = m_team_size>=0?m_team_size:Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , m_vector_size, + m_policy.team_scratch_size(0), m_policy.thread_scratch_size(0) )/m_vector_size; + + m_shmem_begin = ( sizeof(double) * ( m_team_size + 2 ) ); + m_shmem_size = ( m_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( m_functor , m_team_size ) ); + m_scratch_size[0] = m_policy.scratch_size(0,m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1,m_team_size); + // Functor's reduce memory, team scan memory, and team shared memory depend upon team size. - m_scratch_ptr[1] = cuda_resize_scratch_space(m_scratch_size[1]*(Cuda::concurrency()/(m_team_size*m_vector_size))); + m_scratch_ptr[0] = NULL; + m_scratch_ptr[1] = m_team_size<=0?NULL:cuda_resize_scratch_space(static_cast(m_scratch_size[1])*static_cast(Cuda::concurrency()/(m_team_size*m_vector_size))); const int shmem_size_total = m_shmem_begin + m_shmem_size ; - if ( CudaTraits::SharedMemoryCapacity < shmem_size_total ) { + if ( m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total ) { + printf("%i %i\n",m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock,shmem_size_total); Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelFor< Cuda > insufficient shared memory")); } if ( int(m_team_size) > - int(Kokkos::Impl::cuda_get_max_block_size< ParallelFor, LaunchBounds > - ( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { + int(Kokkos::Impl::cuda_get_max_block_size< FunctorType, LaunchBounds > + ( m_policy.space().impl_internal_space_instance(), + attr, arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelFor< Cuda > requested too large team size.")); } } @@ -754,9 +823,10 @@ class ParallelReduce< FunctorType , Kokkos::Cuda > { +public: + typedef Kokkos::RangePolicy< Traits ... > Policy ; private: - typedef Kokkos::RangePolicy< Traits ... > Policy ; typedef typename Policy::WorkRange WorkRange ; typedef typename Policy::work_tag WorkTag ; @@ -897,11 +967,16 @@ public: }*/ // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { unsigned n = CudaTraits::WarpSize * 8 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + int shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + while ( (n && (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size)) || + (n > static_cast(Kokkos::Impl::cuda_get_max_block_size< ParallelReduce, LaunchBounds>( f , 1, shmem_size , 0 )))) { + n >>= 1 ; + shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + } return n ; } @@ -912,9 +987,9 @@ public: if ( nwork ) { const int block_size = local_block_size( m_functor ); - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) ); - m_unified_space = cuda_internal_scratch_unified( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) ); + m_unified_space = cuda_internal_scratch_unified( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); // REQUIRED ( 1 , N , 1 ) const dim3 block( 1 , block_size , 1 ); @@ -923,10 +998,10 @@ public: const int shmem = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( m_functor , block.y ); - CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute if(!m_result_ptr_device_accessible) { - Cuda::fence(); + Cuda().fence(); if ( m_result_ptr ) { if ( m_unified_space ) { @@ -987,9 +1062,10 @@ class ParallelReduce< FunctorType , Kokkos::Cuda > { +public: + typedef Kokkos::MDRangePolicy< Traits ... > Policy ; private: - typedef Kokkos::MDRangePolicy< Traits ... > Policy ; typedef typename Policy::array_index_type array_index_type; typedef typename Policy::index_type index_type; @@ -1121,11 +1197,16 @@ public: } */ // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { unsigned n = CudaTraits::WarpSize * 8 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + int shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + while ( (n && (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size)) || + (n > static_cast(Kokkos::Impl::cuda_get_max_block_size< ParallelReduce, LaunchBounds>( f , 1, shmem_size , 0 )))) { + n >>= 1 ; + shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + } return n ; } @@ -1144,9 +1225,9 @@ public: block_size = (block_size > suggested_blocksize) ? block_size : suggested_blocksize ; //Note: block_size must be less than or equal to 512 - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) ); - m_unified_space = cuda_internal_scratch_unified( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) ); + m_unified_space = cuda_internal_scratch_unified( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); // REQUIRED ( 1 , N , 1 ) const dim3 block( 1 , block_size , 1 ); @@ -1155,10 +1236,10 @@ public: const int shmem = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( m_functor , block.y ); - CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute if(!m_result_ptr_device_accessible) { - Cuda::fence(); + Cuda().fence(); if ( m_result_ptr ) { if ( m_unified_space ) { @@ -1213,8 +1294,6 @@ public: //---------------------------------------------------------------------------- -#if 1 - template< class FunctorType , class ReducerType, class ... Properties > class ParallelReduce< FunctorType , Kokkos::TeamPolicy< Properties ... > @@ -1222,9 +1301,10 @@ class ParallelReduce< FunctorType , Kokkos::Cuda > { +public: + typedef TeamPolicyInternal< Kokkos::Cuda, Properties ... > Policy ; private: - typedef TeamPolicyInternal< Kokkos::Cuda, Properties ... > Policy ; typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::launch_bounds LaunchBounds ; @@ -1261,6 +1341,7 @@ private: // const FunctorType m_functor ; + const Policy m_policy ; const ReducerType m_reducer ; const pointer_type m_result_ptr ; const bool m_result_ptr_device_accessible ; @@ -1273,7 +1354,7 @@ private: void* m_scratch_ptr[2] ; int m_scratch_size[2] ; const size_type m_league_size ; - const size_type m_team_size ; + int m_team_size ; const size_type m_vector_size ; template< class TagType > @@ -1412,20 +1493,20 @@ public: const int nwork = m_league_size * m_team_size ; if ( nwork ) { const int block_count = UseShflReduction? std::min( m_league_size , size_type(1024*32) ) - :std::min( m_league_size , m_team_size ); + :std::min( int(m_league_size) , m_team_size ); - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_count ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) ); - m_unified_space = cuda_internal_scratch_unified( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); + m_scratch_space = cuda_internal_scratch_space(m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_count ); + m_scratch_flags = cuda_internal_scratch_flags(m_policy.space(), sizeof(size_type) ); + m_unified_space = cuda_internal_scratch_unified( m_policy.space(),ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); const dim3 block( m_vector_size , m_team_size , 1 ); const dim3 grid( block_count , 1 , 1 ); const int shmem_size_total = m_team_begin + m_shmem_begin + m_shmem_size ; - CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem_size_total ); // copy to device and execute + CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem_size_total , m_policy.space().impl_internal_space_instance() , true ); // copy to device and execute if(!m_result_ptr_device_accessible) { - Cuda::fence(); + Cuda().fence(); if ( m_result_ptr ) { if ( m_unified_space ) { @@ -1454,6 +1535,7 @@ public: Kokkos::is_view< ViewType >::value ,void*>::type = NULL) : m_functor( arg_functor ) + , m_policy ( arg_policy ) , m_reducer( InvalidType() ) , m_result_ptr( arg_result.data() ) , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ViewType::memory_space>::accessible ) @@ -1464,35 +1546,30 @@ public: , m_shmem_begin( 0 ) , m_shmem_size( 0 ) , m_scratch_ptr{NULL,NULL} - , m_scratch_size{ - arg_policy.scratch_size(0,( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) - ), arg_policy.scratch_size(1,( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) - )} , m_league_size( arg_policy.league_size() ) - , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) + , m_team_size( arg_policy.team_size() ) , m_vector_size( arg_policy.vector_length() ) { + cudaFuncAttributes attr = CudaParallelLaunch< ParallelReduce, LaunchBounds >:: + get_cuda_func_attributes(); + m_team_size = m_team_size>=0?m_team_size: + Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , m_vector_size, + m_policy.team_scratch_size(0), m_policy.thread_scratch_size(0) )/m_vector_size; + // Return Init value if the number of worksets is zero - if( arg_policy.league_size() == 0) { + if( m_league_size*m_team_size == 0) { ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , arg_result.data() ); return ; } m_team_begin = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( arg_functor , m_team_size ); m_shmem_begin = sizeof(double) * ( m_team_size + 2 ); - m_shmem_size = arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); - m_scratch_ptr[1] = cuda_resize_scratch_space(static_cast(m_scratch_size[1])*(static_cast(Cuda::concurrency()/(m_team_size*m_vector_size)))); + m_shmem_size = m_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); m_scratch_size[0] = m_shmem_size; - m_scratch_size[1] = arg_policy.scratch_size(1,m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1,m_team_size); + m_scratch_ptr[1] = m_team_size<=0?NULL:cuda_resize_scratch_space(static_cast(m_scratch_size[1])*(static_cast(Cuda::concurrency()/(m_team_size*m_vector_size)))); // The global parallel_reduce does not support vector_length other than 1 at the moment if( (arg_policy.vector_length() > 1) && !UseShflReduction ) @@ -1509,7 +1586,7 @@ public: Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > bad team size")); } - if ( CudaTraits::SharedMemoryCapacity < shmem_size_total ) { + if ( m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > requested too much L0 scratch memory")); } @@ -1523,6 +1600,7 @@ public: , const Policy & arg_policy , const ReducerType & reducer) : m_functor( arg_functor ) + , m_policy( arg_policy ) , m_reducer( reducer ) , m_result_ptr( reducer.view().data() ) , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ReducerType::result_view_type::memory_space>::accessible ) @@ -1534,12 +1612,17 @@ public: , m_shmem_size( 0 ) , m_scratch_ptr{NULL,NULL} , m_league_size( arg_policy.league_size() ) - , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) + , m_team_size( arg_policy.team_size() ) , m_vector_size( arg_policy.vector_length() ) { + cudaFuncAttributes attr = CudaParallelLaunch< ParallelReduce, LaunchBounds >:: + get_cuda_func_attributes(); + m_team_size = m_team_size>=0?m_team_size: + Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , m_vector_size, + m_policy.team_scratch_size(0), m_policy.thread_scratch_size(0) )/m_vector_size; + // Return Init value if the number of worksets is zero if( arg_policy.league_size() == 0) { ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , m_result_ptr ); @@ -1548,10 +1631,10 @@ public: m_team_begin = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( arg_functor , m_team_size ); m_shmem_begin = sizeof(double) * ( m_team_size + 2 ); - m_shmem_size = arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); - m_scratch_ptr[1] = cuda_resize_scratch_space(m_scratch_size[1]*(Cuda::concurrency()/(m_team_size*m_vector_size))); + m_shmem_size = m_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); m_scratch_size[0] = m_shmem_size; - m_scratch_size[1] = arg_policy.scratch_size(1,m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1,m_team_size); + m_scratch_ptr[1] = m_team_size<=0?NULL:cuda_resize_scratch_space(static_cast(m_scratch_size[1])*static_cast(Cuda::concurrency()/(m_team_size*m_vector_size))); // The global parallel_reduce does not support vector_length other than 1 at the moment if( (arg_policy.vector_length() > 1) && !UseShflReduction ) @@ -1565,7 +1648,7 @@ public: const int shmem_size_total = m_team_begin + m_shmem_begin + m_shmem_size ; if ( (! Kokkos::Impl::is_integral_power_of_two( m_team_size ) && !UseShflReduction ) || - CudaTraits::SharedMemoryCapacity < shmem_size_total ) { + m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > bad team size")); } if ( int(m_team_size) > arg_policy.team_size_max(m_functor,ParallelReduceTag()) ) { @@ -1575,365 +1658,6 @@ public: } }; -//---------------------------------------------------------------------------- -#else -//---------------------------------------------------------------------------- - -template< class FunctorType , class ReducerType, class ... Properties > -class ParallelReduce< FunctorType - , Kokkos::TeamPolicy< Properties ... > - , ReducerType - , Kokkos::Cuda - > -{ -private: - - enum : int { align_scratch_value = 0x0100 /* 256 */ }; - enum : int { align_scratch_mask = align_scratch_value - 1 }; - - KOKKOS_INLINE_FUNCTION static constexpr - int align_scratch( const int n ) - { - return ( n & align_scratch_mask ) - ? n + align_scratch_value - ( n & align_scratch_mask ) : n ; - } - - //---------------------------------------- - // Reducer does not wrap a functor - template< class R = ReducerType , class F = void > - struct reducer_type : public R { - - template< class S > - using rebind = reducer_type< typename R::rebind , void > ; - - KOKKOS_INLINE_FUNCTION - reducer_type( FunctorType const * - , ReducerType const * arg_reducer - , typename R::value_type * arg_value ) - : R( *arg_reducer , arg_value ) {} - }; - - // Reducer does wrap a functor - template< class R > - struct reducer_type< R , FunctorType > : public R { - - template< class S > - using rebind = reducer_type< typename R::rebind , FunctorType > ; - - KOKKOS_INLINE_FUNCTION - reducer_type( FunctorType const * arg_functor - , ReducerType const * - , typename R::value_type * arg_value ) - : R( arg_functor , arg_value ) {} - }; - - //---------------------------------------- - - typedef TeamPolicyInternal< Kokkos::Cuda, Properties ... > Policy ; - typedef CudaTeamMember Member ; - typedef typename Policy::work_tag WorkTag ; - typedef typename reducer_type<>::pointer_type pointer_type ; - typedef typename reducer_type<>::reference_type reference_type ; - typedef typename reducer_type<>::value_type value_type ; - typedef typename Policy::launch_bounds LaunchBounds ; - - typedef Kokkos::Impl::FunctorAnalysis - < Kokkos::Impl::FunctorPatternInterface::REDUCE - , Policy - , FunctorType - > Analysis ; - -public: - - typedef FunctorType functor_type ; - typedef Cuda::size_type size_type ; - -private: - - const FunctorType m_functor ; - const reducer_type<> m_reducer ; - size_type * m_scratch_space ; - size_type * m_unified_space ; - size_type m_team_begin ; - size_type m_shmem_begin ; - size_type m_shmem_size ; - void* m_scratch_ptr[2] ; - int m_scratch_size[2] ; - const size_type m_league_size ; - const size_type m_team_size ; - const size_type m_vector_size ; - - template< class TagType > - __device__ inline - typename std::enable_if< std::is_same< TagType , void >::value >::type - exec_team( const Member & member , reference_type update ) const - { m_functor( member , update ); } - - template< class TagType > - __device__ inline - typename std::enable_if< ! std::is_same< TagType , void >::value >::type - exec_team( const Member & member , reference_type update ) const - { m_functor( TagType() , member , update ); } - - -public: - - __device__ inline - void operator() () const - { - void * const shmem = kokkos_impl_cuda_shared_memory(); - - const bool reduce_to_host = - std::is_same< typename reducer_type<>::memory_space - , Kokkos::HostSpace >::value && - m_reducer.data(); - - value_type value ; - - typename reducer_type<>::rebind< CudaSpace > - reduce( & m_functor , & m_reducer , & value ); - - reduce.init( reduce.data() ); - - // Iterate this block through the league - - for ( int league_rank = blockIdx.x - ; league_rank < m_league_size - ; league_rank += gridDim.x ) { - - // Initialization of team member data: - - const Member member - ( shmem - , m_shmem_team_begin - , m_shmem_team_size - , reinterpret_cast(m_scratch_space) + m_global_team_begin - , m_global_team_size - , league_rank - , m_league_size ); - - ParallelReduce::template - exec_team< WorkTag >( member , reduce.reference() ); - } - - if ( Member::global_reduce( reduce - , m_scratch_space - , reinterpret_cast(m_scratch_space) - + aligned_flag_size - , shmem - , m_shmem_size ) ) { - - // Single thread with data in value - - reduce.final( reduce.data() ); - - if ( reduce_to_host ) { - reducer.copy( m_unified_space , reduce.data() ); - } - } - } - - - inline - void execute() - { - const bool reduce_to_host = - std::is_same< typename reducer_type<>::memory_space - , Kokkos::HostSpace >::value && - m_reducer.data(); - - const bool reduce_to_gpu = - std::is_same< typename reducer_type<>::memory_space - , Kokkos::CudaSpace >::value && - m_reducer.data(); - - if ( m_league_size && m_team_size ) { - - const int value_size = Analysis::value_size( m_functor ); - - m_scratch_space = cuda_internal_scratch_space( m_scratch_size ); - m_unified_space = cuda_internal_scratch_unified( value_size ); - - const dim3 block( m_vector_size , m_team_size , m_team_per_block ); - const dim3 grid( m_league_size , 1 , 1 ); - const int shmem = m_shmem_team_begin + m_shmem_team_size ; - - // copy to device and execute - CudaParallelLaunch( *this, grid, block, shmem ); - - Cuda::fence(); - - if ( reduce_to_host ) { - m_reducer.copy( m_reducer.data() , pointer_type(m_unified_space) ); - } - } - else if ( reduce_to_host ) { - m_reducer.init( m_reducer.data() ); - } - else if ( reduce_to_gpu ) { - value_type tmp ; - m_reduce.init( & tmp ); - cudaMemcpy( m_reduce.data() , & tmp , cudaMemcpyHostToDevice ); - } - } - - - /**\brief Set up parameters and allocations for kernel launch. - * - * block = { vector_size , team_size , team_per_block } - * grid = { number_of_teams , 1 , 1 } - * - * shmem = shared memory for: - * [ team_reduce_buffer - * , team_scratch_buffer_level_0 ] - * reused by: - * [ global_reduce_buffer ] - * - * global_scratch for: - * [ global_reduce_flag_buffer - * , global_reduce_value_buffer - * , team_scratch_buffer_level_1 * max_concurrent_team ] - */ - - ParallelReduce( FunctorType && arg_functor - , Policy && arg_policy - , ReducerType const & arg_reducer - ) - : m_functor( arg_functor ) - // the input reducer may wrap the input functor so must - // generate a reducer bound to the copied functor. - , m_reducer( & m_functor , & arg_reducer , arg_reducer.data() ) - , m_scratch_space( 0 ) - , m_unified_space( 0 ) - , m_team_begin( 0 ) - , m_shmem_begin( 0 ) - , m_shmem_size( 0 ) - , m_scratch_ptr{NULL,NULL} - , m_league_size( arg_policy.league_size() ) - , m_team_per_block( 0 ) - , m_team_size( arg_policy.team_size() ) - , m_vector_size( arg_policy.vector_length() ) - { - if ( 0 == m_league_size ) return ; - - const int value_size = Analysis::value_size( m_functor ); - - //---------------------------------------- - // Vector length must be <= WarpSize and power of two - - const bool ok_vector = m_vector_size < CudaTraits::WarpSize && - Kokkos::Impl::is_integral_power_of_two( m_vector_size ); - - //---------------------------------------- - - if ( 0 == m_team_size ) { - // Team size is AUTO, use a whole block per team. - // Calculate block size using the occupance calculator. - // Occupancy calculator assumes whole block. - - m_team_size = - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds > - ( arg_functor - , arg_policy.vector_length() - , arg_policy.team_scratch_size(0) - , arg_policy.thread_scratch_size(0) / arg_policy.vector_length() ); - - m_team_per_block = 1 ; - } - - //---------------------------------------- - // How many CUDA threads per team. - // If more than a warp or multiple teams cannot exactly fill a warp - // then only one team per block. - - const int team_threads = m_team_size * m_vector_size ; - - if ( ( CudaTraits::WarpSize < team_threads ) || - ( CudaTraits::WarpSize % team_threads ) ) { - m_team_per_block = 1 ; - } - - //---------------------------------------- - // How much team scratch shared memory determined from - // either the functor or the policy: - - if ( CudaTraits::WarpSize < team_threads ) { - // Need inter-warp team reduction (collectives) shared memory - // Speculate an upper bound for the value size - - m_shmem_team_begin = - align_scratch( CudaTraits::warp_count(team_threads) * sizeof(double) ); - } - - m_shmem_team_size = arg_policy.scratch_size(0,m_team_size); - - if ( 0 == m_shmem_team_size ) { - m_shmem_team_size = Analysis::team_shmem_size( m_functor , m_team_size ); - } - - m_shmem_team_size = align_scratch( m_shmem_team_size ); - - // Can fit a team in a block: - - const bool ok_shmem_team = - ( m_shmem_team_begin + m_shmem_team_size ) - < CudaTraits::SharedMemoryCapacity ; - - //---------------------------------------- - - if ( 0 == m_team_per_block ) { - // Potentially more than one team per block. - // Determine number of teams per block based upon - // how much team scratch can fit and exactly filling each warp. - - const int team_per_warp = team_threads / CudaTraits::WarpSize ; - - const int max_team_per_block = - Kokkos::Impl::CudaTraits::SharedMemoryCapacity - / shmem_team_scratch_size ; - - for ( m_team_per_block = team_per_warp ; - m_team_per_block + team_per_warp < max_team_per_block ; - m_team_per_block += team_per_warp ); - } - - //---------------------------------------- - // How much global reduce scratch shared memory. - - int shmem_global_reduce_size = 8 * value_size ; - - //---------------------------------------- - // Global scratch memory requirements. - - const int aligned_flag_size = align_scratch( sizeof(int) ); - - const int max_concurrent_block = - cuda_internal_maximum_concurrent_block_count(); - - // Reduce space has claim flag followed by vaue buffer - const int global_reduce_value_size = - max_concurrent_block * - ( aligned_flag_size + align_scratch( value_size ) ); - - // Scratch space has claim flag followed by scratch buffer - const int global_team_scratch_size = - max_concurrent_block * m_team_per_block * - ( aligned_flag_size + - align_scratch( arg_policy.scratch_size(1,m_team_size) / m_vector_size ) - ); - - const int global_size = aligned_flag_size - + global_reduce_value_size - + global_team_scratch_size ; - - m_global_reduce_begin = aligned_flag_size ; - m_global_team_begin = m_global_reduce_begin + global_reduce_value_size ; - m_global_size = m_global_team_begin + global_team_scratch_size ; - } -}; - -#endif - } // namespace Impl } // namespace Kokkos @@ -1949,9 +1673,9 @@ class ParallelScan< FunctorType , Kokkos::Cuda > { -private: - +public: typedef Kokkos::RangePolicy< Traits ... > Policy ; +private: typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::WorkRange WorkRange ; @@ -2105,7 +1829,7 @@ public: } // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { // blockDim.y must be power of two = 128 (4 warps) or 256 (8 warps) or 512 (16 warps) @@ -2114,7 +1838,7 @@ public: // 4 warps was 10% faster than 8 warps and 20% faster than 16 warps in unit testing unsigned n = CudaTraits::WarpSize * 4 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + while ( n && unsigned(m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock) < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } return n ; } @@ -2140,18 +1864,18 @@ public: // How many block are really needed for this much work: const int grid_x = ( nwork + work_per_block - 1 ) / work_per_block ; - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( m_functor ) * grid_x ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) * 1 ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( m_functor ) * grid_x ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) * 1 ); const dim3 grid( grid_x , 1 , 1 ); const dim3 block( 1 , block_size , 1 ); // REQUIRED DIMENSIONS ( 1 , N , 1 ) const int shmem = ValueTraits::value_size( m_functor ) * ( block_size + 2 ); m_final = false ; - CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute m_final = true ; - CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute } } @@ -2173,9 +1897,10 @@ class ParallelScanWithTotal< FunctorType , Kokkos::Cuda > { -private: - +public: typedef Kokkos::RangePolicy< Traits ... > Policy ; + +private: typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::WorkRange WorkRange ; @@ -2332,7 +2057,7 @@ public: } // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { // blockDim.y must be power of two = 128 (4 warps) or 256 (8 warps) or 512 (16 warps) @@ -2341,7 +2066,7 @@ public: // 4 warps was 10% faster than 8 warps and 20% faster than 16 warps in unit testing unsigned n = CudaTraits::WarpSize * 4 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + while ( n && unsigned(m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock) < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } return n ; } @@ -2367,18 +2092,18 @@ public: // How many block are really needed for this much work: const int grid_x = ( nwork + work_per_block - 1 ) / work_per_block ; - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( m_functor ) * grid_x ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) * 1 ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( m_functor ) * grid_x ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) * 1 ); const dim3 grid( grid_x , 1 , 1 ); const dim3 block( 1 , block_size , 1 ); // REQUIRED DIMENSIONS ( 1 , N , 1 ) const int shmem = ValueTraits::value_size( m_functor ) * ( block_size + 2 ); m_final = false ; - CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute m_final = true ; - CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute const int size = ValueTraits::value_size( m_functor ); DeepCopy( &m_returnvalue, m_scratch_space + (grid_x - 1)*size/sizeof(int), size ); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp index d09854c3a5..c39dddb198 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp @@ -376,13 +376,13 @@ template< class ReducerType > __device__ inline typename std::enable_if< Kokkos::is_reducer::value >::type cuda_intra_warp_reduction( const ReducerType& reducer, + typename ReducerType::value_type& result, const uint32_t max_active_thread = blockDim.y) { typedef typename ReducerType::value_type ValueType; unsigned int shift = 1; - ValueType result = reducer.reference(); //Reduce over values from threads with different threadIdx.y while(blockDim.x * shift < 32 ) { const ValueType tmp = shfl_down(result, blockDim.x*shift,32u); @@ -400,6 +400,7 @@ template< class ReducerType > __device__ inline typename std::enable_if< Kokkos::is_reducer::value >::type cuda_inter_warp_reduction( const ReducerType& reducer, + typename ReducerType::value_type value, const int max_active_thread = blockDim.y) { typedef typename ReducerType::value_type ValueType; @@ -410,7 +411,6 @@ cuda_inter_warp_reduction( const ReducerType& reducer, // could lead to race conditions __shared__ double sh_result[(sizeof(ValueType)+7)/8*STEP_WIDTH]; ValueType* result = (ValueType*) & sh_result; - ValueType value = reducer.reference(); const int step = 32 / blockDim.x; int shift = STEP_WIDTH; const int id = threadIdx.y%step==0?threadIdx.y/step:65000; @@ -438,9 +438,18 @@ template< class ReducerType > __device__ inline typename std::enable_if< Kokkos::is_reducer::value >::type cuda_intra_block_reduction( const ReducerType& reducer, + typename ReducerType::value_type value, const int max_active_thread = blockDim.y) { - cuda_intra_warp_reduction(reducer,max_active_thread); - cuda_inter_warp_reduction(reducer,max_active_thread); + cuda_intra_warp_reduction(reducer,value,max_active_thread); + cuda_inter_warp_reduction(reducer,value,max_active_thread); +} + +template< class ReducerType > +__device__ inline +typename std::enable_if< Kokkos::is_reducer::value >::type +cuda_intra_block_reduction( const ReducerType& reducer, + const int max_active_thread = blockDim.y) { + cuda_intra_block_reduction(reducer,reducer.reference(),max_active_thread); } template< class ReducerType> diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp index ee949583f1..ac36cfd67e 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp @@ -54,194 +54,8 @@ namespace Kokkos { namespace Impl { -template class TaskQueue< Kokkos::Cuda > ; - -//---------------------------------------------------------------------------- - -__device__ -void TaskQueueSpecialization< Kokkos::Cuda >::driver - ( TaskQueueSpecialization< Kokkos::Cuda >::queue_type * const queue - , int32_t shmem_per_warp ) -{ - using Member = TaskExec< Kokkos::Cuda > ; - using Queue = TaskQueue< Kokkos::Cuda > ; - using task_root_type = TaskBase< void , void , void > ; - - extern __shared__ int32_t shmem_all[]; - - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - int32_t * const warp_shmem = - shmem_all + ( threadIdx.z * shmem_per_warp ) / sizeof(int32_t); - - task_root_type * const task_shmem = (task_root_type *) warp_shmem ; - - const int warp_lane = threadIdx.x + threadIdx.y * blockDim.x ; - - Member single_exec( warp_shmem , 1 ); - Member team_exec( warp_shmem , blockDim.y ); - - task_root_type * task_ptr ; - - // Loop until all queues are empty and no tasks in flight - - do { - - // Each team lead attempts to acquire either a thread team task - // or collection of single thread tasks for the team. - - if ( 0 == warp_lane ) { - - task_ptr = 0 < *((volatile int *) & queue->m_ready_count) ? end : 0 ; - - // Loop by priority and then type - for ( int i = 0 ; i < Queue::NumQueue && end == task_ptr ; ++i ) { - for ( int j = 0 ; j < 2 && end == task_ptr ; ++j ) { - task_ptr = Queue::pop_ready_task( & queue->m_ready[i][j] ); - } - } - -#if 0 -printf("TaskQueue::driver(%d,%d) task(%lx)\n",threadIdx.z,blockIdx.x - , uintptr_t(task_ptr)); -#endif - - } - - // Synchronize warp with memory fence before broadcasting task pointer: - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "A" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - // Broadcast task pointer: - - ((int*) & task_ptr )[0] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[0] , 0 , 32 ); - ((int*) & task_ptr )[1] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[1] , 0 , 32 ); - -#if defined( KOKKOS_DEBUG ) - KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "TaskQueue CUDA task_ptr" ); -#endif - - if ( 0 == task_ptr ) break ; // 0 == queue->m_ready_count - - if ( end != task_ptr ) { - - // Whole warp copy task's closure to/from shared memory. - // Use all threads of warp for coalesced read/write. - - int32_t const b = sizeof(task_root_type) / sizeof(int32_t); - int32_t const e = *((int32_t volatile *)( & task_ptr->m_alloc_size )) / sizeof(int32_t); - - int32_t volatile * const task_mem = (int32_t volatile *) task_ptr ; - - // copy task closure from global to shared memory: - - for ( int32_t i = warp_lane ; i < e ; i += CudaTraits::WarpSize ) { - warp_shmem[i] = task_mem[i] ; - } - - // Synchronize threads of the warp and insure memory - // writes are visible to all threads in the warp. - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "B" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - if ( task_root_type::TaskTeam == task_shmem->m_task_type ) { - // Thread Team Task - (*task_shmem->m_apply)( task_shmem , & team_exec ); - } - else if ( 0 == threadIdx.y ) { - // Single Thread Task - (*task_shmem->m_apply)( task_shmem , & single_exec ); - } - - // Synchronize threads of the warp and insure memory - // writes are visible to all threads in the warp. - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "C" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - // copy task closure from shared to global memory: - - for ( int32_t i = b + warp_lane ; i < e ; i += CudaTraits::WarpSize ) { - task_mem[i] = warp_shmem[i] ; - } - - // Synchronize threads of the warp and insure memory - // writes are visible to root thread of the warp for - // respawn or completion. - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "D" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - // If respawn requested copy respawn data back to main memory - - if ( 0 == warp_lane ) { - - if ( ((task_root_type *) task_root_type::LockTag) != task_shmem->m_next ) { - ( (volatile task_root_type *) task_ptr )->m_next = task_shmem->m_next ; - ( (volatile task_root_type *) task_ptr )->m_priority = task_shmem->m_priority ; - } - - queue->complete( task_ptr ); - } - } - } while(1); -} - -namespace { - -__global__ -void cuda_task_queue_execute( TaskQueue< Kokkos::Cuda > * queue - , int32_t shmem_size ) -{ TaskQueueSpecialization< Kokkos::Cuda >::driver( queue , shmem_size ); } - -} - -void TaskQueueSpecialization< Kokkos::Cuda >::execute - ( TaskQueue< Kokkos::Cuda > * const queue ) -{ - const int shared_per_warp = 2048 ; - const int warps_per_block = 4 ; - const dim3 grid( Kokkos::Impl::cuda_internal_multiprocessor_count() , 1 , 1 ); - const dim3 block( 1 , Kokkos::Impl::CudaTraits::WarpSize , warps_per_block ); - const int shared_total = shared_per_warp * warps_per_block ; - const cudaStream_t stream = 0 ; - - CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - -#if 0 -printf("cuda_task_queue_execute before\n"); -#endif - - // Query the stack size, in bytes: - - size_t previous_stack_size = 0 ; - CUDA_SAFE_CALL( cudaDeviceGetLimit( & previous_stack_size , cudaLimitStackSize ) ); - - // If not large enough then set the stack size, in bytes: - - const size_t larger_stack_size = 2048 ; - - if ( previous_stack_size < larger_stack_size ) { - CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , larger_stack_size ) ); - } - - cuda_task_queue_execute<<< grid , block , shared_total , stream >>>( queue , shared_per_warp ); - - CUDA_SAFE_CALL( cudaGetLastError() ); - - CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - - if ( previous_stack_size < larger_stack_size ) { - CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , previous_stack_size ) ); - } - -#if 0 -printf("cuda_task_queue_execute after\n"); -#endif - -} +template class TaskQueue< Kokkos::Cuda, Impl::default_tasking_memory_space_for_execution_space_t > ; +template class TaskQueueMultiple< Kokkos::Cuda, Impl::default_tasking_memory_space_for_execution_space_t > ; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp index 8fa1192567..c35987e49e 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp @@ -50,6 +50,14 @@ //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- +#include + +#include +#include // CUDA_SAFE_CALL +#include + +//---------------------------------------------------------------------------- + namespace Kokkos { namespace Impl { namespace { @@ -57,54 +65,498 @@ namespace { template< typename TaskType > __global__ void set_cuda_task_base_apply_function_pointer - ( TaskBase::function_type * ptr ) -{ *ptr = TaskType::apply ; } + ( typename TaskType::function_type * ptr, typename TaskType::destroy_type* dtor ) +{ + *ptr = TaskType::apply; + *dtor = TaskType::destroy; +} + +template< typename Scheduler > +__global__ +void cuda_task_queue_execute( Scheduler scheduler, int32_t shmem_size ) { + TaskQueueSpecialization< Scheduler >::driver( std::move(scheduler) , shmem_size ); +} } -template< class > class TaskExec ; +template class TaskExec ; -template<> -class TaskQueueSpecialization< Kokkos::Cuda > +template +class TaskQueueSpecialization< + SimpleTaskScheduler +> { public: - using execution_space = Kokkos::Cuda ; - using memory_space = Kokkos::CudaUVMSpace ; - using queue_type = TaskQueue< execution_space > ; - using member_type = TaskExec< Kokkos::Cuda > ; + using scheduler_type = SimpleTaskScheduler; + using execution_space = Kokkos::Cuda; + using memory_space = Kokkos::CudaUVMSpace; + using member_type = TaskExec ; + enum : long { max_league_size = 16 }; + enum : int { warps_per_block = 4 }; + + KOKKOS_INLINE_FUNCTION static - void iff_single_thread_recursive_execute( queue_type * const ) {} + void iff_single_thread_recursive_execute( scheduler_type const& ) {} + + static int get_max_team_count( + execution_space const& + ) { + return Kokkos::Impl::cuda_internal_multiprocessor_count() * warps_per_block; + } __device__ - static void driver( queue_type * const , int32_t ); + static void driver(scheduler_type scheduler, int32_t shmem_per_warp) + { + using queue_type = typename scheduler_type::task_queue_type; + using task_base_type = typename scheduler_type::task_base_type; + using runnable_task_base_type = typename scheduler_type::runnable_task_base_type; + using scheduling_info_storage_type = + SchedulingInfoStorage< + runnable_task_base_type, + typename scheduler_type::task_scheduling_info_type + >; + + extern __shared__ int32_t shmem_all[]; + + int32_t* const warp_shmem = shmem_all + (threadIdx.z * shmem_per_warp) / sizeof(int32_t); + + task_base_type* const shared_memory_task_copy = (task_base_type*)warp_shmem; + + const int warp_lane = threadIdx.x + threadIdx.y * blockDim.x; + + member_type single_exec(scheduler, warp_shmem, 1); + member_type team_exec(scheduler, warp_shmem, blockDim.y); + + auto& queue = scheduler.queue(); + auto& team_scheduler = team_exec.scheduler(); + + auto current_task = OptionalRef(); + + // Loop until all queues are empty and no tasks in flight + while(not queue.is_done()) { + + if(warp_lane == 0) { // should be (?) same as team_exec.team_rank() == 0 + // pop off a task + current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); + } + + // Broadcast task pointer: + + // Sync before the broadcast + KOKKOS_IMPL_CUDA_SYNCWARP; + + // pretend it's an int* for shuffle purposes + ((int*) ¤t_task)[0] = KOKKOS_IMPL_CUDA_SHFL(((int*) ¤t_task)[0], 0, 32); + ((int*) ¤t_task)[1] = KOKKOS_IMPL_CUDA_SHFL(((int*) ¤t_task)[1], 0, 32); + + if(current_task) { + + KOKKOS_ASSERT(!current_task->as_runnable_task().get_respawn_flag()); + + int32_t b = sizeof(scheduling_info_storage_type) / sizeof(int32_t); + static_assert( + sizeof(scheduling_info_storage_type) % sizeof(int32_t) == 0, + "bad task size" + ); + int32_t const e = current_task->get_allocation_size() / sizeof(int32_t); + KOKKOS_ASSERT(current_task->get_allocation_size() % sizeof(int32_t) == 0); + + int32_t volatile* const task_mem = (int32_t volatile*)current_task.get(); + + // do a coordinated copy of the task closure from global to shared memory: + for(int32_t i = warp_lane; i < e; i += CudaTraits::WarpSize) { + warp_shmem[i] = task_mem[i]; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + KOKKOS_IMPL_CUDA_SYNCWARP; + + if(shared_memory_task_copy->is_team_runnable()) { + // Thread Team Task + shared_memory_task_copy->as_runnable_task().run(team_exec); + } + else if(threadIdx.y == 0) { + // TODO @tasking @optimization DSH Change this to warp_lane == 0 when we allow blockDim.x to be more than 1 + // Single Thread Task + shared_memory_task_copy->as_runnable_task().run(single_exec); + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + + KOKKOS_IMPL_CUDA_SYNCWARP; + + //if(warp_lane < b % CudaTraits::WarpSize) b += CudaTraits::WarpSize; + //b -= b % CudaTraits::WarpSize; + + // copy task closure from shared to global memory: + for (int32_t i = b + warp_lane; i < e; i += CudaTraits::WarpSize) { + task_mem[i] = warp_shmem[i]; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to root thread of the warp for + // respawn or completion. + + KOKKOS_IMPL_CUDA_SYNCWARP; + + + if (warp_lane == 0) { + // If respawn requested copy respawn data back to main memory + if(shared_memory_task_copy->as_runnable_task().get_respawn_flag()) { + if(shared_memory_task_copy->as_runnable_task().has_predecessor()) { + // It's not necessary to make this a volatile write because + // the next read of the predecessor is on this thread in complete, + // and the predecessor is cleared there (using a volatile write) + current_task->as_runnable_task().acquire_predecessor_from( + shared_memory_task_copy->as_runnable_task() + ); + } + + // It may not necessary to make this a volatile write, since the + // next read will be done by this thread in complete where the + // rescheduling occurs, but since the task could be stolen later + // before this is written again, we should do the volatile write + // here. (It might not be necessary though because I don't know + // where else the priority would be read after it is scheduled + // by this thread; for now, we leave it volatile, but we should + // benchmark the cost of this.) + current_task.as_volatile()->set_priority(shared_memory_task_copy->get_priority()); + + // It's not necessary to make this a volatile write, since the + // next read of it (if true) will be by this thread in `complete()`, + // which will unset the flag (using volatile) once it has handled + // the respawn + current_task->as_runnable_task().set_respawn_flag(); + + } + + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } + } + } static - void execute( queue_type * const ); + void execute(scheduler_type const& scheduler) + { + const int shared_per_warp = 2048 ; + const dim3 grid(Kokkos::Impl::cuda_internal_multiprocessor_count(), 1, 1); + const dim3 block(1, Kokkos::Impl::CudaTraits::WarpSize, warps_per_block); + const int shared_total = shared_per_warp * warps_per_block; + const cudaStream_t stream = nullptr; + + KOKKOS_ASSERT( + static_cast(grid.x * grid.y * grid.z * block.x * block.y * block.z) + == static_cast(get_max_team_count(scheduler.get_execution_space()) * Kokkos::Impl::CudaTraits::WarpSize) + ); + + auto& queue = scheduler.queue(); + + CUDA_SAFE_CALL(cudaDeviceSynchronize()); + + // Query the stack size, in bytes: + + size_t previous_stack_size = 0; + CUDA_SAFE_CALL(cudaDeviceGetLimit(&previous_stack_size, cudaLimitStackSize)); + + // If not large enough then set the stack size, in bytes: + + const size_t larger_stack_size = 1 << 11; + + if (previous_stack_size < larger_stack_size) { + CUDA_SAFE_CALL(cudaDeviceSetLimit(cudaLimitStackSize, larger_stack_size)); + } + + cuda_task_queue_execute<<>>(scheduler, shared_per_warp); + + CUDA_SAFE_CALL(cudaGetLastError()); + + CUDA_SAFE_CALL(cudaDeviceSynchronize()); + + if (previous_stack_size < larger_stack_size) { + CUDA_SAFE_CALL(cudaDeviceSetLimit(cudaLimitStackSize, previous_stack_size)); + } + } + + template + static + // TODO @tasking @optimiazation DSH specialize this for trivially destructible types + void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) + { + using function_type = typename TaskType::function_type; + using destroy_type = typename TaskType::destroy_type; + + // TODO @tasking @minor DSH make sure there aren't any alignment concerns? + void* storage = cuda_internal_scratch_unified( + Kokkos::Cuda(), + sizeof(function_type) + sizeof(destroy_type) + ); + function_type* ptr_ptr = (function_type*)storage; + destroy_type* dtor_ptr = (destroy_type*)((char*)storage + sizeof(function_type)); + + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + set_cuda_task_base_apply_function_pointer<<<1,1>>>(ptr_ptr, dtor_ptr); + + CUDA_SAFE_CALL( cudaGetLastError() ); + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + ptr = *ptr_ptr; + dtor = *dtor_ptr; + } +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +class TaskQueueSpecializationConstrained< + Scheduler, + typename std::enable_if< + std::is_same::value + >::type +> +{ +public: + + using scheduler_type = Scheduler; + using execution_space = Kokkos::Cuda; + using memory_space = Kokkos::CudaUVMSpace; + using member_type = TaskExec ; + + enum : long { max_league_size = 16 }; + + KOKKOS_INLINE_FUNCTION + static + void iff_single_thread_recursive_execute( scheduler_type const& ) {} + + __device__ + static void driver(scheduler_type scheduler, int32_t shmem_per_warp) + { + using queue_type = typename scheduler_type::queue_type; + using task_root_type = TaskBase; + + extern __shared__ int32_t shmem_all[]; + + task_root_type* const end = (task_root_type *) task_root_type::EndTag ; + task_root_type* const no_more_tasks_sentinel = nullptr; + + int32_t * const warp_shmem = + shmem_all + ( threadIdx.z * shmem_per_warp ) / sizeof(int32_t); + + task_root_type * const task_shmem = (task_root_type *) warp_shmem ; + + const int warp_lane = threadIdx.x + threadIdx.y * blockDim.x ; + + member_type single_exec(scheduler, warp_shmem, 1); + member_type team_exec(scheduler, warp_shmem, blockDim.y); + + auto& team_queue = team_exec.scheduler().queue(); + + task_root_type * task_ptr = no_more_tasks_sentinel; + + // Loop until all queues are empty and no tasks in flight + + do { + + // Each team lead attempts to acquire either a thread team task + // or collection of single thread tasks for the team. + + if ( 0 == warp_lane ) { + + if( *((volatile int *) & team_queue.m_ready_count) > 0 ) { + task_ptr = end; + // Attempt to acquire a task + // Loop by priority and then type + for ( int i = 0 ; i < queue_type::NumQueue && end == task_ptr ; ++i ) { + for ( int j = 0 ; j < 2 && end == task_ptr ; ++j ) { + task_ptr = queue_type::pop_ready_task( & team_queue.m_ready[i][j] ); + } + } + } + else { + // returns nullptr if and only if all other queues have a ready + // count of 0 also. Otherwise, returns a task from another queue + // or `end` if one couldn't be popped + task_ptr = team_queue.attempt_to_steal_task(); + #if 0 + if(task != no_more_tasks_sentinel && task != end) { + std::printf("task stolen on rank %d\n", team_exec.league_rank()); + } + #endif + } + + } + + // Synchronize warp with memory fence before broadcasting task pointer: + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "A" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + // Broadcast task pointer: + + ((int*) & task_ptr )[0] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[0] , 0 , 32 ); + ((int*) & task_ptr )[1] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[1] , 0 , 32 ); + + #if defined( KOKKOS_DEBUG ) + KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "TaskQueue CUDA task_ptr" ); + #endif + + if ( 0 == task_ptr ) break ; // 0 == queue->m_ready_count + + if ( end != task_ptr ) { + + // Whole warp copy task's closure to/from shared memory. + // Use all threads of warp for coalesced read/write. + + int32_t const b = sizeof(task_root_type) / sizeof(int32_t); + int32_t const e = *((int32_t volatile *)( & task_ptr->m_alloc_size )) / sizeof(int32_t); + + int32_t volatile * const task_mem = (int32_t volatile *) task_ptr ; + + KOKKOS_ASSERT(e * sizeof(int32_t) < shmem_per_warp); + + // copy task closure from global to shared memory: + + for ( int32_t i = warp_lane ; i < e ; i += CudaTraits::WarpSize ) { + warp_shmem[i] = task_mem[i] ; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "B" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + if ( task_root_type::TaskTeam == task_shmem->m_task_type ) { + // Thread Team Task + (*task_shmem->m_apply)( task_shmem , & team_exec ); + } + else if ( 0 == threadIdx.y ) { + // Single Thread Task + (*task_shmem->m_apply)( task_shmem , & single_exec ); + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "C" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + // copy task closure from shared to global memory: + + for ( int32_t i = b + warp_lane ; i < e ; i += CudaTraits::WarpSize ) { + task_mem[i] = warp_shmem[i] ; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to root thread of the warp for + // respawn or completion. + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "D" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + // If respawn requested copy respawn data back to main memory + + if ( 0 == warp_lane ) { + + if ( ((task_root_type *) task_root_type::LockTag) != task_shmem->m_next ) { + ( (volatile task_root_type *) task_ptr )->m_next = task_shmem->m_next ; + ( (volatile task_root_type *) task_ptr )->m_priority = task_shmem->m_priority ; + } + + team_queue.complete( task_ptr ); + } + + } + } while(1); + } + + static + void execute(scheduler_type const& scheduler) + { + const int shared_per_warp = 2048 ; + const int warps_per_block = 4 ; + const dim3 grid( Kokkos::Impl::cuda_internal_multiprocessor_count() , 1 , 1 ); + //const dim3 grid( 1 , 1 , 1 ); + const dim3 block( 1 , Kokkos::Impl::CudaTraits::WarpSize , warps_per_block ); + const int shared_total = shared_per_warp * warps_per_block ; + const cudaStream_t stream = 0 ; + + auto& queue = scheduler.queue(); + queue.initialize_team_queues(warps_per_block * grid.x); + + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + // Query the stack size, in bytes: + + size_t previous_stack_size = 0 ; + CUDA_SAFE_CALL( cudaDeviceGetLimit( & previous_stack_size , cudaLimitStackSize ) ); + + // If not large enough then set the stack size, in bytes: + + const size_t larger_stack_size = 2048 ; + + if ( previous_stack_size < larger_stack_size ) { + CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , larger_stack_size ) ); + } + + cuda_task_queue_execute<<< grid , block , shared_total , stream >>>( scheduler , shared_per_warp ); + + CUDA_SAFE_CALL( cudaGetLastError() ); + + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + if ( previous_stack_size < larger_stack_size ) { + CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , previous_stack_size ) ); + } + + } template< typename TaskType > static - typename TaskType::function_type - get_function_pointer() + void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) { - using function_type = typename TaskType::function_type ; + using function_type = typename TaskType::function_type; + using destroy_type = typename TaskType::destroy_type; - function_type * const ptr = - (function_type*) cuda_internal_scratch_unified( sizeof(function_type) ); + void* storage = cuda_internal_scratch_unified( + Kokkos::Cuda(), + sizeof(function_type) + sizeof(destroy_type) + ); + function_type* ptr_ptr = (function_type*)storage; + destroy_type* dtor_ptr = (destroy_type*)((char*)storage + sizeof(function_type)); CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - set_cuda_task_base_apply_function_pointer<<<1,1>>>(ptr); + set_cuda_task_base_apply_function_pointer<<<1,1>>>(ptr_ptr, dtor_ptr); CUDA_SAFE_CALL( cudaGetLastError() ); CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - return *ptr ; + ptr = *ptr_ptr; + dtor = *dtor_ptr; + } }; -extern template class TaskQueue< Kokkos::Cuda > ; +extern template class TaskQueue< Kokkos::Cuda, default_tasking_memory_space_for_execution_space_t > ; }} /* namespace Kokkos::Impl */ @@ -136,8 +588,8 @@ namespace Impl { * When executing a single thread task the syncwarp or other * warp synchronizing functions must not be called. */ -template<> -class TaskExec< Kokkos::Cuda > +template +class TaskExec { private: @@ -148,24 +600,39 @@ private: TaskExec & operator = ( TaskExec && ) = delete ; TaskExec & operator = ( TaskExec const & ) = delete ; - friend class Kokkos::Impl::TaskQueue< Kokkos::Cuda > ; - friend class Kokkos::Impl::TaskQueueSpecialization< Kokkos::Cuda > ; + friend class Kokkos::Impl::TaskQueue< Kokkos::Cuda, default_tasking_memory_space_for_execution_space_t > ; + template + friend class Kokkos::Impl::TaskQueueSpecializationConstrained; + template + friend class Kokkos::Impl::TaskQueueSpecialization; int32_t * m_team_shmem ; const int m_team_size ; + Scheduler m_scheduler; // If constructed with arg_team_size == 1 the object // can only be used by 0 == threadIdx.y. - __device__ - TaskExec( int32_t * arg_team_shmem , int arg_team_size = blockDim.y ) - : m_team_shmem( arg_team_shmem ) - , m_team_size( arg_team_size ) {} + KOKKOS_INLINE_FUNCTION + TaskExec( + Scheduler const& parent_scheduler, + int32_t* arg_team_shmem, + int arg_team_size = blockDim.y + ) + : m_team_shmem(arg_team_shmem), + m_team_size(arg_team_size), + m_scheduler(parent_scheduler.get_team_scheduler(league_rank())) + { } public: + using thread_team_member = TaskExec; + #if defined( __CUDA_ARCH__ ) - __device__ int team_rank() const { return threadIdx.y ; } - __device__ int team_size() const { return m_team_size ; } + __device__ int team_rank() const { return threadIdx.y ; } + __device__ int team_size() const { return m_team_size ; } + //__device__ int league_rank() const { return threadIdx.z; } + __device__ int league_rank() const { return blockIdx.x * blockDim.z + threadIdx.z; } + __device__ int league_size() const { return blockDim.z * gridDim.x; } __device__ void team_barrier() const { @@ -186,13 +653,18 @@ public: } #else - __host__ int team_rank() const { return 0 ; } - __host__ int team_size() const { return 0 ; } + __host__ int team_rank() const { return 0 ; } + __host__ int team_size() const { return 0 ; } + __host__ int league_rank() const { return 0; } + __host__ int league_size() const { return 0; } __host__ void team_barrier() const {} template< class ValueType > __host__ void team_broadcast( ValueType & , const int ) const {} #endif + KOKKOS_INLINE_FUNCTION Scheduler const& scheduler() const noexcept { return m_scheduler; } + KOKKOS_INLINE_FUNCTION Scheduler& scheduler() noexcept { return m_scheduler; } + }; }} /* namespace Kokkos::Impl */ @@ -203,20 +675,22 @@ public: namespace Kokkos { namespace Impl { -template -struct TeamThreadRangeBoundariesStruct > +template +struct TeamThreadRangeBoundariesStruct> { - typedef iType index_type; + using index_type = iType; + using member_type = TaskExec; + const iType start ; const iType end ; const iType increment ; - const TaskExec< Kokkos::Cuda > & thread; + member_type const& thread; #if defined( __CUDA_ARCH__ ) __device__ inline TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const iType& arg_count) + ( member_type const& arg_thread, const iType& arg_count) : start( threadIdx.y ) , end(arg_count) , increment( blockDim.y ) @@ -225,7 +699,7 @@ struct TeamThreadRangeBoundariesStruct > __device__ inline TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread + ( member_type const& arg_thread , const iType & arg_start , const iType & arg_end ) @@ -238,10 +712,10 @@ struct TeamThreadRangeBoundariesStruct > #else TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const iType& arg_count); + ( member_type const& arg_thread, const iType& arg_count); TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread + ( member_type const& arg_thread , const iType & arg_start , const iType & arg_end ); @@ -252,20 +726,22 @@ struct TeamThreadRangeBoundariesStruct > //---------------------------------------------------------------------------- -template -struct ThreadVectorRangeBoundariesStruct > +template +struct ThreadVectorRangeBoundariesStruct > { - typedef iType index_type; + using index_type = iType; + using member_type = TaskExec; + const index_type start ; const index_type end ; const index_type increment ; - const TaskExec< Kokkos::Cuda > & thread; + const member_type& thread; #if defined( __CUDA_ARCH__ ) __device__ inline ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_count ) + ( member_type const& arg_thread, const index_type& arg_count ) : start( threadIdx.x ) , end(arg_count) , increment( blockDim.x ) @@ -274,9 +750,9 @@ struct ThreadVectorRangeBoundariesStruct > __device__ inline ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_begin, const index_type& arg_end ) + ( member_type const& arg_thread, const index_type& arg_begin, const index_type& arg_end ) : start( arg_begin + threadIdx.x ) - , end(arg_count) + , end(arg_end) , increment( blockDim.x ) , thread(arg_thread) {} @@ -284,10 +760,10 @@ struct ThreadVectorRangeBoundariesStruct > #else ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_count ); + ( member_type const& arg_thread, const index_type& arg_count ); ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_begin, const index_type& arg_end); + ( member_type const& arg_thread, const index_type& arg_begin, const index_type& arg_end); #endif @@ -299,69 +775,69 @@ struct ThreadVectorRangeBoundariesStruct > namespace Kokkos { -template -KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > > -TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread, const iType & count ) -{ - return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( thread, count ); -} +//template +//KOKKOS_INLINE_FUNCTION +//Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > > +//TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread, const iType & count ) +//{ +// return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( thread, count ); +//} +// +//template +//KOKKOS_INLINE_FUNCTION +//Impl::TeamThreadRangeBoundariesStruct +// < typename std::common_type::type +// , Impl::TaskExec< Kokkos::Cuda > > +//TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread +// , const iType1 & begin, const iType2 & end ) +//{ +// typedef typename std::common_type< iType1, iType2 >::type iType; +// return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( +// thread, iType(begin), iType(end) ); +//} +// +//template +//KOKKOS_INLINE_FUNCTION +//Impl::ThreadVectorRangeBoundariesStruct > +//ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread +// , const iType & count ) +//{ +// return Impl::ThreadVectorRangeBoundariesStruct >(thread,count); +//} +// +//template +//KOKKOS_INLINE_FUNCTION +//Impl::ThreadVectorRangeBoundariesStruct > +//ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread +// , const iType & arg_begin +// , const iType & arg_end ) +//{ +// return Impl::ThreadVectorRangeBoundariesStruct >(thread,arg_begin,arg_end); +//} -template -KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct - < typename std::common_type::type - , Impl::TaskExec< Kokkos::Cuda > > -TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread - , const iType1 & begin, const iType2 & end ) -{ - typedef typename std::common_type< iType1, iType2 >::type iType; - return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( - thread, iType(begin), iType(end) ); -} +// KOKKOS_INLINE_FUNCTION +// Impl::ThreadSingleStruct > +// PerTeam(const Impl::TaskExec< Kokkos::Cuda >& thread) +// { +// return Impl::ThreadSingleStruct >(thread); +// } -template -KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread - , const iType & count ) -{ - return Impl::ThreadVectorRangeBoundariesStruct >(thread,count); -} - -template -KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread - , const iType & arg_begin - , const iType & arg_end ) -{ - return Impl::ThreadVectorRangeBoundariesStruct >(thread,arg_begin,arg_end); -} - -KOKKOS_INLINE_FUNCTION -Impl::ThreadSingleStruct > -PerTeam(const Impl::TaskExec< Kokkos::Cuda >& thread) -{ - return Impl::ThreadSingleStruct >(thread); -} - -KOKKOS_INLINE_FUNCTION -Impl::VectorSingleStruct > -PerThread(const Impl::TaskExec< Kokkos::Cuda >& thread) -{ - return Impl::VectorSingleStruct >(thread); -} +// KOKKOS_INLINE_FUNCTION +// Impl::VectorSingleStruct > +// PerThread(const Impl::TaskExec< Kokkos::Cuda >& thread) +// { +// return Impl::VectorSingleStruct >(thread); +// } /** \brief Inter-thread parallel_for. Executes lambda(iType i) for each i=0..N-1. * * The range i=0..N-1 is mapped to all threads of the the calling thread team. * This functionality requires C++11 support. */ -template +template KOKKOS_INLINE_FUNCTION void parallel_for - ( const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries + ( const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries , const Lambda& lambda ) { @@ -370,10 +846,10 @@ void parallel_for } } -template< typename iType, class Lambda > +template< typename iType, class Lambda, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_for - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda) { for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { lambda(i); @@ -459,14 +935,14 @@ void parallel_reduce // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Lambda, typename ValueType > +template< typename iType, class Lambda, typename ValueType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, + (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, ValueType& initialized_result) { - //TODO what is the point of creating this temporary? + //TODO @internal_documentation what is the point of creating this temporary? ValueType result = initialized_result; for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { lambda(i,result); @@ -487,15 +963,15 @@ void parallel_reduce } } -template< typename iType, class Lambda, typename ReducerType > +template< typename iType, class Lambda, typename ReducerType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, + (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { typedef typename ReducerType::value_type ValueType; - //TODO what is the point of creating this temporary? + //TODO @internal_documentation what is the point of creating this temporary? ValueType result = ValueType(); reducer.init(result); @@ -549,10 +1025,10 @@ void parallel_reduce // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Lambda, typename ValueType > +template< typename iType, class Lambda, typename ValueType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, ValueType& initialized_result) { @@ -576,10 +1052,10 @@ void parallel_reduce } } -template< typename iType, class Lambda, typename ReducerType > +template< typename iType, class Lambda, typename ReducerType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { @@ -611,10 +1087,10 @@ void parallel_reduce // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Closure > +template< typename iType, class Closure, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_scan - (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, + (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, const Closure & closure ) { // Extract value_type from closure @@ -676,10 +1152,10 @@ void parallel_scan // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Closure > +template< typename iType, class Closure, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_scan - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Closure & closure ) { // Extract value_type from closure @@ -735,25 +1211,25 @@ void parallel_scan namespace Kokkos { - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::VectorSingleStruct >& , const FunctorType& lambda) { + void single(const Impl::VectorSingleStruct >& , const FunctorType& lambda) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0) lambda(); #endif } - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::ThreadSingleStruct >& , const FunctorType& lambda) { + void single(const Impl::ThreadSingleStruct >& , const FunctorType& lambda) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0 && threadIdx.y == 0) lambda(); #endif } - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::VectorSingleStruct >& s , const FunctorType& lambda, ValueType& val) { + void single(const Impl::VectorSingleStruct >& s , const FunctorType& lambda, ValueType& val) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0) lambda(val); if ( 1 < s.team_member.team_size() ) { @@ -762,9 +1238,9 @@ namespace Kokkos { #endif } - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::ThreadSingleStruct >& single_struct, const FunctorType& lambda, ValueType& val) { + void single(const Impl::ThreadSingleStruct >& single_struct, const FunctorType& lambda, ValueType& val) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0 && threadIdx.y == 0) { lambda(val); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp index 18271a5146..587ad6001d 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp @@ -56,9 +56,9 @@ #include #include -#include +#include #include -#include +#include #include #if defined(KOKKOS_ENABLE_PROFILING) @@ -101,11 +101,13 @@ struct CudaJoinFunctor { * total available shared memory must be partitioned among teams. */ class CudaTeamMember { -private: +public: typedef Kokkos::Cuda execution_space ; typedef execution_space::scratch_memory_space scratch_memory_space ; +private: + mutable void * m_team_reduce ; scratch_memory_space m_team_shared ; int m_team_reduce_size ; @@ -221,12 +223,21 @@ public: KOKKOS_INLINE_FUNCTION typename std::enable_if< is_reducer< ReducerType >::value >::type team_reduce( ReducerType const & reducer ) const noexcept + { + team_reduce(reducer,reducer.reference()); + } + + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< is_reducer< ReducerType >::value >::type + team_reduce( ReducerType const & reducer, typename ReducerType::value_type& value ) const noexcept { #ifdef __CUDA_ARCH__ - cuda_intra_block_reduction(reducer,blockDim.y); + cuda_intra_block_reduction(reducer,value,blockDim.y); #endif /* #ifdef __CUDA_ARCH__ */ } + //-------------------------------------------------------------------------- /** \brief Intra-team exclusive prefix sum with team_rank() ordering * with intra-team non-deterministic ordering accumulation. @@ -281,20 +292,28 @@ public: template< typename ReducerType > KOKKOS_INLINE_FUNCTION static typename std::enable_if< is_reducer< ReducerType >::value >::type - vector_reduce( ReducerType const & reducer ) + vector_reduce( ReducerType const & reducer ) { + vector_reduce(reducer,reducer.reference()); + } + + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION static + typename std::enable_if< is_reducer< ReducerType >::value >::type + vector_reduce( ReducerType const & reducer, typename ReducerType::value_type& value ) { #ifdef __CUDA_ARCH__ if(blockDim.x == 1) return; // Intra vector lane shuffle reduction: - typename ReducerType::value_type tmp ( reducer.reference() ); + typename ReducerType::value_type tmp ( value ); + typename ReducerType::value_type tmp2 = tmp; unsigned mask = blockDim.x==32?0xffffffff:((1<>= 1 ) ; ) { - cuda_shfl_down( reducer.reference() , tmp , i , blockDim.x , mask ); - if ( (int)threadIdx.x < i ) { reducer.join( tmp , reducer.reference() ); } + cuda_shfl_down( tmp2 , tmp , i , blockDim.x , mask ); + if ( (int)threadIdx.x < i ) { reducer.join( tmp , tmp2 ); } } // Broadcast from root lane to all other lanes. @@ -302,7 +321,9 @@ public: // because floating point summation is not associative // and thus different threads could have different results. - cuda_shfl( reducer.reference() , tmp , 0 , blockDim.x , mask ); + cuda_shfl( tmp2 , tmp , 0 , blockDim.x , mask ); + value = tmp2; + reducer.reference() = tmp2; #endif } @@ -543,19 +564,37 @@ struct TeamThreadRangeBoundariesStruct { const iType end; KOKKOS_INLINE_FUNCTION - TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& count) + TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, iType count) : member(thread_) , start( 0 ) , end( count ) {} KOKKOS_INLINE_FUNCTION - TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& begin_, const iType& end_) + TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, iType begin_, iType end_) : member(thread_) , start( begin_ ) , end( end_ ) {} }; +template +struct TeamVectorRangeBoundariesStruct { + typedef iType index_type; + const CudaTeamMember& member; + const iType start; + const iType end; + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& count) + : member(thread_) + , start( 0 ) + , end( count ) {} + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& begin_, const iType& end_) + : member(thread_) + , start( begin_ ) + , end( end_ ) {} +}; template struct ThreadVectorRangeBoundariesStruct { @@ -564,19 +603,19 @@ struct ThreadVectorRangeBoundariesStruct { const index_type end; KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const CudaTeamMember, const index_type& count) + ThreadVectorRangeBoundariesStruct (const CudaTeamMember, index_type count) : start( static_cast(0) ), end( count ) {} KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const index_type& count) + ThreadVectorRangeBoundariesStruct (index_type count) : start( static_cast(0) ), end( count ) {} KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const CudaTeamMember, const index_type& arg_begin, const index_type& arg_end) + ThreadVectorRangeBoundariesStruct (const CudaTeamMember, index_type arg_begin, index_type arg_end) : start( arg_begin ), end( arg_end ) {} KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const index_type& arg_begin, const index_type& arg_end) + ThreadVectorRangeBoundariesStruct (index_type arg_begin, index_type arg_end) : start( arg_begin ), end( arg_end ) {} }; @@ -585,7 +624,7 @@ struct ThreadVectorRangeBoundariesStruct { template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember > -TeamThreadRange( const Impl::CudaTeamMember & thread, const iType & count ) { +TeamThreadRange( const Impl::CudaTeamMember & thread, iType count ) { return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, count ); } @@ -593,22 +632,38 @@ template< typename iType1, typename iType2 > KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< typename std::common_type< iType1, iType2 >::type, Impl::CudaTeamMember > -TeamThreadRange( const Impl::CudaTeamMember & thread, const iType1 & begin, const iType2 & end ) { +TeamThreadRange( const Impl::CudaTeamMember & thread, iType1 begin, iType2 end ) { typedef typename std::common_type< iType1, iType2 >::type iType; return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, iType(begin), iType(end) ); } +template +KOKKOS_INLINE_FUNCTION +Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember > +TeamVectorRange( const Impl::CudaTeamMember & thread, const iType & count ) { + return Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, count ); +} + +template< typename iType1, typename iType2 > +KOKKOS_INLINE_FUNCTION +Impl::TeamVectorRangeBoundariesStruct< typename std::common_type< iType1, iType2 >::type, + Impl::CudaTeamMember > +TeamVectorRange( const Impl::CudaTeamMember & thread, const iType1 & begin, const iType2 & end ) { + typedef typename std::common_type< iType1, iType2 >::type iType; + return Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, iType(begin), iType(end) ); +} + template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange(const Impl::CudaTeamMember& thread, const iType& count) { +ThreadVectorRange(const Impl::CudaTeamMember& thread, iType count) { return Impl::ThreadVectorRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange(const Impl::CudaTeamMember& thread, const iType& arg_begin, const iType& arg_end) { +ThreadVectorRange(const Impl::CudaTeamMember& thread, iType arg_begin, iType arg_end) { return Impl::ThreadVectorRangeBoundariesStruct(thread,arg_begin,arg_end); } @@ -667,16 +722,16 @@ parallel_reduce ) { #ifdef __CUDA_ARCH__ - - reducer.init( reducer.reference() ); + typename ReducerType::value_type value; + reducer.init( value ); for( iType i = loop_boundaries.start + threadIdx.y ; i < loop_boundaries.end ; i += blockDim.y ) { - closure(i,reducer.reference()); + closure(i,value); } - loop_boundaries.member.team_reduce( reducer ); + loop_boundaries.member.team_reduce( reducer, value ); #endif } @@ -701,19 +756,88 @@ parallel_reduce ) { #ifdef __CUDA_ARCH__ - - Kokkos::Sum reducer(result); + ValueType val; + Kokkos::Sum reducer(val); reducer.init( reducer.reference() ); for( iType i = loop_boundaries.start + threadIdx.y ; i < loop_boundaries.end ; i += blockDim.y ) { - closure(i,result); + closure(i,val); } - loop_boundaries.member.team_reduce( reducer ); + loop_boundaries.member.team_reduce( reducer , val); + result = reducer.reference(); +#endif +} +template +KOKKOS_INLINE_FUNCTION +void parallel_for + ( const Impl::TeamVectorRangeBoundariesStruct& + loop_boundaries + , const Closure & closure + ) +{ + #ifdef __CUDA_ARCH__ + for( iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x + ; i < loop_boundaries.end + ; i += blockDim.y*blockDim.x ) + closure(i); + #endif +} + +template< typename iType, class Closure, class ReducerType > +KOKKOS_INLINE_FUNCTION +typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type +parallel_reduce + ( const Impl::TeamVectorRangeBoundariesStruct & + loop_boundaries + , const Closure & closure + , const ReducerType & reducer + ) +{ +#ifdef __CUDA_ARCH__ + typename ReducerType::value_type value; + reducer.init( value ); + + for( iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x + ; i < loop_boundaries.end + ; i += blockDim.y * blockDim.x ) { + closure(i,value); + } + + loop_boundaries.member.vector_reduce( reducer, value ); + loop_boundaries.member.team_reduce( reducer, value ); +#endif +} + +template< typename iType, class Closure, typename ValueType > +KOKKOS_INLINE_FUNCTION +typename std::enable_if< ! Kokkos::is_reducer< ValueType >::value >::type +parallel_reduce + ( const Impl::TeamVectorRangeBoundariesStruct & + loop_boundaries + , const Closure & closure + , ValueType & result + ) +{ +#ifdef __CUDA_ARCH__ + ValueType val; + Kokkos::Sum reducer(val); + + reducer.init( reducer.reference() ); + + for( iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x + ; i < loop_boundaries.end + ; i += blockDim.y * blockDim.x ) { + closure(i,val); + } + + loop_boundaries.member.vector_reduce( reducer ); + loop_boundaries.member.team_reduce( reducer ); + result = reducer.reference(); #endif } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp index af2aff8b35..2fe9d8ccf7 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp @@ -241,7 +241,7 @@ class ViewDataHandle< Traits , sizeof(typename Traits::const_value_type) == 16 ) && // Random access trait - ( Traits::memory_traits::RandomAccess != 0 ) + ( Traits::memory_traits::is_random_access != 0 ) )>::type > { public: diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp index 94e293d7c7..9c0ac470c8 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp @@ -102,9 +102,8 @@ public: const dim3 grid( Kokkos::Impl::cuda_internal_multiprocessor_count() , 1 , 1 ); const dim3 block( 1 , Kokkos::Impl::CudaTraits::WarpSize , warps_per_block ); const int shared = 0 ; - const cudaStream_t stream = 0 ; - Kokkos::Impl::CudaParallelLaunch(*this, grid, block, shared, stream); + Kokkos::Impl::CudaParallelLaunch(*this, grid, block, shared, Cuda().impl_internal_space_instance() , false ); } inline diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp new file mode 100644 index 0000000000..da9783467c --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp @@ -0,0 +1,152 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#include + +#ifdef KOKKOS_ENABLE_HPX +#include + +#include + +namespace Kokkos { +namespace Experimental { + +bool HPX::m_hpx_initialized = false; +Kokkos::Impl::thread_buffer HPX::m_buffer; +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) +hpx::future HPX::m_future = hpx::make_ready_future(); +#endif + +int HPX::concurrency() { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + return hpx::threads::hardware_concurrency(); + } else { + if (hpx::threads::get_self_ptr() == nullptr) { + return hpx::resource::get_thread_pool(0).get_os_thread_count(); + } else { + return hpx::this_thread::get_pool()->get_os_thread_count(); + } + } +} + +void HPX::impl_initialize(int thread_count) { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + std::vector config = { + "hpx.os_threads=" + std::to_string(thread_count), +#ifdef KOKKOS_DEBUG + "--hpx:attach-debugger=exception", +#endif + }; + int argc_hpx = 1; + char name[] = "kokkos_hpx"; + char *argv_hpx[] = {name, nullptr}; + hpx::start(nullptr, argc_hpx, argv_hpx, config); + + // NOTE: Wait for runtime to start. hpx::start returns as soon as + // possible, meaning some operations are not allowed immediately + // after hpx::start. Notably, hpx::stop needs state_running. This + // needs to be fixed in HPX itself. + + // Get runtime pointer again after it has been started. + rt = hpx::get_runtime_ptr(); + hpx::util::yield_while( + [rt]() { return rt->get_state() < hpx::state_running; }); + + m_hpx_initialized = true; + } +} + +void HPX::impl_initialize() { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + std::vector config = { +#ifdef KOKKOS_DEBUG + "--hpx:attach-debugger=exception", +#endif + }; + int argc_hpx = 1; + char name[] = "kokkos_hpx"; + char *argv_hpx[] = {name, nullptr}; + hpx::start(nullptr, argc_hpx, argv_hpx, config); + + // NOTE: Wait for runtime to start. hpx::start returns as soon as + // possible, meaning some operations are not allowed immediately + // after hpx::start. Notably, hpx::stop needs state_running. This + // needs to be fixed in HPX itself. + + // Get runtime pointer again after it has been started. + rt = hpx::get_runtime_ptr(); + hpx::util::yield_while( + [rt]() { return rt->get_state() < hpx::state_running; }); + + m_hpx_initialized = true; + } +} + +bool HPX::impl_is_initialized() noexcept { + hpx::runtime *rt = hpx::get_runtime_ptr(); + return rt != nullptr; +} + +void HPX::impl_finalize() { + if (m_hpx_initialized) { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt != nullptr) { + hpx::apply([]() { hpx::finalize(); }); + hpx::stop(); + } else { + Kokkos::abort("Kokkos::Experimental::HPX::impl_finalize: Kokkos started " + "HPX but something else already stopped HPX\n"); + } + } +} + +} // namespace Experimental +} // namespace Kokkos + +#else +void KOKKOS_CORE_SRC_IMPL_HPX_PREVENT_LINK_ERROR() {} +#endif //#ifdef KOKKOS_ENABLE_HPX diff --git a/lib/kokkos/core/src/impl/Kokkos_StaticAssert.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.cpp similarity index 76% rename from lib/kokkos/core/src/impl/Kokkos_StaticAssert.hpp rename to lib/kokkos/core/src/HPX/Kokkos_HPX_Task.cpp index d001e0a88c..df7c403685 100644 --- a/lib/kokkos/core/src/impl/Kokkos_StaticAssert.hpp +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.cpp @@ -41,38 +41,25 @@ //@HEADER */ -#ifndef KOKKOS_STATICASSERT_HPP -#define KOKKOS_STATICASSERT_HPP +#include +#if defined(KOKKOS_ENABLE_HPX) && defined(KOKKOS_ENABLE_TASKDAG) + +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- namespace Kokkos { namespace Impl { -template < bool , class T = void > -struct StaticAssert ; - -template< class T > -struct StaticAssert< true , T > { - typedef T type ; - static const bool value = true ; -}; - -template < class A , class B > -struct StaticAssertSame ; - -template < class A > -struct StaticAssertSame { typedef A type ; }; - -template < class A , class B > -struct StaticAssertAssignable ; - -template < class A > -struct StaticAssertAssignable { typedef A type ; }; - -template < class A > -struct StaticAssertAssignable< const A , A > { typedef const A type ; }; +template class TaskQueue; } // namespace Impl } // namespace Kokkos -#endif /* KOKKOS_STATICASSERT_HPP */ - +#else +void KOKKOS_CORE_SRC_IMPL_HPX_TASK_PREVENT_LINK_ERROR() {} +#endif // #if defined( KOKKOS_ENABLE_HPX ) && defined( KOKKOS_ENABLE_TASKDAG ) diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp new file mode 100644 index 0000000000..c3a14efee6 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp @@ -0,0 +1,298 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_TASK_HPP +#define KOKKOS_HPX_TASK_HPP + +#include +#if defined(KOKKOS_ENABLE_HPX) && defined(KOKKOS_ENABLE_TASKDAG) + +#include + +#include + +#include +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +class TaskQueueSpecialization< + SimpleTaskScheduler> { +public: + using execution_space = Kokkos::Experimental::HPX; + using scheduler_type = + SimpleTaskScheduler; + using member_type = + TaskTeamMemberAdapter; + using memory_space = Kokkos::HostSpace; + + static void execute(scheduler_type const &scheduler) { + // NOTE: We create an instance so that we can use dispatch_execute_task. + // This is not necessarily the most efficient, but can be improved later. + TaskQueueSpecialization task_queue; + task_queue.scheduler = &scheduler; + Kokkos::Impl::dispatch_execute_task(&task_queue); + Kokkos::Experimental::HPX().fence(); + } + + // Must provide task queue execution function + void execute_task() const { + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + using task_base_type = typename scheduler_type::task_base_type; + + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 512); + + auto &queue = scheduler->queue(); + + counting_semaphore sem(0); + + for (int thread = 0; thread < num_worker_threads; ++thread) { + apply([this, &sem, &queue, &buffer, num_worker_threads, thread]() { + // NOTE: This implementation has been simplified based on the + // assumption that team_size = 1. The HPX backend currently only + // supports a team size of 1. + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()); + HPXTeamMember member(TeamPolicyInternal( + Kokkos::Experimental::HPX(), num_worker_threads, 1), + 0, t, buffer.get(t), 512); + + member_type single_exec(*scheduler, member); + member_type &team_exec = single_exec; + + auto &team_scheduler = team_exec.scheduler(); + auto current_task = OptionalRef(nullptr); + + while (!queue.is_done()) { + current_task = + queue.pop_ready_task(team_scheduler.team_scheduler_info()); + + if (current_task) { + KOKKOS_ASSERT(current_task->is_single_runnable() || + current_task->is_team_runnable()); + current_task->as_runnable_task().run(single_exec); + queue.complete((*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info()); + } + } + + sem.signal(1); + }); + } + + sem.wait(num_worker_threads); + } + + static uint32_t get_max_team_count(execution_space const &espace) { + return static_cast(espace.concurrency()); + } + + template + static void get_function_pointer(typename TaskType::function_type &ptr, + typename TaskType::destroy_type &dtor) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } + +private: + const scheduler_type *scheduler; +}; + +template +class TaskQueueSpecializationConstrained< + Scheduler, typename std::enable_if< + std::is_same::value>::type> { +public: + using execution_space = Kokkos::Experimental::HPX; + using scheduler_type = Scheduler; + using member_type = + TaskTeamMemberAdapter; + using memory_space = Kokkos::HostSpace; + + static void + iff_single_thread_recursive_execute(scheduler_type const &scheduler) { + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + + if (1 == Kokkos::Experimental::HPX::concurrency()) { + task_base_type *const end = (task_base_type *)task_base_type::EndTag; + task_base_type *task = end; + + HPXTeamMember member(TeamPolicyInternal( + Kokkos::Experimental::HPX(), 1, 1), + 0, 0, nullptr, 0); + member_type single_exec(scheduler, member); + + do { + task = end; + + // Loop by priority and then type + for (int i = 0; i < queue_type::NumQueue && end == task; ++i) { + for (int j = 0; j < 2 && end == task; ++j) { + task = + queue_type::pop_ready_task(&scheduler.m_queue->m_ready[i][j]); + } + } + + if (end == task) + break; + + (*task->m_apply)(task, &single_exec); + + scheduler.m_queue->complete(task); + + } while (true); + } + } + + static void execute(scheduler_type const &scheduler) { + // NOTE: We create an instance so that we can use dispatch_execute_task. + // This is not necessarily the most efficient, but can be improved later. + TaskQueueSpecializationConstrained task_queue; + task_queue.scheduler = &scheduler; + Kokkos::Impl::dispatch_execute_task(&task_queue); + Kokkos::Experimental::HPX().fence(); + } + + // Must provide task queue execution function + void execute_task() const { + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + static task_base_type *const end = (task_base_type *)task_base_type::EndTag; + constexpr task_base_type *no_more_tasks_sentinel = nullptr; + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 512); + + auto &queue = scheduler->queue(); + queue.initialize_team_queues(num_worker_threads); + + counting_semaphore sem(0); + + for (int thread = 0; thread < num_worker_threads; ++thread) { + apply([this, &sem, &buffer, num_worker_threads, thread]() { + // NOTE: This implementation has been simplified based on the assumption + // that team_size = 1. The HPX backend currently only supports a team + // size of 1. + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()); + HPXTeamMember member( + TeamPolicyInternal( + Kokkos::Experimental::HPX(), num_worker_threads, 1), + 0, t, buffer.get(t), 512); + + member_type single_exec(*scheduler, member); + member_type &team_exec = single_exec; + + auto &team_queue = team_exec.scheduler().queue(); + task_base_type *task = no_more_tasks_sentinel; + + do { + if (task != no_more_tasks_sentinel && task != end) { + team_queue.complete(task); + } + + if (*((volatile int *)&team_queue.m_ready_count) > 0) { + task = end; + for (int i = 0; i < queue_type::NumQueue && end == task; ++i) { + for (int j = 0; j < 2 && end == task; ++j) { + task = queue_type::pop_ready_task(&team_queue.m_ready[i][j]); + } + } + } else { + task = team_queue.attempt_to_steal_task(); + } + + if (task != no_more_tasks_sentinel && task != end) { + (*task->m_apply)(task, &single_exec); + } + } while (task != no_more_tasks_sentinel); + + sem.signal(1); + }); + } + + sem.wait(num_worker_threads); + } + + template + static void get_function_pointer(typename TaskType::function_type &ptr, + typename TaskType::destroy_type &dtor) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } + +private: + const scheduler_type *scheduler; +}; + +extern template class TaskQueue< + Kokkos::Experimental::HPX, + typename Kokkos::Experimental::HPX::memory_space>; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_HPX_TASK_HPP */ diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp new file mode 100644 index 0000000000..bbc1b33bf9 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_VIEWETIAVAIL_HPP +#define KOKKOS_HPX_VIEWETIAVAIL_HPP + +namespace Kokkos { +namespace Impl { +#define KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE Kokkos::Experimental::HPX + +#include + +#undef KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE +} +} +#endif + diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp new file mode 100644 index 0000000000..aa1c2f1518 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_VIEWETIDECL_HPP +#define KOKKOS_HPX_VIEWETIDECL_HPP + +namespace Kokkos { +namespace Impl { +#define KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE Kokkos::Experimental::HPX + +#include + +#undef KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE +} +} +#endif + diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp new file mode 100644 index 0000000000..4dd28dd994 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp @@ -0,0 +1,116 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_WORKGRAPHPOLICY_HPP +#define KOKKOS_HPX_WORKGRAPHPOLICY_HPP + +#include +#include + +namespace Kokkos { +namespace Impl { + +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::WorkGraphPolicy; + using WorkTag = typename Policy::work_tag; + + Policy m_policy; + FunctorType m_functor; + + template + typename std::enable_if::value>::type + execute_functor(const std::int32_t w) const noexcept { + m_functor(w); + } + + template + typename std::enable_if::value>::type + execute_functor(const std::int32_t w) const noexcept { + const TagType t{}; + m_functor(t, w); + } + +public: + void execute() const { + dispatch_execute_task(this); + Kokkos::Experimental::HPX().fence(); + } + + void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + + for (int thread = 0; thread < num_worker_threads; ++thread) { + apply([this, &sem]() { + std::int32_t w = m_policy.pop_work(); + while (w != Policy::COMPLETED_TOKEN) { + if (w != Policy::END_TOKEN) { + execute_functor(w); + m_policy.completed_work(w); + } + + w = m_policy.pop_work(); + } + + sem.signal(1); + }); + } + + sem.wait(num_worker_threads); + } + + inline ParallelFor(const FunctorType &arg_functor, const Policy &arg_policy) + : m_policy(arg_policy), m_functor(arg_functor) {} +}; + +} // namespace Impl +} // namespace Kokkos + +#endif /* #define KOKKOS_HPX_WORKGRAPHPOLICY_HPP */ diff --git a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp index fb0d6cde84..1972aa485b 100644 --- a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp +++ b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp @@ -125,6 +125,8 @@ struct MDRangePolicy using traits = Kokkos::Impl::PolicyTraits; using range_policy = RangePolicy; + typename traits::execution_space m_space; + using impl_range_policy = RangePolicy< typename traits::execution_space , typename traits::schedule_type , typename traits::index_type @@ -132,6 +134,9 @@ struct MDRangePolicy typedef MDRangePolicy execution_policy; // needed for is_execution_space interrogation + template + friend struct MDRangePolicy; + static_assert( !std::is_same::value , "Kokkos Error: MD iteration pattern not defined" ); @@ -192,13 +197,54 @@ struct MDRangePolicy static constexpr int Right = static_cast( Iterate::Right ); static constexpr int Left = static_cast( Iterate::Left ); + KOKKOS_INLINE_FUNCTION const typename traits::execution_space & space() const { return m_space ; } + template < typename LT , typename UT , typename TT = array_index_type > + MDRangePolicy(std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) + : m_space() { + init(lower, upper, tile); + } + + template < typename LT , typename UT , typename TT = array_index_type > + MDRangePolicy(const typename traits::execution_space & work_space, + std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) + : m_space( work_space ) { + init(lower, upper, tile); + } + MDRangePolicy( point_type const& lower, point_type const& upper, tile_type const& tile = tile_type{} ) - : m_lower(lower) + : m_space() + , m_lower(lower) , m_upper(upper) , m_tile(tile) , m_num_tiles(1) - , m_prod_tile_dims(1) - { + , m_prod_tile_dims(1) { + init(); + } + + MDRangePolicy( const typename traits::execution_space & work_space, + point_type const& lower, point_type const& upper, tile_type const& tile = tile_type{} ) + : m_space( work_space ) + , m_lower(lower) + , m_upper(upper) + , m_tile(tile) + , m_num_tiles(1) + , m_prod_tile_dims(1) { + init(); + } + + template + MDRangePolicy( const MDRangePolicy p ): + m_space(p.m_space), + m_lower(p.m_lower), + m_upper(p.m_upper), + m_tile(p.m_tile), + m_tile_end(p.m_tile_end), + m_num_tiles(p.m_num_tiles), + m_prod_tile_dims(p.m_prod_tile_dims) {} + +private: + + void init() { // Host if ( true #if defined(KOKKOS_ENABLE_CUDA) @@ -211,7 +257,7 @@ struct MDRangePolicy { index_type span; for (int i=0; i 0)) ) @@ -311,11 +357,9 @@ struct MDRangePolicy #endif } - template < typename LT , typename UT , typename TT = array_index_type > - MDRangePolicy( std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) + void init( std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) { - if(static_cast(m_lower.size()) != rank || static_cast(m_upper.size()) != rank) Kokkos::abort("MDRangePolicy: Constructor initializer lists have wrong size"); @@ -589,5 +633,26 @@ void md_parallel_reduce( const std::string& str } } // namespace Kokkos::Experimental #endif +namespace Kokkos { +namespace Experimental { +namespace Impl { + +template +struct PolicyPropertyAdaptor,MDRangePolicy> { + typedef MDRangePolicy policy_in_t; + typedef MDRangePolicy> policy_out_t; +}; + +} +} +} + + #endif //KOKKOS_CORE_EXP_MD_RANGE_POLICY_HPP diff --git a/lib/kokkos/core/src/Kokkos_Atomic.hpp b/lib/kokkos/core/src/Kokkos_Atomic.hpp index cf0f25969d..c2268bd35f 100644 --- a/lib/kokkos/core/src/Kokkos_Atomic.hpp +++ b/lib/kokkos/core/src/Kokkos_Atomic.hpp @@ -90,6 +90,7 @@ #if ! defined( KOKKOS_ENABLE_GNU_ATOMICS ) && \ ! defined( KOKKOS_ENABLE_INTEL_ATOMICS ) && \ ! defined( KOKKOS_ENABLE_OPENMP_ATOMICS ) && \ + ! defined( KOKKOS_ENABLE_STD_ATOMICS ) && \ ! defined( KOKKOS_ENABLE_SERIAL_ATOMICS ) // Compiling for non-Cuda atomic implementation has not been pre-selected. @@ -168,6 +169,12 @@ const char * atomic_query_version() } // namespace Kokkos +//---------------------------------------------------------------------------- +// Atomic Memory Orders +// +// Implements Strongly-typed analogs of C++ standard memory orders +#include "impl/Kokkos_Atomic_Memory_Order.hpp" + #if defined( KOKKOS_ENABLE_ROCM ) namespace Kokkos { namespace Impl { @@ -287,6 +294,14 @@ void unlock_address_rocm_space(void* ptr); #ifndef _WIN32 #include "impl/Kokkos_Atomic_Generic.hpp" #endif + +//---------------------------------------------------------------------------- +// Provide atomic loads and stores with memory order semantics + +#include "impl/Kokkos_Atomic_Load.hpp" +#include "impl/Kokkos_Atomic_Store.hpp" + + //---------------------------------------------------------------------------- // This atomic-style macro should be an inlined function, not a macro diff --git a/lib/kokkos/core/src/Kokkos_Complex.hpp b/lib/kokkos/core/src/Kokkos_Complex.hpp index 08cbba3b31..a3ada5d55e 100644 --- a/lib/kokkos/core/src/Kokkos_Complex.hpp +++ b/lib/kokkos/core/src/Kokkos_Complex.hpp @@ -631,8 +631,10 @@ RealType real (const complex& x) { template KOKKOS_INLINE_FUNCTION RealType abs (const complex& x) { - // FIXME (mfh 31 Oct 2014) Scale to avoid unwarranted overflow. - return std::sqrt (real (x) * real (x) + imag (x) * imag (x)); +#ifndef __CUDA_ARCH__ + using std::hypot; +#endif + return hypot(x.real(),x.imag()); } //! Power of a complex number diff --git a/lib/kokkos/core/src/Kokkos_Concepts.hpp b/lib/kokkos/core/src/Kokkos_Concepts.hpp index 117469b0a2..98ae141de4 100644 --- a/lib/kokkos/core/src/Kokkos_Concepts.hpp +++ b/lib/kokkos/core/src/Kokkos_Concepts.hpp @@ -79,6 +79,45 @@ struct IndexType using type = T; }; +namespace Experimental { + struct WorkItemProperty { + template + struct ImplWorkItemProperty { + static const unsigned value = Property; + using work_item_property = ImplWorkItemProperty; + }; + + constexpr static const ImplWorkItemProperty<0> None = ImplWorkItemProperty<0>(); + constexpr static const ImplWorkItemProperty<1> HintLightWeight = ImplWorkItemProperty<1>(); + constexpr static const ImplWorkItemProperty<2> HintHeavyWeight = ImplWorkItemProperty<2>(); + constexpr static const ImplWorkItemProperty<4> HintRegular = ImplWorkItemProperty<4>(); + constexpr static const ImplWorkItemProperty<8> HintIrregular = ImplWorkItemProperty<8>(); + typedef ImplWorkItemProperty<0> None_t; + typedef ImplWorkItemProperty<1> HintLightWeight_t; + typedef ImplWorkItemProperty<2> HintHeavyWeight_t; + typedef ImplWorkItemProperty<4> HintRegular_t; + typedef ImplWorkItemProperty<8> HintIrregular_t; + }; + +template +inline constexpr WorkItemProperty::ImplWorkItemProperty operator | + (WorkItemProperty::ImplWorkItemProperty, WorkItemProperty::ImplWorkItemProperty) { + return WorkItemProperty::ImplWorkItemProperty(); +} + +template +inline constexpr WorkItemProperty::ImplWorkItemProperty operator & + (WorkItemProperty::ImplWorkItemProperty, WorkItemProperty::ImplWorkItemProperty) { + return WorkItemProperty::ImplWorkItemProperty(); +} + +template +inline constexpr bool operator == (WorkItemProperty::ImplWorkItemProperty, WorkItemProperty::ImplWorkItemProperty) { + return pv1 == pv2; +} + +} + /**\brief Specify Launch Bounds for CUDA execution. * * If no launch bounds specified then do not set launch bounds. @@ -105,9 +144,13 @@ namespace Kokkos { template< typename T > struct is_ ## CONCEPT { \ private: \ template< typename , typename = std::true_type > struct have : std::false_type {}; \ - template< typename U > struct have::type, \ - typename std::remove_cv::type \ + template< typename U > struct have::type, \ + typename std::remove_cv::type \ + >::type> : std::true_type {}; \ + template< typename U > struct have::type, \ + typename std::remove_cv::type \ >::type> : std::true_type {}; \ public: \ enum { value = is_ ## CONCEPT::template have::value }; \ @@ -121,6 +164,9 @@ KOKKOS_IMPL_IS_CONCEPT( execution_space ) KOKKOS_IMPL_IS_CONCEPT( execution_policy ) KOKKOS_IMPL_IS_CONCEPT( array_layout ) KOKKOS_IMPL_IS_CONCEPT( reducer ) +namespace Experimental { +KOKKOS_IMPL_IS_CONCEPT( work_item_property ) +} namespace Impl { @@ -138,6 +184,8 @@ KOKKOS_IMPL_IS_CONCEPT( iteration_pattern ) KOKKOS_IMPL_IS_CONCEPT( schedule_type ) KOKKOS_IMPL_IS_CONCEPT( index_type ) KOKKOS_IMPL_IS_CONCEPT( launch_bounds ) +KOKKOS_IMPL_IS_CONCEPT( thread_team_member ) +KOKKOS_IMPL_IS_CONCEPT( host_thread_team_member ) } diff --git a/lib/kokkos/core/src/Kokkos_CopyViews.hpp b/lib/kokkos/core/src/Kokkos_CopyViews.hpp index 31605c9d39..f919fdb755 100644 --- a/lib/kokkos/core/src/Kokkos_CopyViews.hpp +++ b/lib/kokkos/core/src/Kokkos_CopyViews.hpp @@ -186,9 +186,9 @@ struct ViewFill typedef Kokkos::RangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-1D",policy_type(0,a.extent(0)),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -206,10 +206,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-2D", policy_type({0,0},{a.extent(0),a.extent(1)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -227,10 +227,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-3D", policy_type({0,0,0},{a.extent(0),a.extent(1),a.extent(2)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -248,10 +248,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-4D", policy_type({0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -269,10 +269,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-5D", policy_type({0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3),a.extent(4)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -290,10 +290,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-6D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3),a.extent(4),a.extent(5)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -311,11 +311,11 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-7D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3), a.extent(5),a.extent(6)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -335,11 +335,11 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-8D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(3), a.extent(5),a.extent(6),a.extent(7)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -437,10 +437,10 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-1D", policy_type(0,a.extent(0)),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -459,10 +459,10 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-2D", policy_type({0,0},{a.extent(0),a.extent(1)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -482,10 +482,10 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-3D", policy_type({0,0,0},{a.extent(0),a.extent(1),a.extent(2)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -505,11 +505,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-4D", policy_type({0,0,0,0},{a.extent(0),a.extent(1),a.extent(2), a.extent(3)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -530,11 +530,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-5D", policy_type({0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2), a.extent(3),a.extent(4)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -555,11 +555,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-6D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2), a.extent(3),a.extent(4),a.extent(5)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -581,11 +581,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-7D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(3), a.extent(4),a.extent(5),a.extent(6)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -607,11 +607,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-8D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(3), a.extent(5),a.extent(6),a.extent(7)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -1538,6 +1538,779 @@ void deep_copy } } +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +namespace Experimental { +/** \brief A local deep copy between views of the default specialization, compatible type, + * same non-zero rank. + */ +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const TeamType& team, const View & dst, const View & src) { + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, src.span()), [&] (const int& i) { + dst.data()[i] = src.data()[i]; + }); +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const View & dst, const View & src) { + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 && + unsigned(ViewTraits::rank) == 1 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + dst(i) = src(i); + }); + team.team_barrier(); +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 && + unsigned(ViewTraits::rank) == 2 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int i1 = i/dst.extent(0); + dst(i0,i1) = src(i0,i1); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 && + unsigned(ViewTraits::rank) == 3 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + int i2 = itmp/dst.extent(1); + dst(i0,i1,i2) = src(i0,i1,i2); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 && + unsigned(ViewTraits::rank) == 4 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + int i3 = itmp/dst.extent(2); + dst(i0,i1,i2,i3) = src(i0,i1,i2,i3); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 && + unsigned(ViewTraits::rank) == 5 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + int i4 = itmp/dst.extent(3); + dst(i0,i1,i2,i3,i4) = src(i0,i1,i2,i3,i4); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 && + unsigned(ViewTraits::rank) == 6 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + int i5 = itmp/dst.extent(4); + dst(i0,i1,i2,i3,i4,i5) = src(i0,i1,i2,i3,i4,i5); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 && + unsigned(ViewTraits::rank) == 7 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5)*dst.extent(6); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + itmp = itmp/dst.extent(4); + int i5 = itmp%dst.extent(5); + int i6 = itmp/dst.extent(5); + dst(i0,i1,i2,i3,i4,i5,i6) = src(i0,i1,i2,i3,i4,i5,i6); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 && + unsigned(ViewTraits::rank) == 1 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 && + unsigned(ViewTraits::rank) == 2 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 && + unsigned(ViewTraits::rank) == 3 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 && + unsigned(ViewTraits::rank) == 4 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 && + unsigned(ViewTraits::rank) == 5 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 && + unsigned(ViewTraits::rank) == 6 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 && + unsigned(ViewTraits::rank) == 7 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const TeamType& team, const View & dst, typename ViewTraits::const_value_type & value) { + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, dst.span()), [&] (const int& i) { + dst.data()[i] = value; + }); +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const View & dst, typename ViewTraits::const_value_type & value) { + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + dst(i) = value; + }); + team.team_barrier(); +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int i1 = i/dst.extent(0); + dst(i0,i1) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + int i2 = itmp/dst.extent(1); + dst(i0,i1,i2) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + int i3 = itmp/dst.extent(2); + dst(i0,i1,i2,i3) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + int i4 = itmp/dst.extent(3); + dst(i0,i1,i2,i3,i4) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + int i5 = itmp/dst.extent(4); + dst(i0,i1,i2,i3,i4,i5) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5)*dst.extent(6); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + itmp = itmp/dst.extent(4); + int i5 = itmp%dst.extent(5); + int i6 = itmp/dst.extent(5); + dst(i0,i1,i2,i3,i4,i5,i6) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0::value_type >::value , "deep_copy requires non-const type" ); - ExecSpace::fence(); + ExecSpace().fence(); typedef typename View::uniform_runtime_nomemspace_type ViewTypeUniform; Kokkos::Impl::ViewFill< ViewTypeUniform >( dst , value ); - ExecSpace::fence(); + ExecSpace().fence(); } /** \brief Deep copy into a value in Host memory from a view. */ @@ -2184,6 +2957,25 @@ create_mirror_view_and_copy(const Space& , const Kokkos::View & src deep_copy(mirror, src); return mirror; } + +// Create a mirror view in a new space without initializing (specialization for same space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view(const Space& , const Kokkos::View & src + , Kokkos::Impl::WithoutInitializing_t + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + return src; +} + +// Create a mirror view in a new space without initializing (specialization for different space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view(const Space& , const Kokkos::View & src + , Kokkos::Impl::WithoutInitializing_t + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + using Mirror = typename Impl::MirrorViewType::view_type; + return Mirror(Kokkos::ViewAllocateWithoutInitializing(src.label()), src.layout()); +} } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/Kokkos_Core.hpp b/lib/kokkos/core/src/Kokkos_Core.hpp index 4d0625ee1b..9fbba0abfa 100644 --- a/lib/kokkos/core/src/Kokkos_Core.hpp +++ b/lib/kokkos/core/src/Kokkos_Core.hpp @@ -66,6 +66,10 @@ #include #endif +#if defined( KOKKOS_ENABLE_HPX ) +#include +#endif + #if defined( KOKKOS_ENABLE_THREADS ) #include #endif @@ -87,6 +91,7 @@ #include #include #include +#include #include diff --git a/lib/kokkos/core/src/Kokkos_Core_fwd.hpp b/lib/kokkos/core/src/Kokkos_Core_fwd.hpp index 150865d0f5..55c6a5494a 100644 --- a/lib/kokkos/core/src/Kokkos_Core_fwd.hpp +++ b/lib/kokkos/core/src/Kokkos_Core_fwd.hpp @@ -100,6 +100,12 @@ class Serial; ///< Execution space main process on CPU. class Qthreads; ///< Execution space with Qthreads back-end. #endif +#if defined( KOKKOS_ENABLE_HPX ) +namespace Experimental { +class HPX; ///< Execution space with HPX back-end. +} +#endif + #if defined( KOKKOS_ENABLE_THREADS ) class Threads; ///< Execution space with pthreads back-end. #endif @@ -156,6 +162,8 @@ namespace Kokkos { typedef Threads DefaultExecutionSpace; //#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) // typedef Qthreads DefaultExecutionSpace; +#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) + typedef Kokkos::Experimental::HPX DefaultExecutionSpace; #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL ) typedef Serial DefaultExecutionSpace; #else @@ -176,6 +184,8 @@ namespace Kokkos { typedef Threads DefaultHostExecutionSpace; //#elif defined( KOKKOS_ENABLE_QTHREADS ) // typedef Qthreads DefaultHostExecutionSpace; +#elif defined( KOKKOS_ENABLE_HPX ) + typedef Kokkos::Experimental::HPX DefaultHostExecutionSpace; #elif defined( KOKKOS_ENABLE_SERIAL ) typedef Serial DefaultHostExecutionSpace; #else diff --git a/lib/kokkos/core/src/Kokkos_Crs.hpp b/lib/kokkos/core/src/Kokkos_Crs.hpp index ccc3944d86..8412ced921 100644 --- a/lib/kokkos/core/src/Kokkos_Crs.hpp +++ b/lib/kokkos/core/src/Kokkos_Crs.hpp @@ -187,7 +187,7 @@ class GetCrsTransposeCounts { using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this, policy_type(0, index_type(in.entries.size()))); closure.execute(); - execution_space::fence(); + execution_space().fence(); } }; @@ -266,7 +266,7 @@ class FillCrsTransposeEntries { using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this, policy_type(0, index_type(in.numRows()))); closure.execute(); - execution_space::fence(); + execution_space().fence(); } }; diff --git a/lib/kokkos/core/src/Kokkos_Cuda.hpp b/lib/kokkos/core/src/Kokkos_Cuda.hpp index 726a574961..4eb8ab4d4b 100644 --- a/lib/kokkos/core/src/Kokkos_Cuda.hpp +++ b/lib/kokkos/core/src/Kokkos_Cuda.hpp @@ -52,6 +52,7 @@ #include #include +#include #include #include @@ -67,6 +68,7 @@ namespace Kokkos { namespace Impl { class CudaExec ; +class CudaInternal ; } // namespace Impl } // namespace Kokkos @@ -74,6 +76,23 @@ class CudaExec ; namespace Kokkos { +namespace Impl { + namespace Experimental { + enum class CudaLaunchMechanism:unsigned{Default=0,ConstantMemory=1,GlobalMemory=2,LocalMemory=4}; + + constexpr inline CudaLaunchMechanism operator | (CudaLaunchMechanism p1, CudaLaunchMechanism p2) { + return static_cast(static_cast(p1) | static_cast(p2)); + } + constexpr inline CudaLaunchMechanism operator & (CudaLaunchMechanism p1, CudaLaunchMechanism p2) { + return static_cast(static_cast(p1) & static_cast(p2)); + } + + template + struct CudaDispatchProperties { + CudaLaunchMechanism launch_mechanism = l; + }; + } +} /// \class Cuda /// \brief Kokkos Execution Space that uses CUDA to run on GPUs. /// @@ -153,7 +172,13 @@ public: /// return asynchronously, before the functor completes. This /// method does not return until all dispatched functors on this /// device have completed. + static void impl_static_fence(); + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence(); + #else + void fence() const; + #endif /** \brief Return the maximum amount of concurrency. */ static int concurrency(); @@ -165,15 +190,18 @@ public: //-------------------------------------------------- //! \name Cuda space instances + KOKKOS_INLINE_FUNCTION ~Cuda() {} + Cuda(); - explicit Cuda( const int instance_id ); Cuda( Cuda && ) = default ; Cuda( const Cuda & ) = default ; Cuda & operator = ( Cuda && ) = default ; Cuda & operator = ( const Cuda & ) = default ; + Cuda(cudaStream_t stream); + //-------------------------------------------------------------------------- //! \name Device-specific functions //@{ @@ -219,18 +247,18 @@ public: */ static std::vector detect_device_arch(); - cudaStream_t cuda_stream() const { return m_stream ; } - int cuda_device() const { return m_device ; } + cudaStream_t cuda_stream() const; + int cuda_device() const; //@} //-------------------------------------------------------------------------- static const char* name(); + inline Impl::CudaInternal* impl_internal_space_instance() const { return m_space_instance; } private: - int m_device ; - cudaStream_t m_stream ; + Impl::CudaInternal* m_space_instance; }; } // namespace Kokkos @@ -302,7 +330,8 @@ struct VerifyExecutionCanAccessMemorySpace /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ -#include +#include +#include #include #include #include diff --git a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp index d4693b43c1..5c85850fda 100644 --- a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp @@ -46,12 +46,14 @@ #include #include -#include #include #include #include #include #include +#if defined(KOKKOS_ENABLE_PROFILING) +#include +#endif // KOKKOS_ENABLE_PROFILING //---------------------------------------------------------------------------- @@ -91,8 +93,9 @@ template class RangePolicy : public Impl::PolicyTraits { -private: +public: typedef Impl::PolicyTraits traits; +private: typename traits::execution_space m_space ; typename traits::index_type m_begin ; @@ -100,6 +103,9 @@ private: typename traits::index_type m_granularity ; typename traits::index_type m_granularity_mask ; + template + friend class RangePolicy; + public: //! Tag this class as an execution policy typedef RangePolicy execution_policy; @@ -118,6 +124,15 @@ public: RangePolicy(const RangePolicy&) = default; RangePolicy(RangePolicy&&) = default; + template + RangePolicy(const RangePolicy p) { + m_space = p.m_space; + m_begin = p.m_begin; + m_end = p.m_end; + m_granularity = p.m_granularity; + m_granularity_mask = p.m_granularity_mask; + } + inline RangePolicy() : m_space(), m_begin(0), m_end(0) {} /** \brief Total range */ @@ -523,19 +538,22 @@ class TeamPolicy: public typename Impl::PolicyTraits::execution_space, Properties ...> internal_policy; - typedef Impl::PolicyTraits traits; + template + friend class TeamPolicy; public: + typedef Impl::PolicyTraits traits; + typedef TeamPolicy execution_policy; TeamPolicy& operator = (const TeamPolicy&) = default; /** \brief Construct policy with the given instance of the execution space */ - TeamPolicy( const typename traits::execution_space & , int league_size_request , int team_size_request , int vector_length_request = 1 ) - : internal_policy(typename traits::execution_space(),league_size_request,team_size_request, vector_length_request) {first_arg = false;} + TeamPolicy( const typename traits::execution_space & space_ , int league_size_request , int team_size_request , int vector_length_request = 1 ) + : internal_policy(space_,league_size_request,team_size_request, vector_length_request) {first_arg = false;} - TeamPolicy( const typename traits::execution_space & , int league_size_request , const Kokkos::AUTO_t & , int vector_length_request = 1 ) - : internal_policy(typename traits::execution_space(),league_size_request,Kokkos::AUTO(), vector_length_request) {first_arg = false;} + TeamPolicy( const typename traits::execution_space & space_, int league_size_request , const Kokkos::AUTO_t & , int vector_length_request = 1 ) + : internal_policy(space_,league_size_request,Kokkos::AUTO(), vector_length_request) {first_arg = false;} /** \brief Construct policy with the default instance of the execution space */ TeamPolicy( int league_size_request , int team_size_request , int vector_length_request = 1 ) @@ -618,6 +636,11 @@ public: } #endif + template + TeamPolicy(const TeamPolicy p):internal_policy(p) { + first_arg = p.first_arg; + } + private: bool first_arg; TeamPolicy(const internal_policy& p):internal_policy(p) {first_arg = false;} @@ -754,6 +777,59 @@ public: {} }; +template +struct TeamVectorRangeBoundariesStruct { +private: + + KOKKOS_INLINE_FUNCTION static + iType ibegin( const iType & arg_begin + , const iType & arg_end + , const iType & arg_rank + , const iType & arg_size + ) + { + return arg_begin + ( ( arg_end - arg_begin + arg_size - 1 ) / arg_size ) * arg_rank ; + } + + KOKKOS_INLINE_FUNCTION static + iType iend( const iType & arg_begin + , const iType & arg_end + , const iType & arg_rank + , const iType & arg_size + ) + { + const iType end_ = arg_begin + ( ( arg_end - arg_begin + arg_size - 1 ) / arg_size ) * ( arg_rank + 1 ); + return end_ < arg_end ? end_ : arg_end ; + } + +public: + + typedef iType index_type; + const iType start; + const iType end; + enum {increment = 1}; + const TeamMemberType& thread; + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct( const TeamMemberType& arg_thread + , const iType& arg_end + ) + : start( ibegin( 0 , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , end( iend( 0 , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , thread( arg_thread ) + {} + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct( const TeamMemberType& arg_thread + , const iType& arg_begin + , const iType& arg_end + ) + : start( ibegin( arg_begin , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , end( iend( arg_begin , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , thread( arg_thread ) + {} +}; + template struct ThreadVectorRangeBoundariesStruct { typedef iType index_type; @@ -804,10 +880,10 @@ struct VectorSingleStruct { * This policy is used together with a parallel pattern as a nested layer within a kernel launched * with the TeamPolicy. This variant expects a single count. So the range is (0,count]. */ -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::TeamThreadRangeBoundariesStruct -TeamThreadRange( const TeamMemberType&, const iType& count ); +TeamThreadRange( const TeamMemberType&, const iType& count ) = delete; /** \brief Execution policy for parallel work over a threads within a team. * @@ -815,10 +891,32 @@ TeamThreadRange( const TeamMemberType&, const iType& count ); * This policy is used together with a parallel pattern as a nested layer within a kernel launched * with the TeamPolicy. This variant expects a begin and end. So the range is (begin,end]. */ -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::TeamThreadRangeBoundariesStruct::type, TeamMemberType> -TeamThreadRange( const TeamMemberType&, const iType1& begin, const iType2& end ); +TeamThreadRange( const TeamMemberType&, const iType1& begin, const iType2& end ) = delete; + +/** \brief Execution policy for parallel work over a threads within a team. + * + * The range is split over all threads in a team. The Mapping scheme depends on the architecture. + * This policy is used together with a parallel pattern as a nested layer within a kernel launched + * with the TeamPolicy. This variant expects a single count. So the range is (0,count]. + */ +template +KOKKOS_INLINE_FUNCTION_DELETED +Impl::TeamThreadRangeBoundariesStruct +TeamVectorRange( const TeamMemberType&, const iType& count ) = delete; + +/** \brief Execution policy for parallel work over a threads within a team. + * + * The range is split over all threads in a team. The Mapping scheme depends on the architecture. + * This policy is used together with a parallel pattern as a nested layer within a kernel launched + * with the TeamPolicy. This variant expects a begin and end. So the range is (begin,end]. + */ +template +KOKKOS_INLINE_FUNCTION_DELETED +Impl::TeamThreadRangeBoundariesStruct::type, TeamMemberType> +TeamVectorRange( const TeamMemberType&, const iType1& begin, const iType2& end ) = delete; /** \brief Execution policy for a vector parallel loop. * @@ -826,15 +924,15 @@ TeamThreadRange( const TeamMemberType&, const iType1& begin, const iType2& end ) * This policy is used together with a parallel pattern as a nested layer within a kernel launched * with the TeamPolicy. This variant expects a single count. So the range is (0,count]. */ -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange( const TeamMemberType&, const iType& count ); +ThreadVectorRange( const TeamMemberType&, const iType& count ) = delete; -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange( const TeamMemberType&, const iType& arg_begin, const iType& arg_end ); +ThreadVectorRange( const TeamMemberType&, const iType& arg_begin, const iType& arg_end ) = delete; #if defined(KOKKOS_ENABLE_PROFILING) namespace Impl { @@ -877,5 +975,44 @@ struct ParallelConstructName { } // namespace Kokkos +namespace Kokkos { +namespace Experimental { + +namespace Impl { + template + struct PolicyPropertyAdaptor; + + template + struct PolicyPropertyAdaptor,RangePolicy> { + typedef RangePolicy policy_in_t; + typedef RangePolicy> policy_out_t; + }; + + template + struct PolicyPropertyAdaptor,TeamPolicy> { + typedef TeamPolicy policy_in_t; + typedef TeamPolicy> policy_out_t; + }; +} + +template +constexpr typename Impl::PolicyPropertyAdaptor,PolicyType>::policy_out_t + require(const PolicyType p, WorkItemProperty::ImplWorkItemProperty

){ + return typename Impl::PolicyPropertyAdaptor,PolicyType>::policy_out_t(p); +} +} //Experimental +} //Kokkos #endif /* #define KOKKOS_EXECPOLICY_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_Extents.hpp b/lib/kokkos/core/src/Kokkos_Extents.hpp new file mode 100644 index 0000000000..c8b9110485 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_Extents.hpp @@ -0,0 +1,186 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_KOKKOS_EXTENTS_HPP +#define KOKKOS_KOKKOS_EXTENTS_HPP + +#include + +namespace Kokkos { +namespace Experimental { + +constexpr ptrdiff_t dynamic_extent = -1; + +template +struct Extents { + /* TODO @enhancement flesh this out more */ +}; + +template +struct PrependExtent; + +template +struct PrependExtent< + Extents, NewExtent +> { + using type = Extents; +}; + +template +struct AppendExtent; + +template +struct AppendExtent< + Extents, NewExtent +> { + using type = Extents; +}; + +} // end namespace Experimental + +namespace Impl { + +namespace _parse_view_extents_impl { + +template +struct _all_remaining_extents_dynamic : std::true_type { }; + +template +struct _all_remaining_extents_dynamic + : _all_remaining_extents_dynamic +{ }; + +template +struct _all_remaining_extents_dynamic + : std::false_type +{ }; + +template +struct _parse_impl { + using type = Result; +}; + +// We have to treat the case of int**[x] specially, since it *doesn't* go backwards +template +struct _parse_impl< + T*, Experimental::Extents, + typename std::enable_if<_all_remaining_extents_dynamic::value>::type +> + : _parse_impl< + T, Experimental::Extents + > +{ }; + +// int*(*[x])[y] should still work also (meaning int[][x][][y]) +template +struct _parse_impl< + T*, Experimental::Extents, + typename std::enable_if::value>::type +> +{ + using _next = Kokkos::Experimental::AppendExtent< + typename _parse_impl, void>::type, + Experimental::dynamic_extent + >; + using type = typename _next::type; +}; + +template +struct _parse_impl< + T[N], Experimental::Extents, void +> + : _parse_impl< + T, Experimental::Extents // TODO @pedantic this could be a narrowing cast + > +{ }; + +} // end namespace _parse_view_extents_impl + +template +struct ParseViewExtents { + using type = + typename _parse_view_extents_impl + ::_parse_impl>::type; +}; + +template +struct ApplyExtent +{ + using type = ValueType[Ext]; +}; + +template +struct ApplyExtent +{ + using type = ValueType*; +}; + +template +struct ApplyExtent +{ + using type = typename ApplyExtent::type[N]; +}; + +template +struct ApplyExtent +{ + using type = ValueType*[Ext]; +}; + +template +struct ApplyExtent +{ + using type = typename ApplyExtent::type*; +}; + +template +struct ApplyExtent +{ + using type = typename ApplyExtent::type[N]; +}; + +} // end namespace Impl + +} // end namespace Kokkos + +#endif //KOKKOS_KOKKOS_EXTENTS_HPP diff --git a/lib/kokkos/core/src/Kokkos_Future.hpp b/lib/kokkos/core/src/Kokkos_Future.hpp new file mode 100644 index 0000000000..665ce71cf5 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_Future.hpp @@ -0,0 +1,567 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_FUTURE_HPP +#define KOKKOS_FUTURE_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include +//---------------------------------------------------------------------------- + +#include +#include +#include +#include + +#include // is_space + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +// For now, hack this in as a partial specialization +// TODO @tasking @cleanup Make this the "normal" class template and make the old code the specialization +template +class BasicFuture> +{ +public: + + using value_type = ValueType; + using execution_space = ExecutionSpace; + using scheduler_type = SimpleTaskScheduler; + using queue_type = typename scheduler_type::task_queue_type; + + +private: + + template + friend class SimpleTaskScheduler; + template + friend class BasicFuture; + + using task_base_type = typename scheduler_type::task_base_type; + using task_queue_type = typename scheduler_type::task_queue_type; + + using task_queue_traits = typename scheduler_type::task_queue_traits; + using task_scheduling_info_type = typename scheduler_type::task_scheduling_info_type; + + using result_storage_type = + Impl::TaskResultStorage< + ValueType, + Impl::SchedulingInfoStorage< + Impl::RunnableTaskBase, + task_scheduling_info_type + > + >; + + + + OwningRawPtr m_task = nullptr; + + KOKKOS_INLINE_FUNCTION + explicit + BasicFuture(task_base_type* task) + : m_task(task) + { + // Note: reference count starts at 2 to account for initial increment + // TODO @tasking @minor DSH verify reference count here and/or encapsulate starting reference count closer to here + } + +public: + + KOKKOS_INLINE_FUNCTION + BasicFuture() noexcept : m_task(nullptr) { } + + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture&& rhs) noexcept + : m_task(std::move(rhs.m_task)) + { + rhs.m_task = nullptr; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture const& rhs) + // : m_task(rhs.m_task) + : m_task(nullptr) + { + *static_cast(&m_task) = rhs.m_task; + if(m_task) m_task->increment_reference_count(); + } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) noexcept + { + if(m_task != rhs.m_task) { + clear(); + //m_task = std::move(rhs.m_task); + *static_cast(&m_task) = rhs.m_task; + // rhs.m_task reference count is unchanged, since this is a move + } + else { + // They're the same, but this is a move, so 1 fewer references now + rhs.clear(); + } + rhs.m_task = nullptr; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture const& rhs) + { + if(m_task != rhs.m_task) { + clear(); + //m_task = rhs.m_task; + *static_cast(&m_task) = rhs.m_task; + } + if(m_task != nullptr) { m_task->increment_reference_count(); } + return *this; + } + + //---------------------------------------- + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture&& rhs) noexcept // NOLINT(google-explicit-constructor) + : m_task(std::move(rhs.m_task)) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Moved Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Moved Futures must have the same value_type" + ); + + // reference counts are unchanged, since this is a move + rhs.m_task = nullptr; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture const& rhs) // NOLINT(google-explicit-constructor) + //: m_task(rhs.m_task) + : m_task(nullptr) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Copied Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Copied Futures must have the same value_type" + ); + + *static_cast(&m_task) = rhs.m_task; + if(m_task) m_task->increment_reference_count(); + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& + operator=(BasicFuture const& rhs) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same value_type" + ); + + if(m_task != rhs.m_task) { + clear(); + //m_task = rhs.m_task; + *static_cast(&m_task) = rhs.m_task; + if(m_task != nullptr) { m_task->increment_reference_count(); } + } + return *this; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same value_type" + ); + + if(m_task != rhs.m_task) { + clear(); + //m_task = std::move(rhs.m_task); + *static_cast(&m_task) = rhs.m_task; + // rhs.m_task reference count is unchanged, since this is a move + } + else { + // They're the same, but this is a move, so 1 fewer references now + rhs.clear(); + } + rhs.m_task = nullptr; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + ~BasicFuture() noexcept { clear(); } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + void clear() noexcept { + if(m_task) { + bool should_delete = m_task->decrement_and_check_reference_count(); + if(should_delete) { + static_cast(m_task->ready_queue_base_ptr()) + ->deallocate(std::move(*m_task)); + } + } + //m_task = nullptr; + *static_cast(&m_task) = nullptr; + } + + KOKKOS_INLINE_FUNCTION + bool is_null() const noexcept { + return m_task == nullptr; + } + + + KOKKOS_INLINE_FUNCTION + bool is_ready() const noexcept { + return (m_task == nullptr) || m_task->wait_queue_is_consumed(); + } + + KOKKOS_INLINE_FUNCTION + const typename Impl::TaskResult< ValueType >::reference_type + get() const + { + KOKKOS_EXPECTS(is_ready()); + return static_cast(m_task)->value_reference(); + //return Impl::TaskResult::get(m_task); + } + +}; + +//////////////////////////////////////////////////////////////////////////////// +// OLD CODE +//////////////////////////////////////////////////////////////////////////////// + +template +class BasicFuture { +private: + + template< typename , typename > friend class BasicTaskScheduler ; + template< typename , typename > friend class BasicFuture ; + friend class Impl::TaskBase ; + template< typename , typename , typename > friend class Impl::Task ; + + + //---------------------------------------- + +public: + + //---------------------------------------- + + using scheduler_type = Scheduler; + using queue_type = typename scheduler_type::queue_type; + using execution_space = typename scheduler_type::execution_space; + using value_type = ValueType; + + //---------------------------------------- + +private: + + //---------------------------------------- + + using task_base = Impl::TaskBase; + + task_base * m_task ; + + KOKKOS_INLINE_FUNCTION explicit + BasicFuture( task_base * task ) : m_task(0) + { if ( task ) queue_type::assign( & m_task , task ); } + + //---------------------------------------- + +public: + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + bool is_null() const { return 0 == m_task ; } + + KOKKOS_INLINE_FUNCTION + int reference_count() const + { return 0 != m_task ? m_task->reference_count() : 0 ; } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + void clear() + { if ( m_task ) queue_type::assign( & m_task , (task_base*)0 ); } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + ~BasicFuture() { clear(); } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + BasicFuture() noexcept : m_task(nullptr) { } + + KOKKOS_INLINE_FUNCTION + BasicFuture( BasicFuture && rhs ) noexcept + : m_task( rhs.m_task ) + { + rhs.m_task = 0; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture( const BasicFuture & rhs ) + : m_task(0) + { if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) noexcept + { + clear(); + m_task = rhs.m_task ; + rhs.m_task = 0 ; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture const& rhs) + { + if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); + return *this ; + } + + //---------------------------------------- + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture&& rhs) noexcept // NOLINT(google-explicit-constructor) + : m_task( rhs.m_task ) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + rhs.m_task = 0 ; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture const& rhs) // NOLINT(google-explicit-constructor) + : m_task(nullptr) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& + operator=(BasicFuture const& rhs) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); + return *this ; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + clear(); + m_task = rhs.m_task ; + rhs.m_task = 0 ; + return *this ; + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + int is_ready() const noexcept + { return ( 0 == m_task ) || ( ((task_base*) task_base::LockTag) == m_task->m_wait ); } + + KOKKOS_INLINE_FUNCTION + const typename Impl::TaskResult< ValueType >::reference_type + get() const + { + if ( 0 == m_task ) { + Kokkos::abort( "Kokkos:::Future::get ERROR: is_null()"); + } + return Impl::TaskResult< ValueType >::get( m_task ); + } +}; + +// Is a Future with the given execution space +template< typename , typename ExecSpace = void > +struct is_future : public std::false_type {}; + +template +struct is_future, ExecSpace> + : std::integral_constant::value + || std::is_void::value + > +{}; + +//////////////////////////////////////////////////////////////////////////////// +// END OLD CODE +//////////////////////////////////////////////////////////////////////////////// + +namespace Impl { + +template +class ResolveFutureArgOrder { +private: + enum { Arg1_is_space = Kokkos::is_space::value }; + enum { Arg2_is_space = Kokkos::is_space::value }; + enum { Arg1_is_value = !Arg1_is_space && !std::is_same::value }; + enum { Arg2_is_value = !Arg2_is_space && !std::is_same::value }; + + static_assert( + ! ( Arg1_is_space && Arg2_is_space ), + "Future cannot be given two spaces" + ); + + static_assert( + ! ( Arg1_is_value && Arg2_is_value ), + "Future cannot be given two value types" + ); + + using value_type = + typename std::conditional::type + >::type; + + using execution_space = + typename std::conditional::type + >::type::execution_space; + +public: + + using type = BasicFuture>; + +}; + +} // end namespace Impl + +/** + * + * Future< space > // value_type == void + * Future< value > // space == Default + * Future< value , space > + * + */ +template +using Future = typename Impl::ResolveFutureArgOrder::type; + +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_FUTURE */ diff --git a/lib/kokkos/core/src/Kokkos_HPX.hpp b/lib/kokkos/core/src/Kokkos_HPX.hpp new file mode 100644 index 0000000000..79a2b74da4 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_HPX.hpp @@ -0,0 +1,1999 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_HPP +#define KOKKOS_HPX_HPP + +#include +#if defined(KOKKOS_ENABLE_HPX) + +#include + +#include +#include +#include + +#ifdef KOKKOS_ENABLE_HBWSPACE +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// There are currently two different implementations for the parallel dispatch +// functions: +// +// - 0: The HPX way. Unfortunately, this comes with unnecessary +// overheads at the moment, so there is +// - 1: The manual way. This way is more verbose and does not take advantage of +// e.g. parallel::for_loop in HPX but it is significantly faster in many +// benchmarks. +// +// In the long run 0 should be the preferred implementation, but until HPX is +// improved 1 will be the default. +#ifndef KOKKOS_HPX_IMPLEMENTATION +#define KOKKOS_HPX_IMPLEMENTATION 1 +#endif + +#if (KOKKOS_HPX_IMPLEMENTATION < 0) || (KOKKOS_HPX_IMPLEMENTATION > 1) +#error "You have chosen an invalid value for KOKKOS_HPX_IMPLEMENTATION" +#endif + +namespace Kokkos { +namespace Impl { +class thread_buffer { + static constexpr std::size_t m_cache_line_size = 64; + + std::size_t m_num_threads; + std::size_t m_size_per_thread; + std::size_t m_size_total; + char *m_data; + + void pad_to_cache_line(std::size_t &size) { + size = ((size + m_cache_line_size - 1) / m_cache_line_size) * + m_cache_line_size; + } + +public: + thread_buffer() + : m_num_threads(0), m_size_per_thread(0), m_size_total(0), + m_data(nullptr) {} + thread_buffer(const std::size_t num_threads, + const std::size_t size_per_thread) { + resize(num_threads, size_per_thread); + } + ~thread_buffer() { delete[] m_data; } + + thread_buffer(const thread_buffer &) = delete; + thread_buffer(thread_buffer &&) = delete; + thread_buffer &operator=(const thread_buffer &) = delete; + thread_buffer &operator=(thread_buffer) = delete; + + void resize(const std::size_t num_threads, + const std::size_t size_per_thread) { + m_num_threads = num_threads; + m_size_per_thread = size_per_thread; + + pad_to_cache_line(m_size_per_thread); + + std::size_t size_total_new = m_num_threads * m_size_per_thread; + + if (m_size_total < size_total_new) { + delete[] m_data; + m_data = new char[size_total_new]; + m_size_total = size_total_new; + } + } + + char *get(std::size_t thread_num) { + assert(thread_num < m_num_threads); + if (m_data == nullptr) { + return nullptr; + } + return &m_data[thread_num * m_size_per_thread]; + } + + std::size_t size_per_thread() const noexcept { return m_size_per_thread; } + std::size_t size_total() const noexcept { return m_size_total; } +}; +} // namespace Impl + +namespace Experimental { +class HPX { +private: + static bool m_hpx_initialized; + static Kokkos::Impl::thread_buffer m_buffer; +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + static hpx::future m_future; +#endif + +public: + using execution_space = HPX; + using memory_space = HostSpace; + using device_type = Kokkos::Device; + using array_layout = LayoutRight; + using size_type = memory_space::size_type; + using scratch_memory_space = ScratchMemorySpace; + + HPX() noexcept {} + static void print_configuration(std::ostream &, + const bool /* verbose */ = false) { + std::cout << "HPX backend" << std::endl; + } + + static bool in_parallel(HPX const & = HPX()) noexcept { return false; } + static void impl_static_fence(HPX const & = HPX()) + #if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + { + if (hpx::threads::get_self_ptr() == nullptr) { + hpx::threads::run_as_hpx_thread([]() { impl_get_future().wait(); }); + } else { + impl_get_future().wait(); + } + } + #else + noexcept { + } + #endif + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE + static void fence(HPX const & = HPX()) { + #else + void fence() const { + #endif + impl_static_fence(); + } + + static bool is_asynchronous(HPX const & = HPX()) noexcept { +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + return true; +#else + return false; +#endif + } + + static std::vector partition(...) { + Kokkos::abort("Kokkos::Experimental::HPX::partition_master: can't partition an HPX " + "instance\n"); + return std::vector(); + } + + template + static void partition_master(F const &f, int requested_num_partitions = 0, + int requested_partition_size = 0) { + if (requested_num_partitions > 1) { + Kokkos::abort("Kokkos::Experimental::HPX::partition_master: can't partition an " + "HPX instance\n"); + } + } + + static int concurrency(); + static void impl_initialize(int thread_count); + static void impl_initialize(); + static bool impl_is_initialized() noexcept; + static void impl_finalize(); + + static int impl_thread_pool_size() noexcept { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + return 0; + } else { + if (hpx::threads::get_self_ptr() == nullptr) { + return hpx::resource::get_thread_pool(0).get_os_thread_count(); + } else { + return hpx::this_thread::get_pool()->get_os_thread_count(); + } + } + } + + static int impl_thread_pool_rank() noexcept { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + return 0; + } else { + if (hpx::threads::get_self_ptr() == nullptr) { + return 0; + } else { + return hpx::this_thread::get_pool()->get_pool_index(); + } + } + } + + static int impl_thread_pool_size(int depth) { + if (depth == 0) { + return impl_thread_pool_size(); + } else { + return 1; + } + } + + static int impl_max_hardware_threads() noexcept { + return hpx::threads::hardware_concurrency(); + } + + static int impl_hardware_thread_id() noexcept { + return hpx::get_worker_thread_num(); + } + + static Kokkos::Impl::thread_buffer &impl_get_buffer() noexcept { + return m_buffer; + } +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + static hpx::future &impl_get_future() noexcept { return m_future; } +#endif + + static constexpr const char *name() noexcept { return "HPX"; } +}; +} // namespace Experimental + +namespace Impl { +template +inline void dispatch_execute_task(Closure *closure) { +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + if (hpx::threads::get_self_ptr() == nullptr) { + hpx::threads::run_as_hpx_thread([closure]() { + hpx::future &fut = Kokkos::Experimental::HPX::impl_get_future(); + Closure closure_copy = *closure; + fut = fut.then([closure_copy](hpx::future &&) { + closure_copy.execute_task(); + }); + }); + } else { + hpx::future &fut = Kokkos::Experimental::HPX::impl_get_future(); + Closure closure_copy = *closure; + fut = fut.then( + [closure_copy](hpx::future &&) { closure_copy.execute_task(); }); + } +#else + if (hpx::threads::get_self_ptr() == nullptr) { + hpx::threads::run_as_hpx_thread([closure]() { closure->execute_task(); }); + } else { + closure->execute_task(); + } +#endif +} +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { +template <> +struct MemorySpaceAccess { + enum { assignable = false }; + enum { accessible = true }; + enum { deepcopy = false }; +}; + +template <> +struct VerifyExecutionCanAccessMemorySpace< + Kokkos::Experimental::HPX::memory_space, + Kokkos::Experimental::HPX::scratch_memory_space> { + enum { value = true }; + inline static void verify(void) {} + inline static void verify(const void *) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Experimental { +template <> class UniqueToken { +public: + using execution_space = HPX; + using size_type = int; + UniqueToken(execution_space const & = execution_space()) noexcept {} + + // NOTE: Currently this assumes that there is no oversubscription. + // hpx::get_num_worker_threads can't be used directly because it may yield + // it's task (problematic if called after hpx::get_worker_thread_num). + int size() const noexcept { return HPX::impl_max_hardware_threads(); } + int acquire() const noexcept { return HPX::impl_hardware_thread_id(); } + void release(int) const noexcept {} +}; + +template <> class UniqueToken { +public: + using execution_space = HPX; + using size_type = int; + UniqueToken(execution_space const & = execution_space()) noexcept {} + + // NOTE: Currently this assumes that there is no oversubscription. + // hpx::get_num_worker_threads can't be used directly because it may yield + // it's task (problematic if called after hpx::get_worker_thread_num). + int size() const noexcept { return HPX::impl_max_hardware_threads(); } + int acquire() const noexcept { return HPX::impl_hardware_thread_id(); } + void release(int) const noexcept {} +}; +} // namespace Experimental +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +struct HPXTeamMember { +public: + using execution_space = Kokkos::Experimental::HPX; + using scratch_memory_space = + Kokkos::ScratchMemorySpace; + +private: + scratch_memory_space m_team_shared; + std::size_t m_team_shared_size; + + int m_league_size; + int m_league_rank; + int m_team_size; + int m_team_rank; + +public: + KOKKOS_INLINE_FUNCTION + const scratch_memory_space &team_shmem() const { + return m_team_shared.set_team_thread_mode(0, 1, 0); + } + + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space &team_scratch(const int) const { + return m_team_shared.set_team_thread_mode(0, 1, 0); + } + + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space &thread_scratch(const int) const { + return m_team_shared.set_team_thread_mode(0, team_size(), team_rank()); + } + + KOKKOS_INLINE_FUNCTION int league_rank() const noexcept { + return m_league_rank; + } + + KOKKOS_INLINE_FUNCTION int league_size() const noexcept { + return m_league_size; + } + + KOKKOS_INLINE_FUNCTION int team_rank() const noexcept { return m_team_rank; } + KOKKOS_INLINE_FUNCTION int team_size() const noexcept { return m_team_size; } + + template + constexpr KOKKOS_INLINE_FUNCTION + HPXTeamMember(const TeamPolicyInternal &policy, + const int team_rank, const int league_rank, void *scratch, + int scratch_size) noexcept + : m_team_shared(scratch, scratch_size, scratch, scratch_size), + m_team_shared_size(scratch_size), m_league_size(policy.league_size()), + m_league_rank(league_rank), m_team_size(policy.team_size()), + m_team_rank(team_rank) {} + + KOKKOS_INLINE_FUNCTION + void team_barrier() const {} + + template + KOKKOS_INLINE_FUNCTION void team_broadcast(ValueType &, const int &) const { + static_assert(std::is_trivially_default_constructible(), + "Only trivial constructible types can be broadcasted"); + } + + template + KOKKOS_INLINE_FUNCTION void team_broadcast(const Closure &, ValueType &, + const int &) const { + static_assert(std::is_trivially_default_constructible(), + "Only trivial constructible types can be broadcasted"); + } + + template + KOKKOS_INLINE_FUNCTION ValueType team_reduce(const ValueType &value, + const JoinOp &) const { + return value; + } + + template + KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + team_reduce(const ReducerType &reducer) const {} + + template + KOKKOS_INLINE_FUNCTION Type + team_scan(const Type &value, Type *const global_accum = nullptr) const { + if (global_accum) { + Kokkos::atomic_fetch_add(global_accum, value); + } + + return 0; + } +}; + +template +class TeamPolicyInternal + : public PolicyTraits { + using traits = PolicyTraits; + + int m_league_size; + int m_team_size; + std::size_t m_team_scratch_size[2]; + std::size_t m_thread_scratch_size[2]; + int m_chunk_size; + +public: + using member_type = HPXTeamMember; + + // NOTE: Max size is 1 for simplicity. In most cases more than 1 is not + // necessary on CPU. Implement later if there is a need. + template + inline static int team_size_max(const FunctorType &) { + return 1; + } + + template + inline static int team_size_recommended(const FunctorType &) { + return 1; + } + + template + inline static int team_size_recommended(const FunctorType &, const int &) { + return 1; + } + + template + int team_size_max(const FunctorType &, const ParallelForTag &) const { + return 1; + } + + template + int team_size_max(const FunctorType &, const ParallelReduceTag &) const { + return 1; + } + template + int team_size_recommended(const FunctorType &, const ParallelForTag &) const { + return 1; + } + template + int team_size_recommended(const FunctorType &, + const ParallelReduceTag &) const { + return 1; + } + +private: + inline void init(const int league_size_request, const int team_size_request) { + m_league_size = league_size_request; + const int max_team_size = 1; // TODO: Can't use team_size_max(...) because + // it requires a functor as argument. + m_team_size = + team_size_request > max_team_size ? max_team_size : team_size_request; + + if (m_chunk_size > 0) { + if (!Impl::is_integral_power_of_two(m_chunk_size)) + Kokkos::abort("TeamPolicy blocking granularity must be power of two"); + } else { + int new_chunk_size = 1; + while (new_chunk_size * 4 * Kokkos::Experimental::HPX::concurrency() < + m_league_size) { + new_chunk_size *= 2; + } + + if (new_chunk_size < 128) { + new_chunk_size = 1; + while ((new_chunk_size * Kokkos::Experimental::HPX::concurrency() < + m_league_size) && + (new_chunk_size < 128)) + new_chunk_size *= 2; + } + + m_chunk_size = new_chunk_size; + } + } + +public: + inline int team_size() const { return m_team_size; } + inline int league_size() const { return m_league_size; } + + inline size_t scratch_size(const int &level, int team_size_ = -1) const { + if (team_size_ < 0) { + team_size_ = m_team_size; + } + return m_team_scratch_size[level] + + team_size_ * m_thread_scratch_size[level]; + } + +public: + template + friend class TeamPolicyInternal; + + template + TeamPolicyInternal( + const TeamPolicyInternal &p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + + TeamPolicyInternal(const typename traits::execution_space &, + int league_size_request, int team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, team_size_request); + } + + TeamPolicyInternal(const typename traits::execution_space &, + int league_size_request, + const Kokkos::AUTO_t &team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, 1); + } + + TeamPolicyInternal(int league_size_request, int team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, team_size_request); + } + + TeamPolicyInternal(int league_size_request, + const Kokkos::AUTO_t &team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, 1); + } + + inline int chunk_size() const { return m_chunk_size; } + + inline TeamPolicyInternal & + set_chunk_size(typename traits::index_type chunk_size_) { + m_chunk_size = chunk_size_; + return *this; + } + + inline TeamPolicyInternal &set_scratch_size(const int &level, + const PerTeamValue &per_team) { + m_team_scratch_size[level] = per_team.value; + return *this; + } + + inline TeamPolicyInternal & + set_scratch_size(const int &level, const PerThreadValue &per_thread) { + m_thread_scratch_size[level] = per_thread.value; + return *this; + } + + inline TeamPolicyInternal & + set_scratch_size(const int &level, const PerTeamValue &per_team, + const PerThreadValue &per_thread) { + m_team_scratch_size[level] = per_team.value; + m_thread_scratch_size[level] = per_thread.value; + return *this; + } +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + + const FunctorType m_functor; + const Policy m_policy; + + template + static typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i) { + functor(i); + } + + template + static typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i) { + const TagType t{}; + functor(t, i); + } + + template + static typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end) { + for (Member i = i_begin; i < i_end; ++i) { + functor(i); + } + } + + template + static typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end) { + const TagType t{}; + for (Member i = i_begin; i < i_end; ++i) { + functor(t, i); + } + } + +public: + void execute() const { Kokkos::Impl::dispatch_execute_task(this); } + + void execute_task() const { +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), [this](const Member i) { + execute_functor(m_functor, i); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &sem, i_begin]() { + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + execute_functor_range(m_functor, i_begin, i_end); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + } + + inline ParallelFor(const FunctorType &arg_functor, Policy arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using MDRangePolicy = Kokkos::MDRangePolicy; + using Policy = typename MDRangePolicy::impl_range_policy; + using WorkTag = typename MDRangePolicy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using iterate_type = + typename Kokkos::Impl::HostIterateTile; + + const FunctorType m_functor; + const MDRangePolicy m_mdr_policy; + const Policy m_policy; + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), [this](const Member i) { + iterate_type(m_mdr_policy, m_functor)(i); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &sem, i_begin]() { + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + for (Member i = i_begin; i < i_end; ++i) { + iterate_type(m_mdr_policy, m_functor)(i); + } + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + } + + inline ParallelFor(const FunctorType &arg_functor, MDRangePolicy arg_policy) + : m_functor(arg_functor), m_mdr_policy(arg_policy), + m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = + FunctorAnalysis; + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using value_type = typename Analysis::value_type; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + + const FunctorType m_functor; + const Policy m_policy; + const ReducerType m_reducer; + const pointer_type m_result_ptr; + + bool m_force_synchronous; + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i, + reference_type update) { + functor(i, update); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i, + reference_type update) { + const TagType t{}; + functor(t, i, update); + } + + template + inline typename std::enable_if::value>::type + execute_functor_range(reference_type update, const Member i_begin, + const Member i_end) const { + for (Member i = i_begin; i < i_end; ++i) { + m_functor(i, update); + } + } + + template + inline typename std::enable_if::value>::type + execute_functor_range(reference_type update, const Member i_begin, + const Member i_end) const { + const TagType t{}; + + for (Member i = i_begin; i < i_end; ++i) { + m_functor(t, i, update); + } + } + + class value_type_wrapper { + private: + std::size_t m_value_size; + char *m_value_buffer; + + public: + value_type_wrapper() : m_value_size(0), m_value_buffer(nullptr) {} + + value_type_wrapper(const std::size_t value_size) + : m_value_size(value_size), m_value_buffer(new char[m_value_size]) {} + + value_type_wrapper(const value_type_wrapper &other) + : m_value_size(0), m_value_buffer(nullptr) { + if (this != &other) { + m_value_buffer = new char[other.m_value_size]; + m_value_size = other.m_value_size; + + std::copy(other.m_value_buffer, other.m_value_buffer + m_value_size, + m_value_buffer); + } + } + + ~value_type_wrapper() { delete[] m_value_buffer; } + + value_type_wrapper(value_type_wrapper &&other) + : m_value_size(0), m_value_buffer(nullptr) { + if (this != &other) { + m_value_buffer = other.m_value_buffer; + m_value_size = other.m_value_size; + + other.m_value_buffer = nullptr; + other.m_value_size = 0; + } + } + + value_type_wrapper &operator=(const value_type_wrapper &other) { + if (this != &other) { + delete[] m_value_buffer; + m_value_buffer = new char[other.m_value_size]; + m_value_size = other.m_value_size; + + std::copy(other.m_value_buffer, other.m_value_buffer + m_value_size, + m_value_buffer); + } + + return *this; + } + + value_type_wrapper &operator=(value_type_wrapper &&other) { + if (this != &other) { + delete[] m_value_buffer; + m_value_buffer = other.m_value_buffer; + m_value_size = other.m_value_size; + + other.m_value_buffer = nullptr; + other.m_value_size = 0; + } + + return *this; + } + + pointer_type pointer() const { + return reinterpret_cast(m_value_buffer); + } + + reference_type reference() const { + return ValueOps::reference( + reinterpret_cast(m_value_buffer)); + } + }; + +public: + void execute() const { + dispatch_execute_task(this); + } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + std::size_t value_size = + Analysis::value_size(ReducerConditional::select(m_functor, m_reducer)); + + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + // NOTE: This version makes the most use of HPX functionality, but + // requires the struct value_type_wrapper to handle different + // reference_types. It is also significantly slower than the version + // below due to not reusing the buffer used by other functions. + using hpx::parallel::reduction; + using hpx::parallel::execution::static_chunk_size; + + value_type_wrapper final_value(value_size); + value_type_wrapper identity(value_size); + + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + final_value.pointer()); + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + identity.pointer()); + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), + reduction(final_value, identity, + [this](value_type_wrapper &a, + value_type_wrapper &b) -> value_type_wrapper & { + ValueJoin::join( + ReducerConditional::select(m_functor, m_reducer), + a.pointer(), b.pointer()); + return a; + }), + [this](Member i, value_type_wrapper &update) { + execute_functor(m_functor, i, update.reference()); + }); + + pointer_type final_value_ptr = final_value.pointer(); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, value_size); + + for_loop(par, 0, num_worker_threads, [this, &buffer](std::size_t t) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(t))); + }); + + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, i_begin]() { + reference_type update = + ValueOps::reference(reinterpret_cast( + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()))); + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + execute_functor_range(update, i_begin, i_end); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); + + for (int i = 1; i < num_worker_threads; ++i) { + ValueJoin::join(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(0)), + reinterpret_cast(buffer.get(i))); + } + + pointer_type final_value_ptr = + reinterpret_cast(buffer.get(0)); +#endif + + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), final_value_ptr); + + if (m_result_ptr != nullptr) { + const int n = Analysis::value_count( + ReducerConditional::select(m_functor, m_reducer)); + + for (int j = 0; j < n; ++j) { + m_result_ptr[j] = final_value_ptr[j]; + } + } + } + + template + inline ParallelReduce( + const FunctorType &arg_functor, Policy arg_policy, + const ViewType &arg_view, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void *>::type = NULL) + : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), + m_result_ptr(arg_view.data()), + m_force_synchronous(!arg_view.impl_track().has_record()) {} + + inline ParallelReduce(const FunctorType &arg_functor, Policy arg_policy, + const ReducerType &reducer) + : m_functor(arg_functor), m_policy(arg_policy), m_reducer(reducer), + m_result_ptr(reducer.view().data()), + m_force_synchronous(!reducer.view().impl_track().has_record()) {} +}; + +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::HPX> { +private: + using MDRangePolicy = Kokkos::MDRangePolicy; + using Policy = typename MDRangePolicy::impl_range_policy; + using WorkTag = typename MDRangePolicy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = FunctorAnalysis; + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using value_type = typename Analysis::value_type; + using reference_type = typename Analysis::reference_type; + using iterate_type = + typename Kokkos::Impl::HostIterateTile; + + const FunctorType m_functor; + const MDRangePolicy m_mdr_policy; + const Policy m_policy; + const ReducerType m_reducer; + const pointer_type m_result_ptr; + + bool m_force_synchronous; + +public: + void execute() const { + dispatch_execute_task(this); + } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const std::size_t value_size = + Analysis::value_size(ReducerConditional::select(m_functor, m_reducer)); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, value_size); + + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + + for_loop(par, 0, num_worker_threads, [this, &buffer](std::size_t t) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(t))); + }); + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), [this, &buffer](const Member i) { + reference_type update = ValueOps::reference( + reinterpret_cast(buffer.get( + Kokkos::Experimental::HPX::impl_hardware_thread_id()))); + iterate_type(m_mdr_policy, m_functor, update)(i); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, i_begin]() { + reference_type update = + ValueOps::reference(reinterpret_cast( + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()))); + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + + for (Member i = i_begin; i < i_end; ++i) { + iterate_type(m_mdr_policy, m_functor, update)(i); + } + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + + for (int i = 1; i < num_worker_threads; ++i) { + ValueJoin::join(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(0)), + reinterpret_cast(buffer.get(i))); + } + + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(0))); + + if (m_result_ptr != nullptr) { + const int n = Analysis::value_count( + ReducerConditional::select(m_functor, m_reducer)); + + for (int j = 0; j < n; ++j) { + m_result_ptr[j] = reinterpret_cast(buffer.get(0))[j]; + } + } + } + + template + inline ParallelReduce( + const FunctorType &arg_functor, MDRangePolicy arg_policy, + const ViewType &arg_view, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void *>::type = NULL) + : m_functor(arg_functor), m_mdr_policy(arg_policy), + m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), + m_reducer(InvalidType()), m_result_ptr(arg_view.data()), + m_force_synchronous(!arg_view.impl_track().has_record()) {} + + inline ParallelReduce(const FunctorType &arg_functor, + MDRangePolicy arg_policy, const ReducerType &reducer) + : m_functor(arg_functor), m_mdr_policy(arg_policy), + m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), + m_reducer(reducer), m_result_ptr(reducer.view().data()), + m_force_synchronous(!reducer.view().impl_track().has_record()) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +template +class ParallelScan, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = + FunctorAnalysis; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + using value_type = typename Analysis::value_type; + + const FunctorType m_functor; + const Policy m_policy; + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + for (Member i = i_begin; i < i_end; ++i) { + functor(i, update, final); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + const TagType t{}; + for (Member i = i_begin; i < i_end; ++i) { + functor(t, i, update, final); + } + } + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const int value_count = Analysis::value_count(m_functor); + const std::size_t value_size = Analysis::value_size(m_functor); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 2 * value_size); + + using hpx::lcos::local::barrier; + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + barrier bar(num_worker_threads); + + for_loop(par.with(static_chunk_size(1)), 0, num_worker_threads, + [this, &buffer, &bar, num_worker_threads, value_count, + value_size](std::size_t const t) { + reference_type update_sum = ValueInit::init( + m_functor, reinterpret_cast(buffer.get(t))); + + const WorkRange range(m_policy, t, num_worker_threads); + execute_functor_range(m_functor, range.begin(), + range.end(), update_sum, false); + + bar.wait(); + + if (t == 0) { + ValueInit::init(m_functor, reinterpret_cast( + buffer.get(0) + value_size)); + + for (int i = 1; i < num_worker_threads; ++i) { + pointer_type ptr_1_prev = + reinterpret_cast(buffer.get(i - 1)); + pointer_type ptr_2_prev = reinterpret_cast( + buffer.get(i - 1) + value_size); + pointer_type ptr_2 = reinterpret_cast( + buffer.get(i) + value_size); + + for (int j = 0; j < value_count; ++j) { + ptr_2[j] = ptr_2_prev[j]; + } + + ValueJoin::join(m_functor, ptr_2, ptr_1_prev); + } + } + + bar.wait(); + + reference_type update_base = ValueOps::reference( + reinterpret_cast(buffer.get(t) + value_size)); + + execute_functor_range(m_functor, range.begin(), + range.end(), update_base, true); + }); + } + + inline ParallelScan(const FunctorType &arg_functor, const Policy &arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +template +class ParallelScanWithTotal, + ReturnType, Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = + FunctorAnalysis; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + using value_type = typename Analysis::value_type; + + const FunctorType m_functor; + const Policy m_policy; + ReturnType &m_returnvalue; + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + for (Member i = i_begin; i < i_end; ++i) { + functor(i, update, final); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + const TagType t{}; + for (Member i = i_begin; i < i_end; ++i) { + functor(t, i, update, final); + } + } + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const int value_count = Analysis::value_count(m_functor); + const std::size_t value_size = Analysis::value_size(m_functor); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 2 * value_size); + + using hpx::lcos::local::barrier; + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + barrier bar(num_worker_threads); + + for_loop(par.with(static_chunk_size(1)), 0, num_worker_threads, + [this, &buffer, &bar, num_worker_threads, value_count, + value_size](std::size_t const t) { + reference_type update_sum = ValueInit::init( + m_functor, reinterpret_cast(buffer.get(t))); + + const WorkRange range(m_policy, t, num_worker_threads); + execute_functor_range(m_functor, range.begin(), + range.end(), update_sum, false); + + bar.wait(); + + if (t == 0) { + ValueInit::init(m_functor, reinterpret_cast( + buffer.get(0) + value_size)); + + for (int i = 1; i < num_worker_threads; ++i) { + pointer_type ptr_1_prev = + reinterpret_cast(buffer.get(i - 1)); + pointer_type ptr_2_prev = reinterpret_cast( + buffer.get(i - 1) + value_size); + pointer_type ptr_2 = reinterpret_cast( + buffer.get(i) + value_size); + + for (int j = 0; j < value_count; ++j) { + ptr_2[j] = ptr_2_prev[j]; + } + + ValueJoin::join(m_functor, ptr_2, ptr_1_prev); + } + } + + bar.wait(); + + reference_type update_base = ValueOps::reference( + reinterpret_cast(buffer.get(t) + value_size)); + + execute_functor_range(m_functor, range.begin(), + range.end(), update_base, true); + + if (t == std::size_t(num_worker_threads - 1)) { + m_returnvalue = update_base; + } + }); + } + + inline ParallelScanWithTotal(const FunctorType &arg_functor, + const Policy &arg_policy, + ReturnType &arg_returnvalue) + : m_functor(arg_functor), m_policy(arg_policy), + m_returnvalue(arg_returnvalue) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using Policy = TeamPolicyInternal; + using WorkTag = typename Policy::work_tag; + using Member = typename Policy::member_type; + using memory_space = Kokkos::HostSpace; + + const FunctorType m_functor; + const Policy m_policy; + const int m_league; + const std::size_t m_shared; + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size) { + const TagType t{}; + functor(t, Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size) { + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size) { + const TagType t{}; + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(t, + Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + } + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, m_shared); + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), 0, + m_policy.league_size(), [this, &buffer](const int league_rank) { + execute_functor( + m_functor, m_policy, league_rank, + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()), + m_shared); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (int league_rank_begin = 0; league_rank_begin < m_policy.league_size(); + league_rank_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, league_rank_begin]() { + const int league_rank_end = (std::min)( + league_rank_begin + m_policy.chunk_size(), m_policy.league_size()); + execute_functor_range( + m_functor, m_policy, league_rank_begin, league_rank_end, + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()), m_shared); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + } + + ParallelFor(const FunctorType &arg_functor, const Policy &arg_policy) + : m_functor(arg_functor), m_policy(arg_policy), + m_league(arg_policy.league_size()), + m_shared(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + + FunctorTeamShmemSize::value( + arg_functor, arg_policy.team_size())) {} +}; + +template +class ParallelReduce, + ReducerType, Kokkos::Experimental::HPX> { +private: + using Policy = TeamPolicyInternal; + using Analysis = + FunctorAnalysis; + using Member = typename Policy::member_type; + using WorkTag = typename Policy::work_tag; + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + using value_type = typename Analysis::value_type; + + const FunctorType m_functor; + const int m_league; + const Policy m_policy; + const ReducerType m_reducer; + pointer_type m_result_ptr; + const std::size_t m_shared; + + bool m_force_synchronous; + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + const TagType t{}; + functor(t, Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + const TagType t{}; + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(t, + Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + } + +public: + void execute() const { + dispatch_execute_task(this); + } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const std::size_t value_size = + Analysis::value_size(ReducerConditional::select(m_functor, m_reducer)); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, value_size + m_shared); + + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + + for_loop(par, 0, num_worker_threads, [this, &buffer](std::size_t t) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(t))); + }); + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::execution::static_chunk_size; + + hpx::parallel::for_loop( + par.with(static_chunk_size(m_policy.chunk_size())), 0, + m_policy.league_size(), + [this, &buffer, value_size](const int league_rank) { + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + reference_type update = ValueOps::reference( + reinterpret_cast(buffer.get(t))); + + execute_functor(m_functor, m_policy, league_rank, + buffer.get(t) + value_size, m_shared, + update); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (int league_rank_begin = 0; league_rank_begin < m_policy.league_size(); + league_rank_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, league_rank_begin, value_size]() { + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + reference_type update = + ValueOps::reference(reinterpret_cast(buffer.get(t))); + const int league_rank_end = (std::min)( + league_rank_begin + m_policy.chunk_size(), m_policy.league_size()); + execute_functor_range( + m_functor, m_policy, league_rank_begin, league_rank_end, + buffer.get(t) + value_size, m_shared, update); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + + const pointer_type ptr = reinterpret_cast(buffer.get(0)); + for (int t = 1; t < num_worker_threads; ++t) { + ValueJoin::join(ReducerConditional::select(m_functor, m_reducer), ptr, + reinterpret_cast(buffer.get(t))); + } + + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), ptr); + + if (m_result_ptr) { + const int n = Analysis::value_count( + ReducerConditional::select(m_functor, m_reducer)); + + for (int j = 0; j < n; ++j) { + m_result_ptr[j] = ptr[j]; + } + } + } + + template + ParallelReduce( + const FunctorType &arg_functor, const Policy &arg_policy, + const ViewType &arg_result, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void *>::type = NULL) + : m_functor(arg_functor), m_league(arg_policy.league_size()), + m_policy(arg_policy), m_reducer(InvalidType()), + m_result_ptr(arg_result.data()), + m_shared(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + + FunctorTeamShmemSize::value( + m_functor, arg_policy.team_size())), + m_force_synchronous(!arg_result.impl_track().has_record()) {} + + inline ParallelReduce(const FunctorType &arg_functor, Policy arg_policy, + const ReducerType &reducer) + : m_functor(arg_functor), m_league(arg_policy.league_size()), + m_policy(arg_policy), m_reducer(reducer), + m_result_ptr(reducer.view().data()), + m_shared(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + + FunctorTeamShmemSize::value( + arg_functor, arg_policy.team_size())), + m_force_synchronous(!reducer.view().impl_track().has_record()) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { + +template +KOKKOS_INLINE_FUNCTION + Impl::TeamThreadRangeBoundariesStruct + TeamThreadRange(const Impl::HPXTeamMember &thread, const iType &count) { + return Impl::TeamThreadRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type::type, Impl::HPXTeamMember> +TeamThreadRange(const Impl::HPXTeamMember &thread, const iType1 &i_begin, + const iType2 &i_end) { + using iType = typename std::common_type::type; + return Impl::TeamThreadRangeBoundariesStruct( + thread, iType(i_begin), iType(i_end)); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::TeamThreadRangeBoundariesStruct + TeamVectorRange(const Impl::HPXTeamMember &thread, const iType &count) { + return Impl::TeamThreadRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type::type, Impl::HPXTeamMember> +TeamVectorRange(const Impl::HPXTeamMember &thread, const iType1 &i_begin, + const iType2 &i_end) { + using iType = typename std::common_type::type; + return Impl::TeamThreadRangeBoundariesStruct( + thread, iType(i_begin), iType(i_end)); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::ThreadVectorRangeBoundariesStruct + ThreadVectorRange(const Impl::HPXTeamMember &thread, const iType &count) { + return Impl::ThreadVectorRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::ThreadVectorRangeBoundariesStruct + ThreadVectorRange(const Impl::HPXTeamMember &thread, const iType &i_begin, + const iType &i_end) { + return Impl::ThreadVectorRangeBoundariesStruct( + thread, i_begin, i_end); +} + +KOKKOS_INLINE_FUNCTION +Impl::ThreadSingleStruct +PerTeam(const Impl::HPXTeamMember &thread) { + return Impl::ThreadSingleStruct(thread); +} + +KOKKOS_INLINE_FUNCTION +Impl::VectorSingleStruct +PerThread(const Impl::HPXTeamMember &thread) { + return Impl::VectorSingleStruct(thread); +} + +/** \brief Inter-thread parallel_for. Executes lambda(iType i) for each + * i=0..N-1. + * + * The range i=0..N-1 is mapped to all threads of the the calling thread team. + * This functionality requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::TeamThreadRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda) { + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) + lambda(i); +} + +/** \brief Inter-thread vector parallel_reduce. Executes lambda(iType i, + * ValueType & val) for each i=0..N-1. + * + * The range i=0..N-1 is mapped to all threads of the the calling thread team + * and a summation of val is performed and put into result. This functionality + * requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::TeamThreadRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, ValueType &result) { + result = ValueType(); + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, result); + } +} + +/** \brief Intra-thread vector parallel_for. Executes lambda(iType i) for each + * i=0..N-1. + * + * The range i=0..N-1 is mapped to all vector lanes of the the calling thread. + * This functionality requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda) { +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i); + } +} + +/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, + * ValueType & val) for each i=0..N-1. + * + * The range i=0..N-1 is mapped to all vector lanes of the the calling thread + * and a summation of val is performed and put into result. This functionality + * requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, ValueType &result) { + result = ValueType(); +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, result); + } +} + +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::TeamThreadRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, const ReducerType &reducer) { + reducer.init(reducer.reference()); + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, reducer.reference()); + } +} + +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, const ReducerType &reducer) { + reducer.init(reducer.reference()); +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, reducer.reference()); + } +} + +template +KOKKOS_INLINE_FUNCTION void parallel_scan( + Impl::TeamThreadRangeBoundariesStruct const + &loop_boundaries, + const FunctorType &lambda) { + using value_type = typename Kokkos::Impl::FunctorAnalysis< + Kokkos::Impl::FunctorPatternInterface::SCAN, void, + FunctorType>::value_type; + + value_type scan_val = value_type(); + + // Intra-member scan + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, scan_val, false); + } + + // 'scan_val' output is the exclusive prefix sum + scan_val = loop_boundaries.thread.team_scan(scan_val); + + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, scan_val, true); + } +} + +/** \brief Intra-thread vector parallel exclusive prefix sum. Executes + * lambda(iType i, ValueType & val, bool final) for each i=0..N-1. + * + * The range i=0..N-1 is mapped to all vector lanes in the thread and a scan + * operation is performed. Depending on the target execution space the operator + * might be called twice: once with final=false and once with final=true. When + * final==true val contains the prefix sum value. The contribution of this "i" + * needs to be added to val no matter whether final==true or not. In a serial + * execution (i.e. team_size==1) the operator is only called once with + * final==true. Scan_val will be set to the final sum value over all vector + * lanes. This functionality requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_scan( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const FunctorType &lambda) { + using ValueTraits = Kokkos::Impl::FunctorValueTraits; + using value_type = typename ValueTraits::value_type; + + value_type scan_val = value_type(); + +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, scan_val, true); + } +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::VectorSingleStruct &single_struct, + const FunctorType &lambda) { + lambda(); +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::ThreadSingleStruct &single_struct, + const FunctorType &lambda) { + lambda(); +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::VectorSingleStruct &single_struct, + const FunctorType &lambda, ValueType &val) { + lambda(val); +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::ThreadSingleStruct &single_struct, + const FunctorType &lambda, ValueType &val) { + lambda(val); +} + +} // namespace Kokkos + +#include + +#endif /* #if defined( KOKKOS_ENABLE_HPX ) */ +#endif /* #ifndef KOKKOS_HPX_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_HostSpace.hpp b/lib/kokkos/core/src/Kokkos_HostSpace.hpp index 3fd55d9148..921ba0df34 100644 --- a/lib/kokkos/core/src/Kokkos_HostSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_HostSpace.hpp @@ -57,6 +57,8 @@ #include #include +#include "impl/Kokkos_HostSpace_deepcopy.hpp" + /*--------------------------------------------------------------------------*/ namespace Kokkos { @@ -113,6 +115,8 @@ public: typedef Kokkos::OpenMP execution_space; #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS ) typedef Kokkos::Threads execution_space; +#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) + typedef Kokkos::Experimental::HPX execution_space; //#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) // typedef Kokkos::Qthreads execution_space; #elif defined( KOKKOS_ENABLE_OPENMP ) @@ -121,6 +125,8 @@ public: typedef Kokkos::Threads execution_space; //#elif defined( KOKKOS_ENABLE_QTHREADS ) // typedef Kokkos::Qthreads execution_space; +#elif defined( KOKKOS_ENABLE_HPX ) + typedef Kokkos::Experimental::HPX execution_space; #elif defined( KOKKOS_ENABLE_SERIAL ) typedef Kokkos::Serial execution_space; #else @@ -291,15 +297,18 @@ namespace Kokkos { namespace Impl { +#define PAR_DEEP_COPY_USE_MEMCPY + template< class ExecutionSpace > struct DeepCopy< HostSpace, HostSpace, ExecutionSpace > { DeepCopy( void * dst, const void * src, size_t n ) { - memcpy( dst, src, n ); + hostspace_parallel_deepcopy(dst,src,n); } DeepCopy( const ExecutionSpace& exec, void * dst, const void * src, size_t n ) { exec.fence(); - memcpy( dst, src, n ); + hostspace_parallel_deepcopy(dst,src,n); + exec.fence(); } }; diff --git a/lib/kokkos/core/src/Kokkos_Layout.hpp b/lib/kokkos/core/src/Kokkos_Layout.hpp index 43e117783b..6f423d545f 100644 --- a/lib/kokkos/core/src/Kokkos_Layout.hpp +++ b/lib/kokkos/core/src/Kokkos_Layout.hpp @@ -193,6 +193,9 @@ struct LayoutStride { {} }; +// ========================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + //---------------------------------------------------------------------------- /// \struct LayoutTileLeft /// \brief Memory layout tag indicating left-to-right (Fortran scheme) @@ -243,6 +246,8 @@ struct LayoutTileLeft { : dimension { argN0 , argN1 , argN2 , argN3 , argN4 , argN5 , argN6 , argN7 } {} }; +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +// =================================================================================== ////////////////////////////////////////////////////////////////////////////////////// @@ -269,14 +274,14 @@ namespace Experimental { template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 = 0, unsigned ArgN3 = 0, unsigned ArgN4 = 0, unsigned ArgN5 = 0, unsigned ArgN6 = 0, unsigned ArgN7 = 0, bool IsPowerOfTwo = - ( Impl::is_integral_power_of_two(ArgN0) && - Impl::is_integral_power_of_two(ArgN1) && - (Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) && - (Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) && - (Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) && - (Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) && - (Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) && - (Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) ) + ( Kokkos::Impl::is_integral_power_of_two(ArgN0) && + Kokkos::Impl::is_integral_power_of_two(ArgN1) && + (Kokkos::Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) ) ) > struct LayoutTiled { diff --git a/lib/kokkos/core/src/Kokkos_Macros.hpp b/lib/kokkos/core/src/Kokkos_Macros.hpp index 10fc09423e..6b8ae02f82 100644 --- a/lib/kokkos/core/src/Kokkos_Macros.hpp +++ b/lib/kokkos/core/src/Kokkos_Macros.hpp @@ -50,6 +50,7 @@ * KOKKOS_ENABLE_CUDA Kokkos::Cuda execution and memory spaces * KOKKOS_ENABLE_THREADS Kokkos::Threads execution space * KOKKOS_ENABLE_QTHREADS Kokkos::Qthreads execution space + * KOKKOS_ENABLE_HPX Kokkos::Experimental::HPX execution space * KOKKOS_ENABLE_OPENMP Kokkos::OpenMP execution space * KOKKOS_ENABLE_OPENMPTARGET Kokkos::Experimental::OpenMPTarget execution space * KOKKOS_ENABLE_HWLOC HWLOC library is available. @@ -98,12 +99,14 @@ #if defined(KOKKOS_ENABLE_SERIAL) || defined(KOKKOS_ENABLE_THREADS) || \ defined(KOKKOS_ENABLE_OPENMP) || defined(KOKKOS_ENABLE_QTHREADS) || \ + defined(KOKKOS_ENABLE_HPX) || \ defined(KOKKOS_ENABLE_ROCM) || defined(KOKKOS_ENABLE_OPENMPTARGET) #define KOKKOS_INTERNAL_ENABLE_NON_CUDA_BACKEND #endif #if !defined(KOKKOS_ENABLE_THREADS) && !defined(KOKKOS_ENABLE_CUDA) && \ !defined(KOKKOS_ENABLE_OPENMP) && !defined(KOKKOS_ENABLE_QTHREADS) && \ + !defined(KOKKOS_ENABLE_HPX) && \ !defined(KOKKOS_ENABLE_ROCM) && !defined(KOKKOS_ENABLE_OPENMPTARGET) #define KOKKOS_INTERNAL_NOT_PARALLEL #endif @@ -174,33 +177,22 @@ #if ( 10000 > CUDA_VERSION ) #define KOKKOS_ENABLE_PRE_CUDA_10_DEPRECATION_API #endif + + #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 700) + // PTX atomics with memory order semantics are only available on volta and later + #if !defined(KOKKOS_DISABLE_CUDA_ASM) + #if !defined(KOKKOS_ENABLE_CUDA_ASM) + #define KOKKOS_ENABLE_CUDA_ASM + #if !defined(KOKKOS_DISABLE_CUDA_ASM_ATOMICS) + #define KOKKOS_ENABLE_CUDA_ASM_ATOMICS + #endif + #endif + #endif + #endif + + #endif // #if defined( KOKKOS_ENABLE_CUDA ) && defined( __CUDACC__ ) -//---------------------------------------------------------------------------- -// Language info: C++, CUDA, OPENMP - -#if defined( KOKKOS_ENABLE_CUDA ) - // Compiling Cuda code to 'ptx' - - #define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__ - #define KOKKOS_INLINE_FUNCTION __device__ __host__ inline - #define KOKKOS_FUNCTION __device__ __host__ -#endif // #if defined( __CUDA_ARCH__ ) - -#if defined( KOKKOS_ENABLE_ROCM ) && defined( __HCC__ ) - - #define KOKKOS_FORCEINLINE_FUNCTION __attribute__((amp,cpu)) inline - #define KOKKOS_INLINE_FUNCTION __attribute__((amp,cpu)) inline - #define KOKKOS_FUNCTION __attribute__((amp,cpu)) - #define KOKKOS_LAMBDA [=] __attribute__((amp,cpu)) -#endif - -#if defined( _OPENMP ) - // Compiling with OpenMP. - // The value of _OPENMP is an integer value YYYYMM - // where YYYY and MM are the year and month designation - // of the supported OpenMP API version. -#endif // #if defined( _OPENMP ) //---------------------------------------------------------------------------- // Mapping compiler built-ins to KOKKOS_COMPILER_*** macros @@ -263,7 +255,7 @@ #endif #endif -#if defined( __PGIC__ ) +#if defined( __PGIC__ ) #define KOKKOS_COMPILER_PGI __PGIC__*100+__PGIC_MINOR__*10+__PGIC_PATCHLEVEL__ #if ( 1540 > KOKKOS_COMPILER_PGI ) @@ -272,6 +264,36 @@ #endif //#endif // #if !defined( __CUDA_ARCH__ ) +//---------------------------------------------------------------------------- +// Language info: C++, CUDA, OPENMP + +#if defined( KOKKOS_ENABLE_CUDA ) + // Compiling Cuda code to 'ptx' + + #define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__ + #define KOKKOS_INLINE_FUNCTION __device__ __host__ inline + #define KOKKOS_FUNCTION __device__ __host__ + #if defined( KOKKOS_COMPILER_NVCC ) + #define KOKKOS_INLINE_FUNCTION_DELETED inline + #else + #define KOKKOS_INLINE_FUNCTION_DELETED __device__ __host__ inline + #endif +#endif // #if defined( __CUDA_ARCH__ ) + +#if defined( KOKKOS_ENABLE_ROCM ) && defined( __HCC__ ) + + #define KOKKOS_FORCEINLINE_FUNCTION __attribute__((amp,cpu)) inline + #define KOKKOS_INLINE_FUNCTION __attribute__((amp,cpu)) inline + #define KOKKOS_FUNCTION __attribute__((amp,cpu)) + #define KOKKOS_LAMBDA [=] __attribute__((amp,cpu)) +#endif + +#if defined( _OPENMP ) + // Compiling with OpenMP. + // The value of _OPENMP is an integer value YYYYMM + // where YYYY and MM are the year and month designation + // of the supported OpenMP API version. +#endif // #if defined( _OPENMP ) //---------------------------------------------------------------------------- // Intel compiler macros @@ -320,7 +342,10 @@ #if defined( KOKKOS_ARCH_AVX512MIC ) #define KOKKOS_ENABLE_RFO_PREFETCH 1 - #endif + #if (KOKKOS_COMPILER_INTEL < 1800) && !defined(KOKKOS_KNL_USE_ASM_WORKAROUND) + #define KOKKOS_KNL_USE_ASM_WORKAROUND 1 + #endif + #endif #if defined( __MIC__ ) // Compiling for Xeon Phi @@ -386,6 +411,8 @@ #define KOKKOS_FORCEINLINE_FUNCTION inline __attribute__((always_inline)) #endif + #define KOKKOS_RESTRICT __restrict__ + #if !defined( KOKKOS_ENABLE_ASM ) && !defined( __PGIC__ ) && \ ( defined( __amd64 ) || defined( __amd64__ ) || \ defined( __x86_64 ) || defined( __x86_64__ ) || \ @@ -416,7 +443,7 @@ // Define function marking macros if compiler specific macros are undefined: #if !defined( KOKKOS_FORCEINLINE_FUNCTION ) - #define KOKKOS_FORCEINLINE_FUNCTION inline + define KOKKOS_FORCEINLINE_FUNCTION inline #endif #if !defined( KOKKOS_INLINE_FUNCTION ) @@ -427,6 +454,9 @@ #define KOKKOS_FUNCTION /**/ #endif +#if !defined( KOKKOS_INLINE_FUNCTION_DELETED ) + #define KOKKOS_INLINE_FUNCTION_DELETED inline +#endif //---------------------------------------------------------------------------- // Define empty macro for restrict if necessary: @@ -459,18 +489,20 @@ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP ) ? 1 : 0 ) + \ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS ) ? 1 : 0 ) + \ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) ? 1 : 0 ) + \ + ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) ? 1 : 0 ) + \ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL ) ? 1 : 0 ) ) #error "More than one KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_* specified." #endif // If default is not specified then chose from enabled execution spaces. -// Priority: CUDA, OPENMP, THREADS, QTHREADS, SERIAL +// Priority: CUDA, OPENMP, THREADS, QTHREADS, HPX, SERIAL #if defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS ) //#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) +#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL ) #elif defined( KOKKOS_ENABLE_CUDA ) #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA @@ -484,6 +516,8 @@ #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS //#elif defined( KOKKOS_ENABLE_QTHREADS ) // #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS +#elif defined( KOKKOS_ENABLE_HPX ) + #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX #else #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL #endif @@ -539,7 +573,27 @@ #define KOKKOS_IMPL_CTOR_DEFAULT_ARG KOKKOS_INVALID_INDEX #endif +#if (defined(KOKKOS_ENABLE_CXX14) || defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20)) + #define KOKKOS_CONSTEXPR_14 constexpr + #define KOKKOS_DEPRECATED [[deprecated]] + #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE +#else + #define KOKKOS_CONSTEXPR_14 + #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) + #define KOKKOS_DEPRECATED + #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE __attribute__ ((deprecated)) + #else + #define KOKKOS_DEPRECATED + #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE + #endif +#endif +// DJS 05/28/2019: Bugfix: Issue 2155 +// Use KOKKOS_ENABLE_CUDA_LDG_INTRINSIC to avoid memory leak in RandomAccess View +#if defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_CUDA_LDG_INTRINSIC) + #define KOKKOS_ENABLE_CUDA_LDG_INTRINSIC +#endif + #endif // #ifndef KOKKOS_MACROS_HPP diff --git a/lib/kokkos/core/src/Kokkos_MemoryPool.hpp b/lib/kokkos/core/src/Kokkos_MemoryPool.hpp index 157345c552..365db2baec 100644 --- a/lib/kokkos/core/src/Kokkos_MemoryPool.hpp +++ b/lib/kokkos/core/src/Kokkos_MemoryPool.hpp @@ -132,12 +132,18 @@ private: public: + using memory_space = typename DeviceType::memory_space; + /**\brief The maximum size of a superblock and block */ enum : uint32_t { max_superblock_size = 1LU << 31 /* 2 gigabytes */ }; enum : uint32_t { max_block_per_superblock = max_bit_count }; //-------------------------------------------------------------------------- + KOKKOS_INLINE_FUNCTION + bool operator==(MemoryPool const& other) const + { return m_sb_state_array == other.m_sb_state_array; } + KOKKOS_INLINE_FUNCTION size_t capacity() const noexcept { return size_t(m_sb_count) << m_sb_size_lg2 ; } diff --git a/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp b/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp index eebc83cf3d..509ac6499e 100644 --- a/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp +++ b/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp @@ -71,13 +71,18 @@ template < unsigned T > struct MemoryTraits { //! Tag this class as a kokkos memory traits: typedef MemoryTraits memory_traits ; - +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE enum : bool { Unmanaged = (unsigned(0) != (T & unsigned(Kokkos::Unmanaged))) }; enum : bool { RandomAccess = (unsigned(0) != (T & unsigned(Kokkos::RandomAccess))) }; enum : bool { Atomic = (unsigned(0) != (T & unsigned(Kokkos::Atomic))) }; enum : bool { Restrict = (unsigned(0) != (T & unsigned(Kokkos::Restrict))) }; enum : bool { Aligned = (unsigned(0) != (T & unsigned(Kokkos::Aligned))) }; - +#endif + enum : bool { is_unmanaged = (unsigned(0) != (T & unsigned(Kokkos::Unmanaged))) }; + enum : bool { is_random_access = (unsigned(0) != (T & unsigned(Kokkos::RandomAccess))) }; + enum : bool { is_atomic = (unsigned(0) != (T & unsigned(Kokkos::Atomic))) }; + enum : bool { is_restrict = (unsigned(0) != (T & unsigned(Kokkos::Restrict))) }; + enum : bool { is_aligned = (unsigned(0) != (T & unsigned(Kokkos::Aligned))) }; }; } // namespace Kokkos diff --git a/lib/kokkos/core/src/Kokkos_OpenMP.hpp b/lib/kokkos/core/src/Kokkos_OpenMP.hpp index ed4071a6da..6ee8f08dc8 100644 --- a/lib/kokkos/core/src/Kokkos_OpenMP.hpp +++ b/lib/kokkos/core/src/Kokkos_OpenMP.hpp @@ -107,8 +107,14 @@ public: /// \brief Wait until all dispatched functors complete on the given instance /// /// This is a no-op on OpenMP - inline + static void impl_static_fence( OpenMP const& = OpenMP() ) noexcept; + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence( OpenMP const& = OpenMP() ) noexcept; + #else + void fence() const; + #endif + /// \brief Does the given instance return immediately after launching /// a parallel algorithm diff --git a/lib/kokkos/core/src/Kokkos_Pair.hpp b/lib/kokkos/core/src/Kokkos_Pair.hpp index 1be763be85..ab0ab8152a 100644 --- a/lib/kokkos/core/src/Kokkos_Pair.hpp +++ b/lib/kokkos/core/src/Kokkos_Pair.hpp @@ -528,6 +528,15 @@ KOKKOS_FORCEINLINE_FUNCTION constexpr bool operator>= (const pair& lhs, const pair& rhs) { return !(lhs struct is_pair_like : std::false_type { }; +template struct is_pair_like> : std::true_type { }; +template struct is_pair_like> : std::true_type { }; + +} // end namespace Impl + } // namespace Kokkos diff --git a/lib/kokkos/core/src/Kokkos_Parallel.hpp b/lib/kokkos/core/src/Kokkos_Parallel.hpp index b095f5728e..09dcf60b11 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel.hpp @@ -525,7 +525,7 @@ void parallel_scan( const ExecutionPolicy & policy Kokkos::Profiling::endParallelScan(kpID); } #endif - + Kokkos::fence(); } template< class FunctorType, class ReturnType > @@ -560,7 +560,7 @@ void parallel_scan( const size_t work_count Kokkos::Profiling::endParallelScan(kpID); } #endif - + Kokkos::fence(); } template< class ExecutionPolicy, class FunctorType, class ReturnType > diff --git a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp index 06aaa6546e..36bc6e4153 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp @@ -69,18 +69,19 @@ public: typedef Sum reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Sum(value_type& value_): value(&value_) {} + Sum(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Sum(const result_view_type& value_): value(value_.data()) {} + Sum(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -100,12 +101,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -116,18 +122,19 @@ public: typedef Prod reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Prod(value_type& value_): value(&value_) {} + Prod(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Prod(const result_view_type& value_): value(value_.data()) {} + Prod(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -147,12 +154,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -163,18 +175,19 @@ public: typedef Min reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Min(value_type& value_): value(&value_) {} + Min(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Min(const result_view_type& value_): value(value_.data()) {} + Min(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -196,12 +209,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -212,18 +230,19 @@ public: typedef Max reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Max(value_type& value_): value(&value_) {} + Max(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Max(const result_view_type& value_): value(value_.data()) {} + Max(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -246,12 +265,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -262,18 +286,19 @@ public: typedef LAnd reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - LAnd(value_type& value_): value(&value_) {} + LAnd(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - LAnd(const result_view_type& value_): value(value_.data()) {} + LAnd(const result_view_type& value_): value(value_),references_scalar_v(false) {} KOKKOS_INLINE_FUNCTION void join(value_type& dest, const value_type& src) const { @@ -292,12 +317,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -308,18 +338,19 @@ public: typedef LOr reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - LOr(value_type& value_): value(&value_) {} + LOr(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - LOr(const result_view_type& value_): value(value_.data()) {} + LOr(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -339,12 +370,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -355,18 +391,19 @@ public: typedef BAnd reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - BAnd(value_type& value_): value(&value_) {} + BAnd(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - BAnd(const result_view_type& value_): value(value_.data()) {} + BAnd(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -386,12 +423,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -402,18 +444,19 @@ public: typedef BOr reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - BOr(value_type& value_): value(&value_) {} + BOr(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - BOr(const result_view_type& value_): value(value_.data()) {} + BOr(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -433,12 +476,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -471,18 +519,19 @@ public: typedef MinLoc reducer; typedef ValLocScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MinLoc(value_type& value_): value(&value_) {} + MinLoc(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MinLoc(const result_view_type& value_): value(value_.data()) {} + MinLoc(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required @@ -506,12 +555,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -526,18 +580,19 @@ public: typedef MaxLoc reducer; typedef ValLocScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MaxLoc(value_type& value_): value(&value_) {} + MaxLoc(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MaxLoc(const result_view_type& value_): value(value_.data()) {} + MaxLoc(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -560,12 +615,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -596,18 +656,19 @@ public: typedef MinMax reducer; typedef MinMaxScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MinMax(value_type& value_): value(&value_) {} + MinMax(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MinMax(const result_view_type& value_): value(value_.data()) {} + MinMax(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -638,12 +699,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -680,18 +746,19 @@ public: typedef MinMaxLoc reducer; typedef MinMaxLocScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MinMaxLoc(value_type& value_): value(&value_) {} + MinMaxLoc(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MinMaxLoc(const result_view_type& value_): value(value_.data()) {} + MinMaxLoc(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -728,12 +795,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; } @@ -813,7 +885,7 @@ struct ParallelReduceReturnValue + struct ReducerHasTestReferenceFunction + { + template static std::true_type test_func( decltype(&E::references_scalar) ) ; + template static std::false_type test_func(...); + + enum { value = std::is_same(0))>::value }; + }; + + template::value> + struct ParallelReduceFence { + static void fence(const T&) { + Kokkos::fence(); + } + }; + template + struct ParallelReduceFence, false> { + static void fence(const View) {}; + }; + template + struct ParallelReduceFence { + static void fence(const T& reducer) { + if(reducer.references_scalar()) + Kokkos::fence(); + } + }; +} + /** \brief Parallel reduction * * parallel_reduce performs parallel reductions with arbitrary functions - i.e. @@ -959,6 +1062,7 @@ void parallel_reduce(const std::string& label, Kokkos::Impl::is_execution_policy::value >::type * = 0) { Impl::ParallelReduceAdaptor::execute(label,policy,functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } template< class PolicyType, class FunctorType, class ReturnType > @@ -970,6 +1074,7 @@ void parallel_reduce(const PolicyType& policy, Kokkos::Impl::is_execution_policy::value >::type * = 0) { Impl::ParallelReduceAdaptor::execute("",policy,functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -979,6 +1084,7 @@ void parallel_reduce(const size_t& policy, ReturnType& return_value) { typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; Impl::ParallelReduceAdaptor::execute("",policy_type(0,policy),functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -989,6 +1095,7 @@ void parallel_reduce(const std::string& label, ReturnType& return_value) { typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; Impl::ParallelReduceAdaptor::execute(label,policy_type(0,policy),functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } // ReturnValue as View or Reducer: take by copy to allow for inline construction @@ -1004,6 +1111,7 @@ void parallel_reduce(const std::string& label, >::type * = 0) { ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute(label,policy,functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } template< class PolicyType, class FunctorType, class ReturnType > @@ -1016,6 +1124,7 @@ void parallel_reduce(const PolicyType& policy, >::type * = 0) { ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute("",policy,functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -1026,6 +1135,7 @@ void parallel_reduce(const size_t& policy, typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute("",policy_type(0,policy),functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -1037,6 +1147,7 @@ void parallel_reduce(const std::string& label, typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute(label,policy_type(0,policy),functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } // No Return Argument diff --git a/lib/kokkos/core/src/Kokkos_PointerOwnership.hpp b/lib/kokkos/core/src/Kokkos_PointerOwnership.hpp new file mode 100644 index 0000000000..be76ec3def --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_PointerOwnership.hpp @@ -0,0 +1,74 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_POINTEROWNERSHIP_HPP +#define KOKKOS_IMPL_POINTEROWNERSHIP_HPP + +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +/// Trivial wrapper for raw pointers that express ownership. +template +using OwningRawPtr = T*; + +/// Trivial wrapper for raw pointers that do not express ownership. +template +using ObservingRawPtr = T*; + +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + + +#endif /* #ifndef KOKKOS_IMPL_POINTEROWNERSHIP_HPP */ + diff --git a/lib/kokkos/core/src/Kokkos_ROCm.hpp b/lib/kokkos/core/src/Kokkos_ROCm.hpp index 469d6b2787..96207e73c6 100644 --- a/lib/kokkos/core/src/Kokkos_ROCm.hpp +++ b/lib/kokkos/core/src/Kokkos_ROCm.hpp @@ -140,7 +140,14 @@ public: static bool wake() ; /** \brief Wait until all dispatched functors complete. A noop for OpenMP. */ - static void fence() ; + static void impl_static_fence(); + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE + static void fence(); + #else + void fence() const; + #endif + /// \brief Print configuration information to the given output stream. static void print_configuration( std::ostream & , const bool detail = false ); diff --git a/lib/kokkos/core/src/Kokkos_Serial.hpp b/lib/kokkos/core/src/Kokkos_Serial.hpp index 01701e53a2..5821b0c0c5 100644 --- a/lib/kokkos/core/src/Kokkos_Serial.hpp +++ b/lib/kokkos/core/src/Kokkos_Serial.hpp @@ -118,10 +118,16 @@ public: /// return asynchronously, before the functor completes. This /// method does not return until all dispatched functors on this /// device have completed. + static void impl_static_fence() {} + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence() {} + #else + void fence() const {} + #endif /** \brief Return the maximum amount of concurrency. */ - static int concurrency() {return 1;}; + static int concurrency() {return 1;} //! Print configuration information to the given output stream. static void print_configuration( std::ostream & , const bool /* detail */ = false ) {} @@ -261,6 +267,20 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + + //---------------------------------------- #ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > @@ -302,7 +322,7 @@ public: 20*1024*1024); } /** \brief Specify league size, request team size */ - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space & , int league_size_request #ifndef KOKKOS_ENABLE_DEPRECATED_CODE , int team_size_request @@ -320,7 +340,7 @@ public: #endif } - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space & , int league_size_request , const Kokkos::AUTO_t & /* team_size_request */ , int /* vector_length_request */ = 1 ) diff --git a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp index 5045e9cbbc..1c3d58af08 100644 --- a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp +++ b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp @@ -50,393 +50,203 @@ #if defined( KOKKOS_ENABLE_TASKDAG ) #include +#include //---------------------------------------------------------------------------- #include #include -//---------------------------------------------------------------------------- - -namespace Kokkos { - -// Forward declarations used in Impl::TaskQueue - -template< typename Arg1 = void , typename Arg2 = void > -class Future ; - -template< typename Space > -class TaskScheduler ; - -template< typename Space > -void wait( TaskScheduler< Space > const & ); - -template< typename Space > -struct is_scheduler : public std::false_type {}; - -template< typename Space > -struct is_scheduler< TaskScheduler< Space > > : public std::true_type {}; - -} // namespace Kokkos - +#include #include +#include +#include +#include +#include +#include //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- namespace Kokkos { + namespace Impl { -/*\brief Implementation data for task data management, access, and execution. - * - * CRTP Inheritance structure to allow static_cast from the - * task root type and a task's FunctorType. - * - * TaskBase< Space , ResultType , FunctorType > - * : TaskBase< Space , ResultType , void > - * , FunctorType - * { ... }; - * - * TaskBase< Space , ResultType , void > - * : TaskBase< Space , void , void > - * { ... }; - */ -template< typename Space , typename ResultType , typename FunctorType > -class TaskBase ; +template +class TaskExec; -} // namespace Impl -} // namespace Kokkos +} // end namespace Impl -//---------------------------------------------------------------------------- - -namespace Kokkos { - -/** - * - * Future< space > // value_type == void - * Future< value > // space == Default - * Future< value , space > - * - */ -template< typename Arg1 , typename Arg2 > -class Future { -private: - - template< typename > friend class TaskScheduler ; - template< typename , typename > friend class Future ; - template< typename , typename , typename > friend class Impl::TaskBase ; - - enum { Arg1_is_space = Kokkos::is_space< Arg1 >::value }; - enum { Arg2_is_space = Kokkos::is_space< Arg2 >::value }; - enum { Arg1_is_value = ! Arg1_is_space && - ! std::is_same< Arg1 , void >::value }; - enum { Arg2_is_value = ! Arg2_is_space && - ! std::is_same< Arg2 , void >::value }; - - static_assert( ! ( Arg1_is_space && Arg2_is_space ) - , "Future cannot be given two spaces" ); - - static_assert( ! ( Arg1_is_value && Arg2_is_value ) - , "Future cannot be given two value types" ); - - using ValueType = - typename std::conditional< Arg1_is_value , Arg1 , - typename std::conditional< Arg2_is_value , Arg2 , void - >::type >::type ; - - using Space = - typename std::conditional< Arg1_is_space , Arg1 , - typename std::conditional< Arg2_is_space , Arg2 , void - >::type >::type ; - - using task_base = Impl::TaskBase< void , void , void > ; - using queue_type = Impl::TaskQueue< Space > ; - - task_base * m_task ; - - KOKKOS_INLINE_FUNCTION explicit - Future( task_base * task ) : m_task(0) - { if ( task ) queue_type::assign( & m_task , task ); } - - //---------------------------------------- +template +class BasicTaskScheduler : public Impl::TaskSchedulerBase +{ public: - using execution_space = typename Space::execution_space ; - using value_type = ValueType ; + using scheduler_type = BasicTaskScheduler; + using execution_space = ExecSpace; + using queue_type = QueueType; + using memory_space = typename queue_type::memory_space; + using memory_pool = typename queue_type::memory_pool; + using specialization = Impl::TaskQueueSpecialization; + using member_type = typename specialization::member_type; + using team_scheduler_type = BasicTaskScheduler; + template + using runnable_task_type = Impl::Task; + template + using future_type = Kokkos::BasicFuture; + template + using future_type_for_functor = future_type; - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - bool is_null() const { return 0 == m_task ; } - - KOKKOS_INLINE_FUNCTION - int reference_count() const - { return 0 != m_task ? m_task->reference_count() : 0 ; } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - void clear() - { if ( m_task ) queue_type::assign( & m_task , (task_base*)0 ); } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - ~Future() { clear(); } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - constexpr Future() noexcept : m_task(0) {} - - KOKKOS_INLINE_FUNCTION - Future( Future && rhs ) - : m_task( rhs.m_task ) { rhs.m_task = 0 ; } - - KOKKOS_INLINE_FUNCTION - Future( const Future & rhs ) - : m_task(0) - { if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); } - - KOKKOS_INLINE_FUNCTION - Future & operator = ( Future && rhs ) - { - clear(); - m_task = rhs.m_task ; - rhs.m_task = 0 ; - return *this ; - } - - KOKKOS_INLINE_FUNCTION - Future & operator = ( const Future & rhs ) - { - if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); - return *this ; - } - - //---------------------------------------- - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future( Future && rhs ) - : m_task( rhs.m_task ) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - rhs.m_task = 0 ; - } - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future( const Future & rhs ) - : m_task(0) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); - } - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future & operator = ( const Future & rhs ) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); - return *this ; - } - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future & operator = ( Future && rhs ) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - clear(); - m_task = rhs.m_task ; - rhs.m_task = 0 ; - return *this ; - } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - int is_ready() const noexcept - { return ( 0 == m_task ) || ( ((task_base*) task_base::LockTag) == m_task->m_wait ); } - - KOKKOS_INLINE_FUNCTION - const typename Impl::TaskResult< ValueType >::reference_type - get() const - { - if ( 0 == m_task ) { - Kokkos::abort( "Kokkos:::Future::get ERROR: is_null()"); - } - return Impl::TaskResult< ValueType >::get( m_task ); - } -}; - -// Is a Future with the given execution space -template< typename , typename ExecSpace = void > -struct is_future : public std::false_type {}; - -template< typename Arg1 , typename Arg2 , typename ExecSpace > -struct is_future< Future , ExecSpace > - : public std::integral_constant - < bool , - ( std::is_same< ExecSpace , void >::value || - std::is_same< ExecSpace - , typename Future::execution_space >::value ) - > {}; - -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { - -enum class TaskPriority : int { High = 0 - , Regular = 1 - , Low = 2 }; - -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -//---------------------------------------------------------------------------- - -template< int TaskEnum , typename DepFutureType > -struct TaskPolicyData -{ - using execution_space = typename DepFutureType::execution_space ; - using scheduler_type = TaskScheduler< execution_space > ; - - enum : int { m_task_type = TaskEnum }; - - scheduler_type const * m_scheduler ; - DepFutureType const m_dependence ; - int m_priority ; - - TaskPolicyData() = delete ; - TaskPolicyData( TaskPolicyData && ) = default ; - TaskPolicyData( TaskPolicyData const & ) = default ; - TaskPolicyData & operator = ( TaskPolicyData && ) = default ; - TaskPolicyData & operator = ( TaskPolicyData const & ) = default ; - - KOKKOS_INLINE_FUNCTION - TaskPolicyData( DepFutureType const & arg_future - , Kokkos::TaskPriority const & arg_priority ) - : m_scheduler( 0 ) - , m_dependence( arg_future ) - , m_priority( static_cast( arg_priority ) ) - {} - - KOKKOS_INLINE_FUNCTION - TaskPolicyData( scheduler_type const & arg_scheduler - , Kokkos::TaskPriority const & arg_priority ) - : m_scheduler( & arg_scheduler ) - , m_dependence() - , m_priority( static_cast( arg_priority ) ) - {} - - KOKKOS_INLINE_FUNCTION - TaskPolicyData( scheduler_type const & arg_scheduler - , DepFutureType const & arg_future - , Kokkos::TaskPriority const & arg_priority ) - : m_scheduler( & arg_scheduler ) - , m_dependence( arg_future ) - , m_priority( static_cast( arg_priority ) ) - {} -}; - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { - -template< typename ExecSpace > -class TaskScheduler -{ private: using track_type = Kokkos::Impl::SharedAllocationTracker ; - using queue_type = Kokkos::Impl::TaskQueue< ExecSpace > ; - using task_base = Impl::TaskBase< void , void , void > ; + using task_base = Impl::TaskBase; - track_type m_track ; - queue_type * m_queue ; + track_type m_track; + queue_type * m_queue; //---------------------------------------- + template + friend class Impl::TaskQueue; + template + friend struct Impl::TaskQueueSpecialization; + template + friend class Impl::TaskQueueSpecializationConstrained; + template + friend class Impl::TaskTeamMemberAdapter; + template + friend class Impl::TaskExec; + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + BasicTaskScheduler( + track_type arg_track, + queue_type* arg_queue + ) + : m_track(std::move(arg_track)), + m_queue(std::move(arg_queue)) + { } + + KOKKOS_INLINE_FUNCTION + team_scheduler_type get_team_scheduler(int team_rank) const { + return { m_track, &m_queue->get_team_queue(team_rank) }; + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + static constexpr task_base* _get_task_ptr(std::nullptr_t) { return nullptr; } + + template + KOKKOS_INLINE_FUNCTION + static constexpr task_base* _get_task_ptr(future_type&& f) + { + return f.m_task; + } + + template< int TaskEnum , typename DepTaskType , typename FunctorType > + KOKKOS_FUNCTION + Kokkos::BasicFuture + _spawn_impl( + DepTaskType* arg_predecessor_task, + TaskPriority arg_priority, + typename task_base::function_type arg_function, + typename task_base::destroy_type arg_destroy, + FunctorType&& arg_functor + ) + { + using functor_future_type = future_type_for_functor::type>; + using task_type = Impl::Task; + + //---------------------------------------- + // Give single-thread back-ends an opportunity to clear + // queue of ready tasks before allocating a new task + + // TODO @tasking @optimization DSH re-enable this, maybe? + // specialization::iff_single_thread_recursive_execute(scheduler); + + //---------------------------------------- + + functor_future_type f ; + + // Allocate task from memory pool + + const size_t alloc_size = + m_queue->template spawn_allocation_size< FunctorType >(); + + void* task_storage = m_queue->allocate(alloc_size); + + if (task_storage) { + + // Placement new construction + // Reference count starts at two: + // +1 for the matching decrement when task is complete + // +1 for the future + f.m_task = new (task_storage) task_type( std::forward(arg_functor) ); + + f.m_task->m_apply = arg_function; + //f.m_task->m_destroy = arg_destroy; + f.m_task->m_queue = m_queue; + f.m_task->m_next = arg_predecessor_task; + f.m_task->m_ref_count = 2; + f.m_task->m_alloc_size = alloc_size; + f.m_task->m_task_type = TaskEnum; + f.m_task->m_priority = (int16_t)arg_priority; + + Kokkos::memory_fence(); + + // The dependence (if any) is processed immediately + // within the schedule function, as such the dependence's + // reference count does not need to be incremented for + // the assignment. + + m_queue->schedule_runnable( f.m_task ); + // This task may be updated or executed at any moment, + // even during the call to 'schedule'. + } + + return f; + + } + public: - using execution_space = ExecSpace ; - using memory_space = typename queue_type::memory_space ; - using memory_pool = typename queue_type::memory_pool ; - using member_type = - typename Kokkos::Impl::TaskQueueSpecialization< ExecSpace >::member_type ; KOKKOS_INLINE_FUNCTION - TaskScheduler() : m_track(), m_queue(0) {} + BasicTaskScheduler() : m_track(), m_queue(0) {} KOKKOS_INLINE_FUNCTION - TaskScheduler( TaskScheduler && rhs ) - : m_track( rhs.m_track ), m_queue( rhs.m_queue ) {} + BasicTaskScheduler( BasicTaskScheduler && rhs ) noexcept + : m_track(rhs.m_track), // probably should be a move, but this is deprecated code anyway + m_queue(std::move(rhs.m_queue)) + { } KOKKOS_INLINE_FUNCTION - TaskScheduler( TaskScheduler const & rhs ) - : m_track( rhs.m_track ), m_queue( rhs.m_queue ) {} + BasicTaskScheduler( BasicTaskScheduler const & rhs ) + : m_track(rhs.m_track), + m_queue(rhs.m_queue) + { } KOKKOS_INLINE_FUNCTION - TaskScheduler & operator = ( TaskScheduler && rhs ) - { m_track = rhs.m_track ; m_queue = rhs.m_queue ; return *this ; } + BasicTaskScheduler& operator=(BasicTaskScheduler&& rhs) noexcept + { + m_track = rhs.m_track; // probably should be a move, but this is deprecated code anyway + m_queue = std::move(rhs.m_queue); + return *this; + } KOKKOS_INLINE_FUNCTION - TaskScheduler & operator = ( TaskScheduler const & rhs ) - { m_track = rhs.m_track ; m_queue = rhs.m_queue ; return *this ; } + BasicTaskScheduler& operator=(BasicTaskScheduler const& rhs) + { + m_track = rhs.m_track; + m_queue = rhs.m_queue; + return *this; + } - TaskScheduler( memory_pool const & arg_memory_pool ) - : m_track() - , m_queue(0) + explicit BasicTaskScheduler(memory_pool const & arg_memory_pool) noexcept + : m_track(), m_queue(0) { typedef Kokkos::Impl::SharedAllocationRecord < memory_space , typename queue_type::Destroy > @@ -455,13 +265,13 @@ public: m_track.assign_allocated_record_to_uninitialized( record ); } - TaskScheduler( memory_space const & arg_memory_space + BasicTaskScheduler( memory_space const & arg_memory_space , size_t const mempool_capacity , unsigned const mempool_min_block_size // = 1u << 6 , unsigned const mempool_max_block_size // = 1u << 10 , unsigned const mempool_superblock_size // = 1u << 12 ) - : TaskScheduler( memory_pool( arg_memory_space + : BasicTaskScheduler( memory_pool( arg_memory_space , mempool_capacity , mempool_min_block_size , mempool_max_block_size @@ -470,6 +280,12 @@ public: //---------------------------------------- + KOKKOS_INLINE_FUNCTION + queue_type& queue() const noexcept { + KOKKOS_EXPECTS(m_queue != nullptr); + return *m_queue; + } + KOKKOS_INLINE_FUNCTION memory_pool * memory() const noexcept { return m_queue ? &( m_queue->m_memory ) : (memory_pool*) 0 ; } @@ -486,216 +302,173 @@ public: size_t when_all_allocation_size( int narg ) const { return m_queue->when_all_allocation_size( narg ); } + //---------------------------------------- - template< int TaskEnum , typename DepFutureType , typename FunctorType > + template KOKKOS_FUNCTION static - Kokkos::Future< typename FunctorType::value_type , execution_space > - spawn( Impl::TaskPolicyData const & arg_policy - , typename task_base::function_type arg_function - , FunctorType && arg_functor - ) - { - using value_type = typename FunctorType::value_type ; - using future_type = Future< value_type , execution_space > ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + Kokkos::BasicFuture + spawn( + Impl::TaskPolicyWithScheduler&& arg_policy, + typename task_base::function_type arg_function, + typename task_base::destroy_type arg_destroy, + FunctorType&& arg_functor + ) + { + return std::move(arg_policy.scheduler()).template _spawn_impl( + _get_task_ptr(std::move(arg_policy.predecessor())), + arg_policy.priority(), + arg_function, + arg_destroy, + std::forward(arg_functor) + ); + } - queue_type * const queue = - arg_policy.m_scheduler ? arg_policy.m_scheduler->m_queue : ( - arg_policy.m_dependence.m_task - ? static_cast(arg_policy.m_dependence.m_task->m_queue) - : (queue_type*) 0 ); + template + KOKKOS_FUNCTION + future_type_for_functor::type> + spawn( + Impl::TaskPolicyWithPredecessor&& arg_policy, + FunctorType&& arg_functor + ) + { + using task_type = runnable_task_type; + typename task_type::function_type const ptr = task_type::apply; + typename task_type::destroy_type const dtor = task_type::destroy; - if ( 0 == queue ) { - Kokkos::abort("Kokkos spawn requires scheduler or non-null Future"); - } + return _spawn_impl( + _get_task_ptr(std::move(arg_policy).predecessor()), + arg_policy.priority(), + ptr, dtor, + std::forward(arg_functor) + ); + } - if ( arg_policy.m_dependence.m_task != 0 && - arg_policy.m_dependence.m_task->m_queue != queue ) { - Kokkos::abort("Kokkos spawn given incompatible scheduler and Future"); - } - - //---------------------------------------- - // Give single-thread back-ends an opportunity to clear - // queue of ready tasks before allocating a new task - - queue->iff_single_thread_recursive_execute(); - - //---------------------------------------- - - future_type f ; - - // Allocate task from memory pool - - const size_t alloc_size = - queue->template spawn_allocation_size< FunctorType >(); - - f.m_task = - reinterpret_cast< task_type * >(queue->allocate(alloc_size) ); - - if ( f.m_task ) { - - // Placement new construction - // Reference count starts at two: - // +1 for the matching decrement when task is complete - // +1 for the future - new ( f.m_task ) task_type( std::move(arg_functor) ); - - f.m_task->m_apply = arg_function ; - f.m_task->m_queue = queue ; - f.m_task->m_next = arg_policy.m_dependence.m_task ; - f.m_task->m_ref_count = 2 ; - f.m_task->m_alloc_size = alloc_size ; - f.m_task->m_task_type = arg_policy.m_task_type ; - f.m_task->m_priority = arg_policy.m_priority ; - - Kokkos::memory_fence(); - - // The dependence (if any) is processed immediately - // within the schedule function, as such the dependence's - // reference count does not need to be incremented for - // the assignment. - - queue->schedule_runnable( f.m_task ); - // This task may be updated or executed at any moment, - // even during the call to 'schedule'. - } - - return f ; - } - - template< typename FunctorType , typename A1 , typename A2 > + template KOKKOS_FUNCTION static void - respawn( FunctorType * arg_self - , Future const & arg_dependence - , TaskPriority const & arg_priority - ) - { - // Precondition: task is in Executing state + respawn( + FunctorType* arg_self, + BasicFuture const & arg_dependence, + TaskPriority const & arg_priority + ) { + // Precondition: task is in Executing state - using value_type = typename FunctorType::value_type ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + using value_type = typename FunctorType::value_type ; + using task_type = Impl::Task; - task_type * const task = static_cast< task_type * >( arg_self ); + task_type * const task = static_cast< task_type * >( arg_self ); - task->m_priority = static_cast(arg_priority); + task->m_priority = static_cast(arg_priority); - task->add_dependence( arg_dependence.m_task ); + task->add_dependence( arg_dependence.m_task ); - // Postcondition: task is in Executing-Respawn state - } + // Postcondition: task is in Executing-Respawn state + } template< typename FunctorType > KOKKOS_FUNCTION static void - respawn( FunctorType * arg_self - , TaskScheduler const & - , TaskPriority const & arg_priority - ) - { - // Precondition: task is in Executing state + respawn( + FunctorType* arg_self, + BasicTaskScheduler const &, + TaskPriority const & arg_priority + ) + { + // Precondition: task is in Executing state - using value_type = typename FunctorType::value_type ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + using value_type = typename FunctorType::value_type; + using task_type = Impl::Task; - task_type * const task = static_cast< task_type * >( arg_self ); + task_type * const task = static_cast< task_type * >( arg_self ); - task->m_priority = static_cast(arg_priority); + task->m_priority = static_cast(arg_priority); - task->add_dependence( (task_base*) 0 ); + task->add_dependence( (task_base*) 0 ); - // Postcondition: task is in Executing-Respawn state - } + // Postcondition: task is in Executing-Respawn state + } //---------------------------------------- /**\brief Return a future that is complete * when all input futures are complete. */ - template< typename A1 , typename A2 > - KOKKOS_FUNCTION static - Future< execution_space > - when_all( Future< A1 , A2 > const arg[] , int narg ) - { - using future_type = Future< execution_space > ; + template + KOKKOS_FUNCTION + BasicFuture< void, scheduler_type > + when_all(BasicFuture const arg[], int narg) + { - future_type f ; + future_type f ; - if ( narg ) { + if ( narg ) { - queue_type * queue = 0 ; + queue_type* q = m_queue; - for ( int i = 0 ; i < narg ; ++i ) { - task_base * const t = arg[i].m_task ; - if ( 0 != t ) { - // Increment reference count to track subsequent assignment. - Kokkos::atomic_increment( &(t->m_ref_count) ); - if ( queue == 0 ) { - queue = static_cast< queue_type * >( t->m_queue ); - } - else if ( queue != static_cast< queue_type * >( t->m_queue ) ) { - Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); - } - } - } + //BasicTaskScheduler const* scheduler_ptr = nullptr; - if ( queue != 0 ) { - - size_t const alloc_size = queue->when_all_allocation_size( narg ); - - f.m_task = - reinterpret_cast< task_base * >( queue->allocate( alloc_size ) ); - - if ( f.m_task ) { - - // Reference count starts at two: - // +1 to match decrement when task completes - // +1 for the future - - new( f.m_task ) task_base(); - - f.m_task->m_queue = queue ; - f.m_task->m_ref_count = 2 ; - f.m_task->m_alloc_size = alloc_size ; - f.m_task->m_dep_count = narg ; - f.m_task->m_task_type = task_base::Aggregate ; - - // Assign dependences, reference counts were already incremented - - task_base * volatile * const dep = - f.m_task->aggregate_dependences(); - - for ( int i = 0 ; i < narg ; ++i ) { dep[i] = arg[i].m_task ; } - - Kokkos::memory_fence(); - - queue->schedule_aggregate( f.m_task ); - // this when_all may be processed at any moment + for ( int i = 0 ; i < narg ; ++i ) { + task_base * const t = arg[i].m_task ; + if ( nullptr != t ) { + // Increment reference count to track subsequent assignment. + Kokkos::atomic_increment( &(t->m_ref_count) ); + if(q != static_cast< queue_type const* >(t->m_queue)) { + Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); } } } - return f ; + if ( q != 0 ) { // this should probably handle the queue == 0 case, but this is deprecated code anyway + + size_t const alloc_size = q->when_all_allocation_size( narg ); + + f.m_task = + reinterpret_cast< task_base * >( q->allocate( alloc_size ) ); + //f.m_scheduler = *scheduler_ptr; + + if ( f.m_task ) { + + // Reference count starts at two: + // +1 to match decrement when task completes + // +1 for the future + + new( f.m_task ) task_base(); + + f.m_task->m_queue = q; + f.m_task->m_ref_count = 2 ; + f.m_task->m_alloc_size = static_cast(alloc_size); + f.m_task->m_dep_count = narg ; + f.m_task->m_task_type = task_base::Aggregate ; + + // Assign dependences, reference counts were already incremented + + task_base * volatile * const dep = + f.m_task->aggregate_dependences(); + + for ( int i = 0 ; i < narg ; ++i ) { dep[i] = arg[i].m_task ; } + + Kokkos::memory_fence(); + + q->schedule_aggregate( f.m_task ); + // this when_all may be processed at any moment + } + } } + return f ; + } + template < class F > KOKKOS_FUNCTION - Future< execution_space > + BasicFuture< void, scheduler_type > when_all( int narg , F const func ) { using input_type = decltype( func(0) ); - using future_type = Future< execution_space > ; static_assert( is_future< input_type >::value , "Functor must return a Kokkos::Future" ); - future_type f ; + future_type f ; if ( 0 == narg ) return f ; @@ -711,12 +484,16 @@ public: // +1 for the future new( f.m_task ) task_base(); + //f.m_scheduler = *this; - f.m_task->m_queue = m_queue ; - f.m_task->m_ref_count = 2 ; - f.m_task->m_alloc_size = alloc_size ; - f.m_task->m_dep_count = narg ; - f.m_task->m_task_type = task_base::Aggregate ; + //f.m_task->m_scheduler = &f.m_scheduler; + f.m_task->m_queue = m_queue; + f.m_task->m_ref_count = 2 ; + f.m_task->m_alloc_size = static_cast(alloc_size); + f.m_task->m_dep_count = narg ; + f.m_task->m_task_type = task_base::Aggregate ; + //f.m_task->m_apply = nullptr; + //f.m_task->m_destroy = nullptr; // Assign dependences, reference counts were already incremented @@ -727,9 +504,10 @@ public: const input_type arg_f = func(i); if ( 0 != arg_f.m_task ) { - if ( m_queue != static_cast< queue_type * >( arg_f.m_task->m_queue ) ) { - Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); - } + // Not scheduled, so task scheduler is not yet set + //if ( m_queue != static_cast< BasicTaskScheduler const * >( arg_f.m_task->m_scheduler )->m_queue ) { + // Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); + //} // Increment reference count to track subsequent assignment. Kokkos::atomic_increment( &(arg_f.m_task->m_ref_count) ); dep[i] = arg_f.m_task ; @@ -764,9 +542,9 @@ public: //---------------------------------------- - template< typename S > + template friend - void Kokkos::wait( Kokkos::TaskScheduler< S > const & ); + void wait(Kokkos::BasicTaskScheduler const&); }; @@ -780,84 +558,122 @@ namespace Kokkos { //---------------------------------------------------------------------------- // Construct a TaskTeam execution policy -template< typename T > -Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskTeam - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - > +template +Impl::TaskPolicyWithPredecessor< + Impl::TaskType::TaskTeam, + Kokkos::BasicFuture +> KOKKOS_INLINE_FUNCTION -TaskTeam( T const & arg - , TaskPriority const & arg_priority = TaskPriority::Regular - ) +TaskTeam( + Kokkos::BasicFuture arg_future, + TaskPriority arg_priority = TaskPriority::Regular +) { - static_assert( Kokkos::is_future::value || - Kokkos::is_scheduler::value - , "Kokkos TaskTeam argument must be Future or TaskScheduler" ); - - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskTeam - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - >( arg , arg_priority ); + return { std::move(arg_future), arg_priority }; } -template< typename E , typename F > -Kokkos::Impl:: - TaskPolicyData< Kokkos::Impl::TaskBase::TaskTeam , F > +template +Impl::TaskPolicyWithScheduler< + Impl::TaskType::TaskTeam, Scheduler +> KOKKOS_INLINE_FUNCTION -TaskTeam( TaskScheduler const & arg_scheduler - , F const & arg_future - , typename std::enable_if< Kokkos::is_future::value , - TaskPriority >::type const & arg_priority = TaskPriority::Regular - ) +TaskTeam( + Scheduler arg_scheduler, + typename std::enable_if< + Kokkos::is_scheduler::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) { - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskTeam , F > - ( arg_scheduler , arg_future , arg_priority ); + return { std::move(arg_scheduler), arg_priority }; +} + +template< + class Scheduler, + class PredecessorFuture +> +Impl::TaskPolicyWithScheduler< + Kokkos::Impl::TaskType::TaskTeam, + Scheduler, + PredecessorFuture +> +KOKKOS_INLINE_FUNCTION +TaskTeam( + Scheduler arg_scheduler, + PredecessorFuture arg_future, + typename std::enable_if< + Kokkos::is_scheduler::value + && Kokkos::is_future::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) +{ + static_assert( + std::is_same::value, + "Can't create a task policy from a scheduler and a future from a different scheduler" + ); + + return { std::move(arg_scheduler), std::move(arg_future), arg_priority }; } // Construct a TaskSingle execution policy -template< typename T > -Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskSingle - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - > +template +Impl::TaskPolicyWithPredecessor< + Impl::TaskType::TaskSingle, + Kokkos::BasicFuture +> KOKKOS_INLINE_FUNCTION -TaskSingle( T const & arg - , TaskPriority const & arg_priority = TaskPriority::Regular - ) +TaskSingle( + Kokkos::BasicFuture arg_future, + TaskPriority arg_priority = TaskPriority::Regular +) { - static_assert( Kokkos::is_future::value || - Kokkos::is_scheduler::value - , "Kokkos TaskSingle argument must be Future or TaskScheduler" ); - - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskSingle - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - >( arg , arg_priority ); + return { std::move(arg_future), arg_priority }; } -template< typename E , typename F > -Kokkos::Impl:: - TaskPolicyData< Kokkos::Impl::TaskBase::TaskSingle , F > +template +Impl::TaskPolicyWithScheduler< + Impl::TaskType::TaskSingle, Scheduler +> KOKKOS_INLINE_FUNCTION -TaskSingle( TaskScheduler const & arg_scheduler - , F const & arg_future - , typename std::enable_if< Kokkos::is_future::value , - TaskPriority >::type const & arg_priority = TaskPriority::Regular - ) +TaskSingle( + Scheduler arg_scheduler, + typename std::enable_if< + Kokkos::is_scheduler::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) { - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskSingle , F > - ( arg_scheduler , arg_future , arg_priority ); + return { std::move(arg_scheduler), arg_priority }; +} + +template< + class Scheduler, + class PredecessorFuture +> +Impl::TaskPolicyWithScheduler< + Kokkos::Impl::TaskType::TaskSingle, + Scheduler, + PredecessorFuture +> +KOKKOS_INLINE_FUNCTION +TaskSingle( + Scheduler arg_scheduler, + PredecessorFuture arg_future, + typename std::enable_if< + Kokkos::is_scheduler::value + && Kokkos::is_future::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) +{ + static_assert( + std::is_same::value, + "Can't create a task policy from a scheduler and a future from a different scheduler" + ); + + return { std::move(arg_scheduler), std::move(arg_future), arg_priority }; } //---------------------------------------------------------------------------- @@ -868,34 +684,31 @@ TaskSingle( TaskScheduler const & arg_scheduler * 2) With scheduler or dependence * 3) High, Normal, or Low priority */ -template< int TaskEnum - , typename DepFutureType - , typename FunctorType > -Future< typename FunctorType::value_type - , typename DepFutureType::execution_space > -host_spawn( Impl::TaskPolicyData const & arg_policy - , FunctorType && arg_functor - ) -{ - using exec_space = typename DepFutureType::execution_space ; - using scheduler = TaskScheduler< exec_space > ; +template +typename Scheduler::template future_type_for_functor::type> +host_spawn( + Impl::TaskPolicyWithScheduler arg_policy, + FunctorType&& arg_functor +) { + using scheduler_type = Scheduler; + using task_type = + typename scheduler_type::template runnable_task_type; - typedef Impl::TaskBase< exec_space - , typename FunctorType::value_type - , FunctorType - > task_type ; - - static_assert( TaskEnum == task_type::TaskTeam || - TaskEnum == task_type::TaskSingle - , "Kokkos host_spawn requires TaskTeam or TaskSingle" ); + static_assert( + TaskEnum == Impl::TaskType::TaskTeam || TaskEnum == Impl::TaskType::TaskSingle, + "Kokkos host_spawn requires TaskTeam or TaskSingle" + ); // May be spawning a Cuda task, must use the specialization // to query on-device function pointer. - typename task_type::function_type const ptr = - Kokkos::Impl::TaskQueueSpecialization< exec_space >:: - template get_function_pointer< task_type >(); + typename task_type::function_type ptr; + typename task_type::destroy_type dtor; + Kokkos::Impl::TaskQueueSpecialization< scheduler_type >:: + template get_function_pointer< task_type >(ptr, dtor); - return scheduler::spawn( arg_policy , ptr , std::move(arg_functor) ); + return scheduler_type::spawn( + std::move(arg_policy), ptr, dtor, std::forward(arg_functor) + ); } /**\brief A task spawns a task with options @@ -904,39 +717,38 @@ host_spawn( Impl::TaskPolicyData const & arg_policy * 2) With scheduler or dependence * 3) High, Normal, or Low priority */ -template< int TaskEnum - , typename DepFutureType - , typename FunctorType > -Future< typename FunctorType::value_type - , typename DepFutureType::execution_space > +template +typename Scheduler::template future_type_for_functor::type> KOKKOS_INLINE_FUNCTION -task_spawn( Impl::TaskPolicyData const & arg_policy - , FunctorType && arg_functor - ) +task_spawn( + Impl::TaskPolicyWithScheduler arg_policy, + FunctorType&& arg_functor +) { - using exec_space = typename DepFutureType::execution_space ; - using scheduler = TaskScheduler< exec_space > ; + using scheduler_type = Scheduler; - typedef Impl::TaskBase< exec_space - , typename FunctorType::value_type - , FunctorType - > task_type ; + using task_type = + typename scheduler_type::template runnable_task_type; -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) && \ - defined( KOKKOS_ENABLE_CUDA ) + #if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) && \ + defined( KOKKOS_ENABLE_CUDA ) - static_assert( ! std::is_same< Kokkos::Cuda , exec_space >::value - , "Error calling Kokkos::task_spawn for Cuda space within Host code" ); + static_assert( ! std::is_same< Kokkos::Cuda , typename Scheduler::execution_space >::value + , "Error calling Kokkos::task_spawn for Cuda space within Host code" ); -#endif + #endif - static_assert( TaskEnum == task_type::TaskTeam || - TaskEnum == task_type::TaskSingle - , "Kokkos host_spawn requires TaskTeam or TaskSingle" ); + static_assert( + TaskEnum == Impl::TaskType::TaskTeam || TaskEnum == Impl::TaskType::TaskSingle, + "Kokkos task_spawn requires TaskTeam or TaskSingle" + ); typename task_type::function_type const ptr = task_type::apply ; + typename task_type::destroy_type const dtor = task_type::destroy ; - return scheduler::spawn( arg_policy , ptr , std::move(arg_functor) ); + return scheduler_type::spawn(std::move(arg_policy), ptr, dtor, + std::forward(arg_functor) + ); } /**\brief A task respawns itself with options @@ -956,36 +768,42 @@ respawn( FunctorType * arg_self Kokkos::is_scheduler::value , "Kokkos respawn argument must be Future or TaskScheduler" ); - TaskScheduler< typename T::execution_space >:: - respawn( arg_self , arg , arg_priority ); + T::scheduler_type::respawn( + arg_self , arg , arg_priority + ); } //---------------------------------------------------------------------------- -template< typename A1 , typename A2 > -KOKKOS_INLINE_FUNCTION -Future< typename Future< A1 , A2 >::execution_space > -when_all( Future< A1 , A2 > const arg[] - , int narg - ) -{ - return TaskScheduler< typename Future::execution_space >:: - when_all( arg , narg ); -} +//template +//KOKKOS_INLINE_FUNCTION +//BasicFuture +//when_all(BasicFuture const arg[], int narg) +//{ +// return BasicFuture::scheduler_type::when_all(arg, narg); +//} //---------------------------------------------------------------------------- // Wait for all runnable tasks to complete -template< typename ExecSpace > +template inline -void wait( TaskScheduler< ExecSpace > const & scheduler ) -{ scheduler.m_queue->execute(); } +void wait(BasicTaskScheduler const& scheduler) +{ + using scheduler_type = BasicTaskScheduler; + scheduler_type::specialization::execute(scheduler); + //scheduler.m_queue->execute(); +} } // namespace Kokkos //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////// +// END OLD CODE +//////////////////////////////////////////////////////////////////////////////// + #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ #endif /* #ifndef KOKKOS_TASKSCHEDULER_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp b/lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp new file mode 100644 index 0000000000..79d502c729 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp @@ -0,0 +1,249 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TASKSCHEDULER_FWD_HPP +#define KOKKOS_TASKSCHEDULER_FWD_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +//---------------------------------------------------------------------------- + +namespace Kokkos { + +// Forward declarations used in Impl::TaskQueue + +template +class BasicFuture; + +template +class SimpleTaskScheduler; + +template +class BasicTaskScheduler; + +template< typename Space > +struct is_scheduler : public std::false_type {}; + +template +struct is_scheduler> : public std::true_type {}; + +template +struct is_scheduler> : public std::true_type {}; + +enum class TaskPriority : int { + High = 0, + Regular = 1, + Low = 2 +}; + +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +namespace Kokkos { + +template +class MemoryPool; + +namespace Impl { + +template +class TaskNode; + +class TaskBase; + +/*\brief Implementation data for task data management, access, and execution. + * (Deprecated) + * CRTP Inheritance structure to allow static_cast from the + * task root type and a task's FunctorType. + * + * TaskBase< Space , ResultType , FunctorType > + * : TaskBase< Space , ResultType , void > + * , FunctorType + * { ... }; + * + * TaskBase< Space , ResultType , void > + * : TaskBase< Space , void , void > + * { ... }; + */ +template< typename Space , typename ResultType , typename FunctorType > +class Task; + +class TaskQueueBase; + +template< typename Space, typename MemorySpace> +class TaskQueue; + +template< typename ExecSpace, typename MemorySpace> +class TaskQueueMultiple; + +template< + typename ExecSpace, typename MemSpace, typename TaskQueueTraits, + class MemoryPool = Kokkos::MemoryPool> +> +class SingleTaskQueue; + +template< typename ExecSpace, typename MemSpace, typename TaskQueueTraits, class MemoryPool> +class MultipleTaskQueue; + +struct TaskQueueTraitsLockBased; + +template +struct TaskQueueTraitsChaseLev; + +template< typename ResultType > +struct TaskResult; + +struct TaskSchedulerBase; + +template +struct default_tasking_memory_space_for_execution_space +{ + using type = typename ExecSpace::memory_space; +}; + +#if defined( KOKKOS_ENABLE_CUDA ) +template <> +struct default_tasking_memory_space_for_execution_space +{ + using type = Kokkos::CudaUVMSpace; +}; +#endif + +template +using default_tasking_memory_space_for_execution_space_t = + typename default_tasking_memory_space_for_execution_space::type; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +namespace Kokkos { + +template< typename Space > +using DeprecatedTaskScheduler = BasicTaskScheduler< + Space, + Impl::TaskQueue> +>; + +template< typename Space > +using DeprecatedTaskSchedulerMultiple = BasicTaskScheduler< + Space, + Impl::TaskQueueMultiple> +>; + +template< typename Space > +using TaskScheduler = SimpleTaskScheduler< + Space, + Impl::SingleTaskQueue< + Space, + Impl::default_tasking_memory_space_for_execution_space_t, + Impl::TaskQueueTraitsLockBased + > +>; + +template< typename Space > +using TaskSchedulerMultiple = SimpleTaskScheduler< + Space, + Impl::MultipleTaskQueue< + Space, + Impl::default_tasking_memory_space_for_execution_space_t, + Impl::TaskQueueTraitsLockBased, + Kokkos::MemoryPool< + Kokkos::Device< + Space, + Impl::default_tasking_memory_space_for_execution_space_t + > + > + > +>; + +template< typename Space > +using ChaseLevTaskScheduler = SimpleTaskScheduler< + Space, + Impl::MultipleTaskQueue< + Space, + Impl::default_tasking_memory_space_for_execution_space_t, + Impl::TaskQueueTraitsChaseLev<>, + Kokkos::MemoryPool< + Kokkos::Device< + Space, + Impl::default_tasking_memory_space_for_execution_space_t + > + > + > +>; + +template +void wait(BasicTaskScheduler const&); + +namespace Impl { + +struct TaskSchedulerBase { }; + +class TaskQueueBase { }; + +template +class TaskQueueSpecializationConstrained { }; + +template +struct TaskQueueSpecialization : TaskQueueSpecializationConstrained { }; + +template +struct TaskPolicyData; + + +} // end namespace Impl + +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_TASKSCHEDULER_FWD_HPP */ + diff --git a/lib/kokkos/core/src/Kokkos_Threads.hpp b/lib/kokkos/core/src/Kokkos_Threads.hpp index d5e684e4ea..03dab1acaf 100644 --- a/lib/kokkos/core/src/Kokkos_Threads.hpp +++ b/lib/kokkos/core/src/Kokkos_Threads.hpp @@ -105,7 +105,13 @@ public: /// return asynchronously, before the functor completes. This /// method does not return until all dispatched functors on this /// device have completed. + static void impl_static_fence(); + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence(); + #else + void fence() const; + #endif /** \brief Return the maximum amount of concurrency. */ static int concurrency(); diff --git a/lib/kokkos/core/src/Kokkos_View.hpp b/lib/kokkos/core/src/Kokkos_View.hpp index 754a0ab8c0..3fe8e6f067 100644 --- a/lib/kokkos/core/src/Kokkos_View.hpp +++ b/lib/kokkos/core/src/Kokkos_View.hpp @@ -74,7 +74,11 @@ template< class DataType , class ArrayLayout struct ViewDataAnalysis ; template< class , class ... > -class ViewMapping { public: enum { is_assignable = false }; }; +class ViewMapping { + public: + enum { is_assignable_data_type = false }; + enum { is_assignable = false }; +}; @@ -97,6 +101,7 @@ std::size_t count_valid_integers(const IntType i0, } +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE KOKKOS_INLINE_FUNCTION void runtime_check_rank_device(const size_t dyn_rank, const bool is_void_spec, @@ -109,8 +114,6 @@ void runtime_check_rank_device(const size_t dyn_rank, const size_t i6, const size_t i7 ){ -#ifndef KOKKOS_ENABLE_DEPRECATED_CODE - if ( is_void_spec ) { const size_t num_passed_args = count_valid_integers(i0, i1, i2, i3, i4, i5, i6, i7); @@ -121,10 +124,25 @@ void runtime_check_rank_device(const size_t dyn_rank, } } -#endif } +#else +KOKKOS_INLINE_FUNCTION +void runtime_check_rank_device(const size_t , + const bool , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t ){ + +} +#endif #ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE KOKKOS_INLINE_FUNCTION void runtime_check_rank_host(const size_t dyn_rank, const bool is_void_spec, @@ -137,7 +155,6 @@ void runtime_check_rank_host(const size_t dyn_rank, const size_t i6, const size_t i7, const std::string & label ){ -#ifndef KOKKOS_ENABLE_DEPRECATED_CODE if ( is_void_spec ) { const size_t num_passed_args = count_valid_integers(i0, i1, i2, i3, @@ -150,8 +167,20 @@ void runtime_check_rank_host(const size_t dyn_rank, Kokkos::abort(message.c_str()) ; } } -#endif } +#else +KOKKOS_INLINE_FUNCTION +void runtime_check_rank_host(const size_t , + const bool , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , const std::string &){} +#endif #endif } /* namespace Impl */ @@ -362,8 +391,8 @@ public: typedef typename MemorySpace::size_type size_type ; enum { is_hostspace = std::is_same< MemorySpace , HostSpace >::value }; - enum { is_managed = MemoryTraits::Unmanaged == 0 }; - enum { is_random_access = MemoryTraits::RandomAccess == 1 }; + enum { is_managed = MemoryTraits::is_unmanaged == 0 }; + enum { is_random_access = MemoryTraits::is_random_access == 1 }; //------------------------------------ }; @@ -1965,7 +1994,10 @@ public: template< class RT , class ... RP > KOKKOS_INLINE_FUNCTION - View( const View & rhs ) + View( const View & rhs, + typename std::enable_if::traits , typename traits::specialize >::is_assignable_data_type>::type* = 0 + ) : m_track( rhs.m_track , traits::is_managed ) , m_map() { @@ -1977,7 +2009,9 @@ public: template< class RT , class ... RP > KOKKOS_INLINE_FUNCTION - View & operator = ( const View & rhs ) + typename std::enable_if::traits , typename traits::specialize >::is_assignable_data_type, + View>::type & operator = ( const View & rhs ) { typedef typename View::traits SrcTraits ; typedef Kokkos::Impl::ViewMapping< traits , SrcTraits , typename traits::specialize > Mapping ; @@ -1994,7 +2028,7 @@ public: template< class RT , class ... RP , class Arg0 , class ... Args > KOKKOS_INLINE_FUNCTION View( const View< RT , RP... > & src_view - , const Arg0 & arg0 , Args ... args ) + , const Arg0 arg0 , Args ... args ) : m_track( src_view.m_track , traits::is_managed ) , m_map() { @@ -2077,7 +2111,7 @@ public: } // Copy the input allocation properties with possibly defaulted properties - alloc_prop prop( arg_prop ); + alloc_prop prop_copy( arg_prop ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) @@ -2087,18 +2121,18 @@ public: // Fence using the trait's executon space (which will be Kokkos::Cuda) // to avoid incomplete type errors from usng Kokkos::Cuda directly. if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ Kokkos::Impl::SharedAllocationRecord<> * - record = m_map.allocate_shared( prop , arg_layout ); + record = m_map.allocate_shared( prop_copy , arg_layout ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ diff --git a/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp b/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp index 33a0579df5..dd5e29a400 100644 --- a/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp @@ -55,7 +55,7 @@ class WorkGraphExec; namespace Kokkos { template< class ... Properties > -class WorkGraphPolicy +class WorkGraphPolicy: public Kokkos::Impl::PolicyTraits { public: @@ -64,7 +64,6 @@ public: using traits = Kokkos::Impl::PolicyTraits; using index_type = typename traits::index_type; using member_type = index_type; - using work_tag = typename traits::work_tag; using execution_space = typename traits::execution_space; using memory_space = typename execution_space::memory_space; using graph_type = Kokkos::Crs; @@ -217,7 +216,7 @@ public: using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this, policy_type(0, m_queue.size())); closure.execute(); - execution_space::fence(); + execution_space().fence(); } { // execute-after counts @@ -225,7 +224,7 @@ public: using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this,policy_type(0,m_graph.entries.size())); closure.execute(); - execution_space::fence(); + execution_space().fence(); } { // Scheduling ready tasks @@ -233,7 +232,7 @@ public: using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this,policy_type(0,m_graph.numRows())); closure.execute(); - execution_space::fence(); + execution_space().fence(); } } }; @@ -256,4 +255,8 @@ public: #include "Threads/Kokkos_Threads_WorkGraphPolicy.hpp" #endif +#ifdef KOKKOS_ENABLE_HPX +#include "HPX/Kokkos_HPX_WorkGraphPolicy.hpp" +#endif + #endif /* #define KOKKOS_WORKGRAPHPOLICY_HPP */ diff --git a/lib/kokkos/core/src/Makefile b/lib/kokkos/core/src/Makefile index c2dbddf45e..ae8dc17510 100644 --- a/lib/kokkos/core/src/Makefile +++ b/lib/kokkos/core/src/Makefile @@ -40,6 +40,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) CONDITIONAL_COPIES += copy-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + CONDITIONAL_COPIES += copy-hpx +endif + ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) CONDITIONAL_COPIES += copy-rocm endif @@ -91,6 +95,10 @@ copy-openmp: mkdir mkdir -p $(PREFIX)/include/OpenMP $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_OPENMP) $(PREFIX)/include/OpenMP +copy-hpx: mkdir + mkdir -p $(PREFIX)/include/HPX + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_HPX) $(PREFIX)/include/HPX + copy-rocm: mkdir mkdir -p $(PREFIX)/include/ROCm $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_ROCM) $(PREFIX)/include/ROCm diff --git a/lib/kokkos/core/src/Makefile.generate_build_files b/lib/kokkos/core/src/Makefile.generate_build_files index cc856ee9a3..651b9d5fe9 100644 --- a/lib/kokkos/core/src/Makefile.generate_build_files +++ b/lib/kokkos/core/src/Makefile.generate_build_files @@ -84,6 +84,7 @@ generate_build_settings: $(KOKKOS_CONFIG_HEADER) $(KOKKOS_PKGCONFIG) @$(call kokkos_append_var,KOKKOS_HEADERS_IMPL,'STRING "Kokkos headers impl list"') @$(call kokkos_append_var,KOKKOS_HEADERS_CUDA,'STRING "Kokkos headers Cuda list"') @$(call kokkos_append_var,KOKKOS_HEADERS_OPENMP,'STRING "Kokkos headers OpenMP list"') + @$(call kokkos_append_var,KOKKOS_HEADERS_HPX,'STRING "Kokkos headers HPX list"') @$(call kokkos_append_var,KOKKOS_HEADERS_ROCM,'STRING "Kokkos headers ROCm list"') @$(call kokkos_append_var,KOKKOS_HEADERS_THREADS,'STRING "Kokkos headers Threads list"') @$(call kokkos_append_var,KOKKOS_HEADERS_QTHREADS,'STRING "Kokkos headers QThreads list"') @@ -103,11 +104,13 @@ generate_build_settings: $(KOKKOS_CONFIG_HEADER) $(KOKKOS_PKGCONFIG) @$(call kokkos_append_string,"#Internal settings which need to propagated for Kokkos examples") @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_CUDA,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_OPENMP,'STRING ""') + @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_HPX,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_PTHREADS,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_SERIAL,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_ROCM,'STRING ""') + @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_HPX,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_QTHREADS,'STRING ""') # Not in original cmake gen - @$(call kokkos_append_cmakefile "mark_as_advanced(KOKKOS_HEADERS KOKKOS_SRC KOKKOS_INTERNAL_USE_CUDA KOKKOS_INTERNAL_USE_OPENMP KOKKOS_INTERNAL_USE_PTHREADS KOKKOS_INTERNAL_USE_SERIAL)") + @$(call kokkos_append_cmakefile "mark_as_advanced(KOKKOS_HEADERS KOKKOS_SRC KOKKOS_INTERNAL_USE_CUDA KOKKOS_INTERNAL_USE_OPENMP KOKKOS_INTERNAL_USE_HPX KOKKOS_INTERNAL_USE_PTHREADS KOKKOS_INTERNAL_USE_SERIAL)") @$(call kokkos_append_makefile,"") @$(call kokkos_append_makefile,"#Fake kokkos-clean target") @$(call kokkos_append_makefile,"kokkos-clean:") diff --git a/lib/kokkos/core/src/Makefile.generate_header_lists b/lib/kokkos/core/src/Makefile.generate_header_lists index cd308bf8f4..afbefb3806 100644 --- a/lib/kokkos/core/src/Makefile.generate_header_lists +++ b/lib/kokkos/core/src/Makefile.generate_header_lists @@ -22,6 +22,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) KOKKOS_HEADERS_OPENMP += $(wildcard $(KOKKOS_PATH)/core/src/OpenMP/*.hpp) endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + KOKKOS_HEADERS_HPX += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.hpp) +endif + ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) KOKKOS_HEADERS_ROCM += $(wildcard $(KOKKOS_PATH)/core/src/ROCm/*.hpp) endif diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp index e57b61d7cb..1946c10741 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp @@ -472,6 +472,10 @@ int OpenMP::concurrency() { return Impl::g_openmp_hardware_max_threads; } +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +void OpenMP::fence() const {} +#endif + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE void OpenMP::initialize( int thread_count , int, int ) diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp index 43fa7888cf..5178199ac2 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp @@ -184,8 +184,13 @@ int OpenMP::impl_thread_pool_rank() noexcept #endif } +inline +void OpenMP::impl_static_fence( OpenMP const& instance ) noexcept {} + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE inline void OpenMP::fence( OpenMP const& instance ) noexcept {} +#endif inline bool OpenMP::is_asynchronous( OpenMP const& instance ) noexcept diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp index e0bb572a3b..ae6b49f650 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp @@ -128,11 +128,10 @@ public: OpenMPExec::verify_is_master("Kokkos::OpenMP parallel_for"); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -228,11 +227,10 @@ public: OpenMPExec::verify_is_master("Kokkos::OpenMP parallel_for"); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -703,11 +701,10 @@ public: ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -840,11 +837,10 @@ public: ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -1005,11 +1001,10 @@ public: , thread_local_size ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp index 2f2c768460..3b1c187c6d 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp @@ -48,6 +48,8 @@ #include #include +#include +#include //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -55,200 +57,44 @@ namespace Kokkos { namespace Impl { -template class TaskQueue< Kokkos::OpenMP > ; +template class TaskQueue< Kokkos::OpenMP, typename Kokkos::OpenMP::memory_space > ; -class HostThreadTeamDataSingleton : private HostThreadTeamData { -private: - - HostThreadTeamDataSingleton() : HostThreadTeamData() - { - Kokkos::OpenMP::memory_space space ; - const size_t num_pool_reduce_bytes = 32 ; - const size_t num_team_reduce_bytes = 32 ; - const size_t num_team_shared_bytes = 1024 ; - const size_t num_thread_local_bytes = 1024 ; - const size_t alloc_bytes = - HostThreadTeamData::scratch_size( num_pool_reduce_bytes - , num_team_reduce_bytes - , num_team_shared_bytes - , num_thread_local_bytes ); - - HostThreadTeamData::scratch_assign - ( space.allocate( alloc_bytes ) - , alloc_bytes - , num_pool_reduce_bytes - , num_team_reduce_bytes - , num_team_shared_bytes - , num_thread_local_bytes ); - } - - ~HostThreadTeamDataSingleton() - { - Kokkos::OpenMP::memory_space space ; - space.deallocate( HostThreadTeamData::scratch_buffer() - , HostThreadTeamData::scratch_bytes() ); - } - -public: - - static HostThreadTeamData & singleton() - { - static HostThreadTeamDataSingleton s ; - return s ; - } -}; - -//---------------------------------------------------------------------------- - -void TaskQueueSpecialization< Kokkos::OpenMP >::execute - ( TaskQueue< Kokkos::OpenMP > * const queue ) +HostThreadTeamData& HostThreadTeamDataSingleton::singleton() { - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< execution_space > ; - - static task_root_type * const end = - (task_root_type *) task_root_type::EndTag ; - - - HostThreadTeamData & team_data_single = - HostThreadTeamDataSingleton::singleton(); - - Impl::OpenMPExec * instance = t_openmp_instance; -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); -#else - const int pool_size = OpenMP::impl_thread_pool_size(); -#endif - - const int team_size = 1; // Threads per core - instance->resize_thread_data( 0 /* global reduce buffer */ - , 512 * team_size /* team reduce buffer */ - , 0 /* team shared buffer */ - , 0 /* thread local buffer */ - ); - - #pragma omp parallel num_threads(pool_size) - { - Impl::HostThreadTeamData & self = *(instance->get_thread_data()); - - // Organizing threads into a team performs a barrier across the - // entire pool to insure proper initialization of the team - // rendezvous mechanism before a team rendezvous can be performed. - - if ( self.organize_team( team_size ) ) { - - Member single_exec( team_data_single ); - Member team_exec( self ); - - // Loop until all queues are empty and no tasks in flight - - task_root_type * task = 0 ; - - do { - // Each team lead attempts to acquire either a thread team task - // or a single thread task for the team. - - if ( 0 == team_exec.team_rank() ) { - - bool leader_loop = false ; - - do { - - if ( 0 != task && end != task ) { - // team member #0 completes the previously executed task, - // completion may delete the task - queue->complete( task ); - } - - // If 0 == m_ready_count then set task = 0 - - task = 0 < *((volatile int *) & queue->m_ready_count) ? end : 0 ; - - // Attempt to acquire a task - // Loop by priority and then type - for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - // If still tasks are still executing - // and no task could be acquired - // then continue this leader loop - leader_loop = end == task ; - - if ( ( ! leader_loop ) && - ( 0 != task ) && - ( task_root_type::TaskSingle == task->m_task_type ) ) { - - // if a single thread task then execute now - - (*task->m_apply)( task , & single_exec ); - - leader_loop = true ; - } - } while ( leader_loop ); - } - - // Team lead either found 0 == m_ready_count or a team task - // Team lead broadcast acquired task: - - team_exec.team_broadcast( task , 0); - - if ( 0 != task ) { // Thread Team Task - - (*task->m_apply)( task , & team_exec ); - - // The m_apply function performs a barrier - } - } while( 0 != task ); - } - self.disband_team(); - } + static HostThreadTeamDataSingleton s; + return s; } -void TaskQueueSpecialization< Kokkos::OpenMP >:: - iff_single_thread_recursive_execute - ( TaskQueue< Kokkos::OpenMP > * const queue ) +HostThreadTeamDataSingleton::HostThreadTeamDataSingleton() + : HostThreadTeamData() { - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< execution_space > ; + Kokkos::OpenMP::memory_space space ; + const size_t num_pool_reduce_bytes = 32 ; + const size_t num_team_reduce_bytes = 32 ; + const size_t num_team_shared_bytes = 1024 ; + const size_t num_thread_local_bytes = 1024 ; + const size_t alloc_bytes = + HostThreadTeamData::scratch_size( num_pool_reduce_bytes + , num_team_reduce_bytes + , num_team_shared_bytes + , num_thread_local_bytes ); -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - if ( 1 == OpenMP::thread_pool_size() ) -#else - if ( 1 == OpenMP::impl_thread_pool_size() ) -#endif - { + HostThreadTeamData::scratch_assign + ( space.allocate( alloc_bytes ) + , alloc_bytes + , num_pool_reduce_bytes + , num_team_reduce_bytes + , num_team_shared_bytes + , num_thread_local_bytes ); +} - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - HostThreadTeamData & team_data_single = - HostThreadTeamDataSingleton::singleton(); - - Member single_exec( team_data_single ); - - task_root_type * task = end ; - - do { - - task = end ; - - // Loop by priority and then type - for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - if ( end == task ) break ; - - (*task->m_apply)( task , & single_exec ); - - queue->complete( task ); - - } while(1); - } +HostThreadTeamDataSingleton::~HostThreadTeamDataSingleton() +{ + Kokkos::OpenMP::memory_space space ; + space.deallocate( + HostThreadTeamData::scratch_buffer(), + static_cast(HostThreadTeamData::scratch_bytes()) + ); } }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp index b99c149b06..4029c015b3 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp @@ -47,38 +47,388 @@ #include #if defined( KOKKOS_ENABLE_OPENMP ) && defined( KOKKOS_ENABLE_TASKDAG ) +#include + +#include +#include + +#include +#include + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- namespace Kokkos { namespace Impl { -template<> -class TaskQueueSpecialization< Kokkos::OpenMP > +class HostThreadTeamDataSingleton : private HostThreadTeamData { +private: + + HostThreadTeamDataSingleton(); + ~HostThreadTeamDataSingleton(); + +public: + + static HostThreadTeamData & singleton(); + +}; + +// Hack this as a partial specialization for now +// TODO @tasking @cleanup DSH Make this the general class template and make the old code the partial specialization +template +class TaskQueueSpecialization< + SimpleTaskScheduler +> { public: - using execution_space = Kokkos::OpenMP ; - using queue_type = Kokkos::Impl::TaskQueue< execution_space > ; - using task_base_type = Kokkos::Impl::TaskBase< void , void , void > ; - using member_type = Kokkos::Impl::HostThreadTeamMember< execution_space > ; + using execution_space = Kokkos::OpenMP; + using scheduler_type = SimpleTaskScheduler; + using member_type = TaskTeamMemberAdapter< + Kokkos::Impl::HostThreadTeamMember, + scheduler_type + >; + using memory_space = Kokkos::HostSpace; - // Must specify memory space - using memory_space = Kokkos::HostSpace ; - - static - void iff_single_thread_recursive_execute( queue_type * const ); + enum : int { max_league_size = HostThreadTeamData::max_pool_members }; // Must provide task queue execution function - static void execute( queue_type * const ); + static void execute(scheduler_type const& scheduler) + { + using task_base_type = typename scheduler_type::task_base_type; - template< typename TaskType > - static - typename TaskType::function_type - get_function_pointer() { return TaskType::apply ; } + // Unused; ChaseLev queue still needs worker ID even in single case (so we need to use + // the thread data from inside of the parallel region. Team size is fixed at 1 for now + // anyway + //HostThreadTeamData& team_data_single = HostThreadTeamDataSingleton::singleton(); + + // TODO @tasking @generalization DSH use scheduler.get_execution_space().impl() (or something like that) instead of the thread-local variable + Impl::OpenMPExec* instance = t_openmp_instance; + const int pool_size = get_max_team_count(scheduler.get_execution_space()); + + // TODO @tasking @new_feature DSH allow team sizes other than 1 + const int team_size = 1; // Threads per core + instance->resize_thread_data( + 0, /* global reduce buffer */ + 512 * team_size, /* team reduce buffer */ + 0, /* team shared buffer */ + 0 /* thread local buffer */ + ); + assert(pool_size % team_size == 0); + + auto& queue = scheduler.queue(); + + //queue.initialize_team_queues(pool_size / team_size); + + #pragma omp parallel num_threads(pool_size) + { + Impl::HostThreadTeamData & self = *(instance->get_thread_data()); + + // Organizing threads into a team performs a barrier across the + // entire pool to insure proper initialization of the team + // rendezvous mechanism before a team rendezvous can be performed. + + // organize_team() returns true if this is an active team member + if(self.organize_team(team_size)) { + + member_type single_exec(scheduler, self); + member_type team_exec(scheduler, self); + + auto& team_scheduler = team_exec.scheduler(); + + auto current_task = OptionalRef(nullptr); + + while(not queue.is_done()) { + + // Each team lead attempts to acquire either a thread team task + // or a single thread task for the team. + if(team_exec.team_rank() == 0) { + + // loop while both: + // - the queue is not done + // - the most recently popped task is a single task or empty + while(not queue.is_done()) { + + current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); + + if(current_task) { + + if(current_task->is_team_runnable()) { + // break out of the team leader loop to run the team task + break; + } + else { + KOKKOS_ASSERT(current_task->is_single_runnable()); + current_task->as_runnable_task().run(single_exec); + // Respawns are handled in the complete function + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } // end if current_task is not null + + current_task = nullptr; + + } // end team leader loop + + } + + // Otherwise, make sure everyone in the team has the same task + team_exec.team_broadcast(current_task, 0); + + if(current_task) { + KOKKOS_ASSERT(current_task->is_team_runnable()); + current_task->as_runnable_task().run(team_exec); + + if(team_exec.team_rank() == 0) { + // Respawns are handled in the complete function + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } + + } + } + self.disband_team(); + } // end pragma omp parallel + } + + static uint32_t + get_max_team_count(execution_space const& espace) { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + return static_cast(espace.thread_pool_size()); +#else + return static_cast(espace.impl_thread_pool_size()); +#endif + } + + // TODO @tasking @optimization DSH specialize this for trivially destructible types + template + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } }; -extern template class TaskQueue< Kokkos::OpenMP > ; + +template +class TaskQueueSpecializationConstrained< + Scheduler, + typename std::enable_if< + std::is_same::value + >::type +> +{ +public: + + using execution_space = Kokkos::OpenMP; + using scheduler_type = Scheduler; + using member_type = TaskTeamMemberAdapter< + Kokkos::Impl::HostThreadTeamMember, + scheduler_type + >; + using memory_space = Kokkos::HostSpace ; + + enum : int { max_league_size = HostThreadTeamData::max_pool_members }; + + static + void iff_single_thread_recursive_execute( scheduler_type const& scheduler ) { + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + if ( 1 == OpenMP::thread_pool_size() ) +#else + if ( 1 == OpenMP::impl_thread_pool_size() ) +#endif + { + + task_base_type * const end = (task_base_type *) task_base_type::EndTag ; + + HostThreadTeamData & team_data_single = + HostThreadTeamDataSingleton::singleton(); + + member_type single_exec( scheduler, team_data_single ); + + task_base_type * task = end ; + + do { + + task = end ; + + // Loop by priority and then type + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & scheduler.m_queue->m_ready[i][j] ); + } + } + + if ( end == task ) break ; + + (*task->m_apply)( task , & single_exec ); + + scheduler.m_queue->complete( task ); + + } while(1); + } + + } + + // Must provide task queue execution function + static void execute(scheduler_type const& scheduler) + { + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + + static task_base_type * const end = + (task_base_type *) task_base_type::EndTag ; + + constexpr task_base_type* no_more_tasks_sentinel = nullptr; + + + HostThreadTeamData & team_data_single = + HostThreadTeamDataSingleton::singleton(); + + Impl::OpenMPExec * instance = t_openmp_instance; +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + const int pool_size = OpenMP::thread_pool_size(); +#else + const int pool_size = OpenMP::impl_thread_pool_size(); +#endif + + const int team_size = 1; // Threads per core + instance->resize_thread_data( 0 /* global reduce buffer */ + , 512 * team_size /* team reduce buffer */ + , 0 /* team shared buffer */ + , 0 /* thread local buffer */ + ); + assert(pool_size % team_size == 0); + auto& queue = scheduler.queue(); + queue.initialize_team_queues(pool_size / team_size); + +#pragma omp parallel num_threads(pool_size) + { + Impl::HostThreadTeamData & self = *(instance->get_thread_data()); + + // Organizing threads into a team performs a barrier across the + // entire pool to insure proper initialization of the team + // rendezvous mechanism before a team rendezvous can be performed. + + // organize_team() returns true if this is an active team member + if ( self.organize_team( team_size ) ) { + + member_type single_exec(scheduler, team_data_single); + member_type team_exec(scheduler, self); + + auto& team_queue = team_exec.scheduler().queue(); + + // Loop until all queues are empty and no tasks in flight + + task_base_type * task = no_more_tasks_sentinel; + + + do { + // Each team lead attempts to acquire either a thread team task + // or a single thread task for the team. + + if ( 0 == team_exec.team_rank() ) { + + bool leader_loop = false ; + + do { + + if ( task != no_more_tasks_sentinel && task != end ) { + // team member #0 completes the previously executed task, + // completion may delete the task + team_queue.complete( task ); + } + + // If 0 == m_ready_count then set task = 0 + + if( *((volatile int *) & team_queue.m_ready_count) > 0 ) { + task = end; + // Attempt to acquire a task + // Loop by priority and then type + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & team_queue.m_ready[i][j] ); + } + } + } + else { + // returns nullptr if and only if all other queues have a ready + // count of 0 also. Otherwise, returns a task from another queue + // or `end` if one couldn't be popped + task = team_queue.attempt_to_steal_task(); + #if 0 + if(task != no_more_tasks_sentinel && task != end) { + std::printf("task stolen on rank %d\n", team_exec.league_rank()); + } + #endif + } + + // If still tasks are still executing + // and no task could be acquired + // then continue this leader loop + if(task == end) { + // this means that the ready task count was not zero, but we + // couldn't pop a task (because, for instance, someone else + // got there before us + leader_loop = true; + } + else if ( ( task != no_more_tasks_sentinel ) && + ( task_base_type::TaskSingle == task->m_task_type ) ) { + + // if a single thread task then execute now + + (*task->m_apply)(task, &single_exec); + + leader_loop = true; + } + else { + leader_loop = false; + } + } while ( leader_loop ); + } + + // Team lead either found 0 == m_ready_count or a team task + // Team lead broadcast acquired task: + + team_exec.team_broadcast( task , 0); + + if ( task != no_more_tasks_sentinel ) { // Thread Team Task + + (*task->m_apply)( task , & team_exec ); + + // The m_apply function performs a barrier + } + } while( task != no_more_tasks_sentinel ); + } + self.disband_team(); + } // end pragma omp parallel + } + + template< typename TaskType > + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } +}; + +extern template class TaskQueue< Kokkos::OpenMP, typename Kokkos::OpenMP::memory_space > ; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp index e8fbc467e0..38b062bdc0 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp @@ -74,6 +74,21 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_team_alloc = p.m_team_alloc; + m_team_iter = p.m_team_iter; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } //---------------------------------------- #ifdef KOKKOS_ENABLE_DEPRECATED_CODE @@ -208,7 +223,7 @@ public: } /** \brief Specify league size, request team size */ - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , int team_size_request , int /* vector_length_request */ = 1 ) @@ -217,14 +232,18 @@ public: , m_chunk_size(0) { init( league_size_request , team_size_request ); } - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , const Kokkos::AUTO_t & /* team_size_request */ , int /* vector_length_request */ = 1) : m_team_scratch_size { 0 , 0 } , m_thread_scratch_size { 0 , 0 } , m_chunk_size(0) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE { init( league_size_request , traits::execution_space::thread_pool_size(2) ); } +#else + { init( league_size_request , traits::execution_space::impl_thread_pool_size(2) ); } +#endif TeamPolicyInternal( int league_size_request , int team_size_request diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp index 879d5d2d24..0742575cb8 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp @@ -76,11 +76,10 @@ public: void execute() { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { // Spin until COMPLETED_TOKEN. // END_TOKEN indicates no work is currently available. diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp index fc31a91b22..c93a88606d 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp @@ -697,13 +697,13 @@ namespace Impl { const iType increment; inline - TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const iType& count): + TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, iType count): start( thread_.team_rank() ), end( count ), increment( thread_.team_size() ) {} inline - TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const iType& begin_, const iType& end_): + TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, iType begin_, iType end_): start( begin_+thread_.team_rank() ), end( end_ ), increment( thread_.team_size() ) @@ -718,13 +718,13 @@ namespace Impl { const index_type increment; inline - ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const index_type& count): + ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, index_type count): start( thread_.m_vector_lane ), end( count ), increment( thread_.m_vector_length ) {} inline - ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const index_type& begin_, const index_type& end_): + ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, index_type begin_, index_type end_): start( begin_+thread_.m_vector_lane ), end( end_ ), increment( thread_.m_vector_length ) @@ -734,28 +734,28 @@ namespace Impl { template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& count) { + TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, iType count) { return Impl::TeamThreadRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& begin, const iType& end) { + TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, iType begin, iType end) { return Impl::TeamThreadRangeBoundariesStruct(thread,begin,end); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& count) { + ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, iType count) { return Impl::ThreadVectorRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& begin, const iType& end) { + ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, iType begin, iType end) { return Impl::ThreadVectorRangeBoundariesStruct(thread,begin,end); } diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp index 5ad90436af..7b1b63befe 100644 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp +++ b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp @@ -51,7 +51,6 @@ #include -#include #include #include diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp index 205e6a2955..3e81883278 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp @@ -227,7 +227,7 @@ struct ROCmParallelLaunch< DriverType //#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) // ROCM_SAFE_CALL( rocmGetLastError() ); -// Kokkos::ROCm::fence(); +// Kokkos::ROCm().fence(); //#endif } } diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp index edd1c12e45..48654555b2 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp @@ -86,6 +86,21 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_vector_length = p.m_vector_length; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + TeamPolicyInternal() : m_league_size( 0 ) , m_team_size( 0 ) @@ -1099,7 +1114,7 @@ public: ROCmParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute - ROCM::fence(); + ROCM().fence(); if ( m_result_ptr ) { const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); @@ -1494,14 +1509,14 @@ namespace Kokkos { template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::ROCmTeamMember& thread, const iType& count) { + TeamThreadRange(const Impl::ROCmTeamMember& thread, iType count) { return Impl::TeamThreadRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct::type,Impl::ROCmTeamMember> - TeamThreadRange(const Impl::ROCmTeamMember& thread, const iType1& begin, const iType2& end) { + TeamThreadRange(const Impl::ROCmTeamMember& thread, iType1 begin, iType2 end) { typedef typename std::common_type< iType1, iType2 >::type iType; return Impl::TeamThreadRangeBoundariesStruct(thread,begin,end); } @@ -1509,14 +1524,14 @@ Impl::TeamThreadRangeBoundariesStruct KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::ROCmTeamMember& thread, const iType& count) { + ThreadVectorRange(const Impl::ROCmTeamMember& thread, iType count) { return Impl::ThreadVectorRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::ROCmTeamMember& thread, const iType& arg_begin, const iType& arg_end) { + ThreadVectorRange(const Impl::ROCmTeamMember& thread, iType arg_begin, iType arg_end) { return Impl::ThreadVectorRangeBoundariesStruct(thread,arg_begin,arg_end); } diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp index 559d6f2fcb..347778f289 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp @@ -804,6 +804,10 @@ int Threads::concurrency() { return impl_thread_pool_size(0); #endif } +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +void Threads::fence() const +{ Impl::ThreadsExec::fence() ; } +#endif #ifdef KOKKOS_ENABLE_DEPRECATED_CODE Threads & Threads::instance(int) diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp index 61d7667d58..7af9d9e065 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp @@ -649,8 +649,12 @@ inline bool Threads::wake() { return Impl::ThreadsExec::wake() ; } #endif +inline void Threads::impl_static_fence() +{ Impl::ThreadsExec::fence() ; } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE inline void Threads::fence() { Impl::ThreadsExec::fence() ; } +#endif } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp index e88abdba50..9d6c0fa8cf 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp @@ -72,9 +72,12 @@ private: enum { TEAM_REDUCE_SIZE = 512 }; +public: typedef Kokkos::Threads execution_space ; - typedef execution_space::scratch_memory_space space ; + typedef execution_space::scratch_memory_space scratch_memory_space ; +private: + typedef execution_space::scratch_memory_space space ; ThreadsExec * const m_exec ; ThreadsExec * const * m_team_base ; ///< Base for team fan-in space m_team_shared ; @@ -228,14 +231,20 @@ public: } #endif + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< is_reducer< ReducerType >::value >::type + team_reduce( ReducerType const & reducer ) const noexcept + { team_reduce(reducer,reducer.reference()); } + template< typename ReducerType > KOKKOS_INLINE_FUNCTION typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type #if ! defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - team_reduce( const ReducerType & ) const + team_reduce( const ReducerType &, const typename ReducerType::value_type ) const {} #else - team_reduce( const ReducerType & reducer ) const + team_reduce( const ReducerType & reducer, const typename ReducerType::value_type contribution ) const { typedef typename ReducerType::value_type value_type; // Make sure there is enough scratch space: @@ -247,7 +256,7 @@ public: type * const local_value = ((type*) m_exec->scratch_memory()); // Set this thread's contribution - *local_value = reducer.reference() ; + *local_value = contribution ; // Fence to make sure the base team member has access: memory_fence(); @@ -277,58 +286,7 @@ public: } #endif - template< class ValueType, class JoinOp > - KOKKOS_INLINE_FUNCTION ValueType - team_reduce( const ValueType & value - , const JoinOp & op_in ) const - #if ! defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - { return ValueType(); } - #else - { - typedef ValueType value_type; - const JoinLambdaAdapter op(op_in); - #endif -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - // Make sure there is enough scratch space: - typedef typename if_c< sizeof(value_type) < TEAM_REDUCE_SIZE - , value_type , void >::type type ; - - if ( 0 == m_exec ) return value ; - - type * const local_value = ((type*) m_exec->scratch_memory()); - - // Set this thread's contribution - *local_value = value ; - - // Fence to make sure the base team member has access: - memory_fence(); - - if ( team_fan_in() ) { - // The last thread to synchronize returns true, all other threads wait for team_fan_out() - type * const team_value = ((type*) m_team_base[0]->scratch_memory()); - - // Join to the team value: - for ( int i = 1 ; i < m_team_size ; ++i ) { - op.join( *team_value , *((type*) m_team_base[i]->scratch_memory()) ); - } - - // Team base thread may "lap" member threads so copy out to their local value. - for ( int i = 1 ; i < m_team_size ; ++i ) { - *((type*) m_team_base[i]->scratch_memory()) = *team_value ; - } - - // Fence to make sure all team members have access - memory_fence(); - } - - team_fan_out(); - - // Value was changed by the team base - return *((type volatile const *) local_value); - } -#endif - - /** \brief Intra-team exclusive prefix sum with team_rank() ordering + /** \brief Intra-team exclusive prefix sum with team_rank() ordering * with intra-team non-deterministic ordering accumulation. * * The global inter-team accumulation value will, at the end of the @@ -645,6 +603,22 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_team_alloc = p.m_team_alloc; + m_team_iter = p.m_team_iter; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + //---------------------------------------- #ifdef KOKKOS_ENABLE_DEPRECATED_CODE @@ -734,7 +708,7 @@ public: inline int team_iter() const { return m_team_iter ; } /** \brief Specify league size, request team size */ - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , int team_size_request , int vector_length_request = 1 ) @@ -747,7 +721,7 @@ public: { init(league_size_request,team_size_request); (void) vector_length_request; } /** \brief Specify league size, request team size */ - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , const Kokkos::AUTO_t & /* team_size_request */ , int /* vector_length_request */ = 1 ) @@ -757,7 +731,11 @@ public: , m_team_scratch_size { 0 , 0 } , m_thread_scratch_size { 0 , 0 } , m_chunk_size(0) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE { init(league_size_request,traits::execution_space::thread_pool_size(2)); } +#else + { init(league_size_request,traits::execution_space::impl_thread_pool_size(2)); } +#endif TeamPolicyInternal( int league_size_request , int team_size_request @@ -924,6 +902,23 @@ TeamThreadRange( const Impl::ThreadsExecTeamMember& thread, const iType1 & begin return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember >( thread, iType(begin), iType(end) ); } +template< typename iType > +KOKKOS_INLINE_FUNCTION +Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember > +TeamVectorRange( const Impl::ThreadsExecTeamMember& thread, const iType& count ) +{ + return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember >( thread, count ); +} + +template< typename iType1, typename iType2 > +KOKKOS_INLINE_FUNCTION +Impl::TeamThreadRangeBoundariesStruct< typename std::common_type< iType1, iType2 >::type, + Impl::ThreadsExecTeamMember> +TeamVectorRange( const Impl::ThreadsExecTeamMember& thread, const iType1 & begin, const iType2 & end ) +{ + typedef typename std::common_type< iType1, iType2 >::type iType; + return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember >( thread, iType(begin), iType(end) ); +} template KOKKOS_INLINE_FUNCTION @@ -974,15 +969,18 @@ typename std::enable_if< !Kokkos::is_reducer< ValueType >::value >::type parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ValueType& result) { - result = ValueType(); + ValueType intermediate; + Sum sum(intermediate); + sum.init(intermediate); for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { ValueType tmp = ValueType(); lambda(i,tmp); - result+=tmp; + intermediate+=tmp; } - result = loop_boundaries.thread.team_reduce(result,Impl::JoinAdd()); + loop_boundaries.thread.team_reduce(sum,intermediate); + result = sum.reference(); } template< typename iType, class Lambda, typename ReducerType > @@ -991,36 +989,14 @@ typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { - reducer.init(reducer.reference()); + typename ReducerType::value_type value; + reducer.init(value); for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - lambda(i,reducer.reference()); + lambda(i,value); } - loop_boundaries.thread.team_reduce(reducer); -} - -/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, ValueType & val) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes of the the calling thread and a reduction of - * val is performed using JoinType(ValueType& val, const ValueType& update) and put into init_result. - * The input value of init_result is used as initializer for temporary variables of ValueType. Therefore - * the input value should be the neutral element with respect to the join operation (e.g. '0 for +-' or - * '1 for *'). This functionality requires C++11 support.*/ -template< typename iType, class Lambda, typename ValueType, class JoinType > -KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, - const Lambda & lambda, const JoinType& join, ValueType& init_result) { - - ValueType result = init_result; - - for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i,tmp); - join(result,tmp); - } - - init_result = loop_boundaries.thread.team_reduce(result,Impl::JoinLambdaAdapter(join)); + loop_boundaries.thread.team_reduce(reducer,value); } } //namespace Kokkos @@ -1068,25 +1044,6 @@ parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct -KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct& - loop_boundaries, const Lambda & lambda, const JoinType& join, ValueType& result ) { - -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif - for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - lambda(i,result); - } -} /** \brief Intra-thread vector parallel exclusive prefix sum. Executes lambda(iType i, ValueType & val, bool final) * for each i=0..N-1. diff --git a/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp b/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp index 42269176ed..022a5fc188 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp @@ -52,7 +52,6 @@ #include -#include #include #include diff --git a/lib/kokkos/core/src/eti/CMakeLists.txt b/lib/kokkos/core/src/eti/CMakeLists.txt index a4db7a7eb6..a7e7717a6e 100644 --- a/lib/kokkos/core/src/eti/CMakeLists.txt +++ b/lib/kokkos/core/src/eti/CMakeLists.txt @@ -4,6 +4,9 @@ endif() if (KOKKOS_ENABLE_OPENMP) add_subdirectory(OpenMP) endif() +if (KOKKOS_ENABLE_HPX) + add_subdirectory(HPX) +endif() if (KOKKOS_ENABLE_ROCM) add_subdirectory(ROCm) endif() diff --git a/lib/kokkos/core/src/eti/HPX/CMakeLists.txt b/lib/kokkos/core/src/eti/HPX/CMakeLists.txt new file mode 100644 index 0000000000..131a2d2e6e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/CMakeLists.txt @@ -0,0 +1,148 @@ +set(D "${CMAKE_CURRENT_SOURCE_DIR}") +set(ETI_SOURCES +${ETI_SOURCES} +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp +PARENT_SCOPE) diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..905c97c54e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..a7632852ce --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..cff22240cf --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..2b667c674f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..cd1a445d81 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..3d805d5134 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..3883d581b6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..55f3e200a5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..ed6d57260b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..ed1954e683 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..fb8dadb8d0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..16a0ed3e9c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..f846f94a96 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..f4b51a1d78 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..622b3119bd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..de871103dd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..720e075aea --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..4c57c457c2 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..5a37da22c4 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..93a96ee554 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..dcfcc8a0e3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..7082701282 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..cbbd7c9ef3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..22d6fc5387 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..d44e95e67e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..ae79919c42 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..0c671ad593 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..24dd1c8354 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..6e2de8a02e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..38840ac9e6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..bcb105628b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..8730f92f20 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..785996558b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..3ae193ca65 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..81f91019d6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..d34a4870b9 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..0da5ed1770 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..444dad079b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..3f36a1d714 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..51c964b92d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..1a26522ff5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..9bd9af3fe3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..dd5a325535 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..30a44c0a80 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..0b73280c6e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..3997d8ca58 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..6cbaa59223 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..351001c8d1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..d37e34af30 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..7609d9478f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..30f0c1d882 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..4c4109e298 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..189245d352 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..921a8e88c7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..7e492aa25f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..13b1a78d7c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..03fa72c21c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..10a46bcd9d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..4c23c7e796 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..1bc7ab41f7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..0206838af6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..78b67a4a2a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..564f530d9b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..b5ae4ae52a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..b2c91a1aa1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..18e3f2b9b9 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..e3d08c6e38 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..5001fc2781 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..fd45308d15 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..d2fca73151 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..c7fafd4aec --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..046aafa6ad --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..60f78b7a57 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..304a5afc0d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..8aeaf8a1f8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..26ff7aefed --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..518d000eea --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..36b3b4fab8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..df5c890a49 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..b120215692 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..9b5e4c2e5f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..74ad489303 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..bc9dbc65c1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..fbd98c8011 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..d52c5306d0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..5cc29daaca --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..7e63d80236 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..11447c11b5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..bafe266044 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..e4ef20c370 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..fb00c3bfd3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..12718353e8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..c9ab75062d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..71380c21a2 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..9787086a80 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..81072d77cb --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..363b05bace --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..ce1bc89e01 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..4af590818c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..ad399eff76 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..661edef668 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..48cb4a34b1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..d2f88bb243 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..58ce6f1911 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..bc4efab1e4 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..6225cf9720 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..e50472d850 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..5ad427acc5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..4ae2437fc8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..02a2b8e1d9 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..ff693c9b4f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..d96960d4a7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..05c3ef68eb --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..d96f47ece0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..208933899e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..aa7d9b8f15 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..e43a1783fd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..6706074819 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..cd7082dcb3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..8735d58605 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..ec371dcba7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..354da99794 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..bbc32aba03 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..addbbb291a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..dbebda1594 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..f8a89b4226 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..7f0b9fc346 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..4a31e60a3a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..e876da3a6c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..a7ee2c554d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..4769c235bc --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..3ac618b5dd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..825bee722f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..44e24e57f3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..0b18c7e5c0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..951d770305 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..a0e80d764d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..d8cd0155af --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..c4bd8a043a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..566eb71e4d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..4b99a8fd0c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..6cf55bb5b4 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..932a322bac --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..f46a156a93 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX b/lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX new file mode 100644 index 0000000000..904f32fb82 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX @@ -0,0 +1,288 @@ +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp b/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp index d27c2e1306..50af5ec82e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp @@ -56,11 +56,12 @@ template < typename ExecutionSpace = void , typename IndexType = void , typename IterationPattern = void , typename LaunchBounds = void + , typename MyWorkItemProperty = Kokkos::Experimental::WorkItemProperty::None_t > struct PolicyTraitsBase { using type = PolicyTraitsBase< ExecutionSpace, Schedule, WorkTag, IndexType, - IterationPattern, LaunchBounds>; + IterationPattern, LaunchBounds, MyWorkItemProperty>; using execution_space = ExecutionSpace; using schedule_type = Schedule; @@ -68,8 +69,23 @@ struct PolicyTraitsBase using index_type = IndexType; using iteration_pattern = IterationPattern; using launch_bounds = LaunchBounds; + using work_item_property = MyWorkItemProperty; }; +template +struct SetWorkItemProperty +{ + static_assert( std::is_same::value + , "Kokkos Error: More than one work item property given" ); + using type = PolicyTraitsBase< typename PolicyBase::execution_space + , typename PolicyBase::schedule_type + , typename PolicyBase::work_tag + , typename PolicyBase::index_type + , typename PolicyBase::iteration_pattern + , typename PolicyBase::launch_bounds + , Property + >; +}; template struct SetExecutionSpace @@ -82,6 +98,7 @@ struct SetExecutionSpace , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -96,6 +113,7 @@ struct SetSchedule , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -110,6 +128,7 @@ struct SetWorkTag , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -124,6 +143,7 @@ struct SetIndexType , IndexType , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -139,6 +159,7 @@ struct SetIterationPattern , typename PolicyBase::index_type , IterationPattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -154,6 +175,7 @@ struct SetLaunchBounds , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , LaunchBounds + , typename PolicyBase::work_item_property >; }; @@ -170,8 +192,9 @@ struct AnalyzePolicy : public , typename std::conditional< std::is_integral::value , SetIndexType > , typename std::conditional< is_iteration_pattern::value, SetIterationPattern , typename std::conditional< is_launch_bounds::value , SetLaunchBounds + , typename std::conditional< Experimental::is_work_item_property::value, SetWorkItemProperty , SetWorkTag - >::type >::type >::type >::type >::type>::type::type + >::type >::type >::type >::type >::type>::type>::type::type , Traits... > {}; @@ -208,13 +231,15 @@ struct AnalyzePolicy , typename Base::launch_bounds >::type; + using work_item_property = typename Base::work_item_property; + using type = PolicyTraitsBase< execution_space , schedule_type , work_tag , index_type , iteration_pattern , launch_bounds - >; + , work_item_property>; }; template diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp index 3d99b07568..63067c137a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp @@ -53,6 +53,13 @@ #include #endif +#include +#include + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + namespace Kokkos { //---------------------------------------------------------------------------- @@ -326,7 +333,165 @@ bool atomic_compare_exchange_strong(volatile T* const dest, const T compare, con } //---------------------------------------------------------------------------- -} // namespace Kokkos +namespace Impl { +// memory-ordered versions are in the Impl namespace + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_seq_cst_t, MemoryOrderFailure +) +{ + Kokkos::memory_fence(); + auto rv = Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); + Kokkos::memory_fence(); + return rv; +} + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_acquire_t, MemoryOrderFailure +) +{ + auto rv = Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); + Kokkos::memory_fence(); + return rv; +} + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_release_t, MemoryOrderFailure +) +{ + Kokkos::memory_fence(); + return Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); +} + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_relaxed_t, MemoryOrderFailure +) +{ + return Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); +} + +#if (defined(KOKKOS_ENABLE_GNU_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || (defined(KOKKOS_ENABLE_INTEL_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#if defined(__CUDA_ARCH__) + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH __inline__ __device__ +#else + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH inline +#endif + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +bool _atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess, + MemoryOrderFailure, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrderSuccess::memory_order, + typename std::remove_cv::type + >::value + && std::is_same< + typename MemoryOrderFailure::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + return __atomic_compare_exchange_n( + dest, &compare, val, /* weak = */ false, + MemoryOrderSuccess::gnu_constant, + MemoryOrderFailure::gnu_constant + ); +} + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +bool _atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess order_success, + MemoryOrderFailure order_failure, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrderSuccess::memory_order, + typename std::remove_cv::type + >::value + && std::is_same< + typename MemoryOrderFailure::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + return _atomic_compare_exchange_fallback( + dest, compare, val, + order_success, order_failure + ); +} + +#else + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess order_success, + MemoryOrderFailure order_failure +) { + return _atomic_compare_exchange_strong_fallback( + dest, compare, val, order_success, order_failure + ); +} + +#endif + +// TODO static asserts in overloads that don't make sense (as listed in https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/_005f_005fatomic-Builtins.html) +template +KOKKOS_FORCEINLINE_FUNCTION +bool atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess order_success, + MemoryOrderFailure order_failure +) { + return _atomic_compare_exchange_strong(dest, compare, val, order_success, order_failure); +} + + +} // end namespace Impl + +} // namespace Kokkos + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp new file mode 100644 index 0000000000..3abc8ed4b7 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp @@ -0,0 +1,418 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) +#include +#endif + +#include +#include +#ifndef KOKKOS_ATOMIC_COMPARE_EXCHANGE_WEAK_HPP +#define KOKKOS_ATOMIC_COMPARE_EXCHANGE_WEAK_HPP + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +namespace Kokkos { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +// Cuda sm_70 or greater supports C++-like semantics directly + +#if defined( KOKKOS_ENABLE_CUDA ) + +#if defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) + + +#if __CUDA_ARCH__ >= 700 +// See: https://github.com/ogiroux/freestanding +# define kokkos_cuda_internal_cas_release_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.release.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_cas_acquire_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.acquire.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_cas_acq_rel_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.acq_rel.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_cas_relaxed_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.relaxed.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_fence_seq_cst() asm volatile("fence.sc.sys;" : : : "memory") +# define kokkos_cuda_internal_fence_acq_rel() asm volatile("fence.acq_rel.sys;" : : : "memory") +#else +# define kokkos_cuda_internal_fence_acq_rel() asm volatile("membar.sys;" : : : "memory") +# define kokkos_cuda_internal_fence_seq_cst() asm volatile("membar.sys;" : : : "memory") +#endif + + +// 32-bit version +template ::type = 0 +> +__inline__ __device__ +bool +atomic_compare_exchange_weak( + T volatile* const dest, + T* const expected, + T const desired, + std::memory_order success_order = std::memory_order_seq_cst, + std::memory_order failure_order = std::memory_order_seq_cst +) { + // TODO assert that success_order >= failure_order + // See: https://github.com/ogiroux/freestanding + int32_t tmp = 0; + int32_t old = 0; + memcpy(&tmp, &desired, sizeof(T)); + memcpy(&old, expected, sizeof(T)); + int32_t old_tmp = old; +#if __CUDA_ARCH__ >= 700 + switch(success_order) { + case std::memory_order_seq_cst: + // sequentially consistent is just an acquire with a seq_cst fence + kokkos_cuda_internal_fence_seq_cst(); + kokkos_cuda_internal_cas_acquire_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acquire: + kokkos_cuda_internal_cas_acquire_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_consume: + // same as acquire on PTX compatible platforms + kokkos_cuda_internal_cas_acquire_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acq_rel: + kokkos_cuda_internal_cas_acq_rel_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_release: + kokkos_cuda_internal_cas_release_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_relaxed: + kokkos_cuda_internal_cas_relaxed_32((T*)dest, old, old_tmp, tmp); + break; + }; +#else + // All of the orders that require a fence before the relaxed atomic operation: + if( + success_order == std::memory_order_release + || success_order == std::memory_order_acq_rel + ) { + kokkos_cuda_internal_fence_acq_rel(); + } + else if(success_order == std::memory_order_seq_cst) { + kokkos_cuda_internal_fence_seq_cst(); + } + // This is relaxed: + // Cuda API requires casting away volatile + atomicCAS((T*)dest, old_tmp, tmp); +#endif + bool const rv = (old == old_tmp); +#if __CUDA_ARCH__ < 700 + if(rv) { + if( + success_order == std::memory_order_acquire + || success_order == std::memory_order_consume + || success_order == std::memory_order_acq_rel + ) { + kokkos_cuda_internal_fence_acq_rel(); + } + else if(success_order == std::memory_order_seq_cst) { + kokkos_cuda_internal_fence_seq_cst(); + } + } + else { + if( + failure_order == std::memory_order_acquire + || failure_order == std::memory_order_consume + || failure_order == std::memory_order_acq_rel + ) { + kokkos_cuda_internal_fence_acq_rel(); + } + else if(failure_order == std::memory_order_seq_cst) { + kokkos_cuda_internal_fence_seq_cst(); + } + } +#endif + memcpy(expected, &old, sizeof(T)); + return rv; +} + +// 64-bit version +template ::type = 0 +> +bool +atomic_compare_exchange_weak( + T volatile* const dest, + T* const expected, + T const desired, + std::memory_order success_order = std::memory_order_seq_cst, + std::memory_order failure_order = std::memory_order_seq_cst +) { + // TODO assert that success_order >= failure_order + // See: https://github.com/ogiroux/freestanding + int64_t tmp = 0; + int64_t old = 0; + memcpy(&tmp, &desired, sizeof(T)); + memcpy(&old, expected, sizeof(T)); + int64_t old_tmp = old; +#if __CUDA_ARCH__ >= 700 + switch(success_order) { + case std::memory_order_seq_cst: + // sequentially consistent is just an acquire with a seq_cst fence + kokkos_cuda_internal_fence_seq_cst(); + kokkos_cuda_internal_cas_acquire_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acquire: + kokkos_cuda_internal_cas_acquire_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_consume: + // same as acquire on PTX compatible platforms + kokkos_cuda_internal_cas_acquire_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acq_rel: + kokkos_cuda_internal_cas_acq_rel_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_release: + kokkos_cuda_internal_cas_release_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_relaxed: + kokkos_cuda_internal_cas_relaxed_64((T*)dest, old, old_tmp, tmp); + break; + }; +#else + // Cuda API requires casting away volatile + atomicCAS((T*)dest, old_tmp, tmp); +#endif + bool const rv = (old == old_tmp); + memcpy(expected, &old, sizeof(T)); + return rv; +} + +#endif // defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) + +#endif // defined( KOKKOS_ENABLE_CUDA ) + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +// GCC native CAS supports int, long, unsigned int, unsigned long. +// Intel native CAS support int and long with the same interface as GCC. +#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) +#if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) + +inline +int atomic_compare_exchange( volatile int * const dest, const int compare, const int val) +{ +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + return __sync_val_compare_and_swap(dest,compare,val); +} + +inline +long atomic_compare_exchange( volatile long * const dest, const long compare, const long val ) +{ +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + return __sync_val_compare_and_swap(dest,compare,val); +} + +#if defined( KOKKOS_ENABLE_GNU_ATOMICS ) + +// GCC supports unsigned + +inline +unsigned int atomic_compare_exchange( volatile unsigned int * const dest, const unsigned int compare, const unsigned int val ) +{ return __sync_val_compare_and_swap(dest,compare,val); } + +inline +unsigned long atomic_compare_exchange( volatile unsigned long * const dest , + const unsigned long compare , + const unsigned long val ) +{ return __sync_val_compare_and_swap(dest,compare,val); } + +#endif + +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest, const T & compare, + typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T & >::type val ) +{ + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {}; + } tmp ; + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + tmp.i = __sync_val_compare_and_swap( (int*) dest , *((int*)&compare) , *((int*)&val) ); + return tmp.t ; +} + +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest, const T & compare, + typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && + sizeof(T) == sizeof(long) , const T & >::type val ) +{ + union U { + long i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {}; + } tmp ; + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + tmp.i = __sync_val_compare_and_swap( (long*) dest , *((long*)&compare) , *((long*)&val) ); + return tmp.t ; +} + +#if defined( KOKKOS_ENABLE_ASM) && defined ( KOKKOS_ENABLE_ISA_X86_64 ) +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest, const T & compare, + typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && + sizeof(T) != sizeof(long) && + sizeof(T) == sizeof(Impl::cas128_t), const T & >::type val ) +{ + union U { + Impl::cas128_t i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {}; + } tmp ; + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + tmp.i = Impl::cas128( (Impl::cas128_t*) dest , *((Impl::cas128_t*)&compare) , *((Impl::cas128_t*)&val) ); + return tmp.t ; +} +#endif + +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest , const T compare , + typename Kokkos::Impl::enable_if< + ( sizeof(T) != 4 ) + && ( sizeof(T) != 8 ) + #if defined(KOKKOS_ENABLE_ASM) && defined ( KOKKOS_ENABLE_ISA_X86_64 ) + && ( sizeof(T) != 16 ) + #endif + , const T >::type& val ) +{ +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + while( !Impl::lock_address_host_space( (void*) dest ) ); + T return_val = *dest; + if( return_val == compare ) { + // Don't use the following line of code here: + // + //const T tmp = *dest = val; + // + // Instead, put each assignment in its own statement. This is + // because the overload of T::operator= for volatile *this should + // return void, not volatile T&. See Kokkos #177: + // + // https://github.com/kokkos/kokkos/issues/177 + *dest = val; + const T tmp = *dest; + #ifndef KOKKOS_COMPILER_CLANG + (void) tmp; + #endif + } + Impl::unlock_address_host_space( (void*) dest ); + return return_val; +} +//---------------------------------------------------------------------------- + +#elif defined( KOKKOS_ENABLE_OPENMP_ATOMICS ) + +template< typename T > +KOKKOS_INLINE_FUNCTION +T atomic_compare_exchange( volatile T * const dest, const T compare, const T val ) +{ + T retval; +#pragma omp critical + { + retval = dest[0]; + if ( retval == compare ) + dest[0] = val; + } + return retval; +} + +#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS ) + +template< typename T > +KOKKOS_INLINE_FUNCTION +T atomic_compare_exchange( volatile T * const dest_v, const T compare, const T val ) +{ + T* dest = const_cast(dest_v); + T retval = *dest; + if (retval == compare) *dest = val; + return retval; +} + +#endif +#endif +#endif // !defined ROCM_ATOMICS + +template +KOKKOS_INLINE_FUNCTION +bool atomic_compare_exchange_strong(volatile T* const dest, const T compare, const T val) +{ + return compare == atomic_compare_exchange(dest, compare, val); +} +//---------------------------------------------------------------------------- + +} // namespace Kokkos + +#endif + diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp index d6fab81133..495fd48477 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp @@ -90,10 +90,12 @@ __inline__ __device__ T atomic_fetch_add( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union U { + // to work around a bug in the clang cuda compiler, the name here needs to be + // different from the one internal to the other overloads + union U1 { int i ; T t ; - KOKKOS_INLINE_FUNCTION U() {}; + KOKKOS_INLINE_FUNCTION U1() {}; } assume , oldval , newval ; oldval.t = *dest ; @@ -113,10 +115,12 @@ T atomic_fetch_add( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union U { + // to work around a bug in the clang cuda compiler, the name here needs to be + // different from the one internal to the other overloads + union U2 { unsigned long long int i ; T t ; - KOKKOS_INLINE_FUNCTION U() {}; + KOKKOS_INLINE_FUNCTION U2() {}; } assume , oldval , newval ; oldval.t = *dest ; @@ -176,7 +180,7 @@ T atomic_fetch_add( volatile T * const dest , #if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) -#if defined( KOKKOS_ENABLE_ASM ) && defined ( KOKKOS_ENABLE_ISA_X86_64 ) +#if defined( KOKKOS_ENABLE_ASM ) && (defined(KOKKOS_ENABLE_ISA_X86_64) || defined(KOKKOS_KNL_USE_ASM_WORKAROUND)) inline int atomic_fetch_add( volatile int * dest , const int val ) { diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp index 48dc8731ef..7a4f95cd99 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp @@ -89,7 +89,11 @@ __inline__ __device__ T atomic_fetch_sub( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union { int i ; T t ; } oldval , assume , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; @@ -108,7 +112,11 @@ T atomic_fetch_sub( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union { unsigned long long int i ; T t ; } oldval , assume , newval ; + union U { + unsigned long long int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; @@ -211,7 +219,11 @@ inline T atomic_fetch_sub( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union { int i ; T t ; } assume , oldval , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; #if defined( KOKKOS_ENABLE_RFO_PREFETCH ) _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); @@ -238,7 +250,11 @@ T atomic_fetch_sub( volatile T * const dest , _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); #endif - union { long i ; T t ; } assume , oldval , newval ; + union U { + long i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp index a3a18166af..c1a7d80364 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp @@ -156,13 +156,17 @@ T atomic_fetch_oper( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union { unsigned long long int i ; T t ; } oldval , assume , newval ; + union U { + unsigned long long int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; do { assume.i = oldval.i ; - newval.t = Oper::apply(assume.t, val) ; + newval.t = op.apply(assume.t, val) ; oldval.i = Kokkos::atomic_compare_exchange( (unsigned long long int*)dest , assume.i , newval.i ); } while ( assume.i != oldval.i ); @@ -175,7 +179,11 @@ T atomic_oper_fetch( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union { unsigned long long int i ; T t ; } oldval , assume , newval ; + union U { + unsigned long long int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; @@ -193,13 +201,17 @@ KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union { int i ; T t ; } oldval , assume , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; do { assume.i = oldval.i ; - newval.t = Oper::apply(assume.t, val) ; + newval.t = op.apply(assume.t, val) ; oldval.i = Kokkos::atomic_compare_exchange( (int*)dest , assume.i , newval.i ); } while ( assume.i != oldval.i ); @@ -211,7 +223,11 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int), const T >::type val ) { - union { int i ; T t ; } oldval , assume , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp new file mode 100644 index 0000000000..2db74b9f1e --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp @@ -0,0 +1,266 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_KOKKOS_ATOMIC_LOAD_HPP +#define KOKKOS_IMPL_KOKKOS_ATOMIC_LOAD_HPP + +#include +#if defined(KOKKOS_ATOMIC_HPP) + +#include + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +namespace Kokkos { +namespace Impl { + +// Olivier's implementation helpfully binds to the same builtins as GNU, so +// we make this code common across multiple options +#if (defined(KOKKOS_ENABLE_GNU_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || (defined(KOKKOS_ENABLE_INTEL_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#if defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH __inline__ __device__ +#else + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH inline +#endif + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +T _atomic_load( + T* ptr, MemoryOrder, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + return __atomic_load_n(ptr, MemoryOrder::gnu_constant); +} + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +T _atomic_load( + T* ptr, MemoryOrder, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_default_constructible::value + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + T rv{}; + __atomic_load(ptr, &rv, MemoryOrder::gnu_constant); + return rv; +} + +#undef KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH + +#elif defined(__CUDA_ARCH__) + +// Not compiling for Volta or later, or Cuda ASM atomics were manually disabled + +template +__device__ __inline__ +T _relaxed_atomic_load_impl( + T* ptr, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + return *ptr; +} + +template +struct NoOpOper { + __device__ __inline__ + static constexpr T apply(T const&, T const&) noexcept { } +}; + +template +__device__ __inline__ +T _relaxed_atomic_load_impl( + T* ptr, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + T rv{}; + // TODO remove a copy operation here? + Kokkos::atomic_oper_fetch(NoOpOper{}, &rv, rv); + return rv; +} + +template +__device__ __inline__ +T _atomic_load(T* ptr, memory_order_seq_cst_t) { + Kokkos::memory_fence(); + T rv = Impl::_relaxed_atomic_load_impl(ptr); + Kokkos::memory_fence(); + return rv; +} + +template +__device__ __inline__ +T _atomic_load(T* ptr, memory_order_acquire_t) { + T rv = Impl::_relaxed_atomic_load_impl(ptr); + Kokkos::memory_fence(); + return rv; +} + +template +__device__ __inline__ +T _atomic_load(T* ptr, memory_order_relaxed_t) { + return _relaxed_atomic_load_impl(ptr); +} + +#elif defined(KOKKOS_ENABLE_OPENMP_ATOMICS) + +template +inline +T _atomic_load(T* ptr, MemoryOrder) +{ + // AFAICT, all OpenMP atomics are sequentially consistent, so memory order doesn't matter + T retval{ }; +#pragma omp atomic read + { + retval = *ptr; + } + return retval; +} + +#elif defined(KOKKOS_ENABLE_SERIAL_ATOMICS) + +template +inline +T _atomic_load(T* ptr, MemoryOrder) +{ + return *ptr; +} + +#endif // end of all atomic implementations + + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_seq_cst_t) { + return _atomic_load(ptr, Impl::memory_order_seq_cst); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_acquire_t) { + return _atomic_load(ptr, Impl::memory_order_acquire); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_relaxed_t) { + return _atomic_load(ptr, Impl::memory_order_relaxed); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_release_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_load with memory order release doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_acq_rel_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_load with memory order acq_rel doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr) { + // relaxed by default! + return _atomic_load(ptr, Impl::memory_order_relaxed); +} + +} // end namespace Impl +} // end namespace Kokkos + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +#endif // defined(KOKKOS_ATOMIC_HPP) +#endif //KOKKOS_IMPL_KOKKOS_ATOMIC_LOAD_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp new file mode 100644 index 0000000000..7b9c08551c --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp @@ -0,0 +1,122 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_KOKKOS_ATOMIC_MEMORY_ORDER_HPP +#define KOKKOS_KOKKOS_ATOMIC_MEMORY_ORDER_HPP + +#include + +#include + +namespace Kokkos { +namespace Impl { + +/** @file + * Provides strongly-typed analogs of the standard memory order enumerators. + * In addition to (very slightly) reducing the constant propagation burden on + * the compiler, this allows us to give compile-time errors for things that + * don't make sense, like atomic_load with memory order release. + */ + +struct memory_order_seq_cst_t { + using memory_order = memory_order_seq_cst_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_SEQ_CST; +#endif + static constexpr auto std_constant = std::memory_order_seq_cst; +}; +constexpr memory_order_seq_cst_t memory_order_seq_cst = { }; + +struct memory_order_relaxed_t { + using memory_order = memory_order_relaxed_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_RELAXED; +#endif + static constexpr auto std_constant = std::memory_order_relaxed; +}; +constexpr memory_order_relaxed_t memory_order_relaxed = { }; + +struct memory_order_acquire_t { + using memory_order = memory_order_acquire_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_ACQUIRE; +#endif + static constexpr auto std_constant = std::memory_order_acquire; +}; +constexpr memory_order_acquire_t memory_order_acquire = { }; + +struct memory_order_release_t { + using memory_order = memory_order_release_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_RELEASE; +#endif + static constexpr auto std_constant = std::memory_order_release; +}; +constexpr memory_order_release_t memory_order_release = { }; + +struct memory_order_acq_rel_t { + using memory_order = memory_order_acq_rel_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_ACQ_REL; +#endif + static constexpr auto std_constant = std::memory_order_acq_rel; +}; +constexpr memory_order_acq_rel_t memory_order_acq_rel = { }; + + +// Intentionally omit consume (for now) + +} // end namespace Impl +} // end namespace Kokkos + +#endif //KOKKOS_KOKKOS_ATOMIC_MEMORY_ORDER_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp new file mode 100644 index 0000000000..066f90480d --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp @@ -0,0 +1,258 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_KOKKOS_ATOMIC_STORE_HPP +#define KOKKOS_IMPL_KOKKOS_ATOMIC_STORE_HPP + +#include +#if defined(KOKKOS_ATOMIC_HPP) + +#include + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +namespace Kokkos { +namespace Impl { + +// Olivier's implementation helpfully binds to the same builtins as GNU, so +// we make this code common across multiple options +#if (defined(KOKKOS_ENABLE_GNU_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || (defined(KOKKOS_ENABLE_INTEL_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#if defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH __inline__ __device__ +#else + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH inline +#endif + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +void _atomic_store( + T* ptr, T val, MemoryOrder, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + __atomic_store_n(ptr, val, MemoryOrder::gnu_constant); +} + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +void _atomic_store( + T* ptr, T val, MemoryOrder, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_default_constructible::value + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + __atomic_store(ptr, &val, MemoryOrder::gnu_constant); +} + +#undef KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH + +#elif defined(__CUDA_ARCH__) + +// Not compiling for Volta or later, or Cuda ASM atomics were manually disabled + +template +__device__ __inline__ +void _relaxed_atomic_store_impl( + T* ptr, T val, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + *ptr = val; +} + +template +struct StoreOper { + __device__ __inline__ + static constexpr T apply(T const&, T const& val) noexcept { return val; } +}; + +template +__device__ __inline__ +void _relaxed_atomic_store_impl( + T* ptr, T val, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + Kokkos::atomic_oper_fetch(StoreOper{}, &rv, (T&&)val); +} + +template +__device__ __inline__ +void _atomic_store(T* ptr, T val, memory_order_seq_cst_t) { + Kokkos::memory_fence(); + Impl::_relaxed_atomic_store_impl(ptr, val); + Kokkos::memory_fence(); + return rv; +} + +template +__device__ __inline__ +void _atomic_store(T* ptr, T val, memory_order_release_t) { + Kokkos::memory_fence(); + _relaxed_atomic_store_impl(ptr, val); +} + +template +__device__ __inline__ +void _atomic_store(T* ptr, T val, memory_order_relaxed_t) { + _relaxed_atomic_store_impl(ptr, val); +} + +#elif defined(KOKKOS_ENABLE_OPENMP_ATOMICS) + +template +inline +void _atomic_store(T* ptr, T val, MemoryOrder) +{ + // AFAICT, all OpenMP atomics are sequentially consistent, so memory order doesn't matter +#pragma omp atomic write + { + *ptr = val; + } +} + +#elif defined(KOKKOS_ENABLE_SERIAL_ATOMICS) + +template +inline +void _atomic_store(T* ptr, T val, MemoryOrder) +{ + *ptr = val; +} + +#endif // end of all atomic implementations + + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_seq_cst_t) { + _atomic_store(ptr, val, Impl::memory_order_seq_cst); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_release_t) { + _atomic_store(ptr, val, Impl::memory_order_release); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_relaxed_t) { + _atomic_store(ptr, val, Impl::memory_order_relaxed); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_acquire_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_store with memory order acquire doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_acq_rel_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_store with memory order acq_rel doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val) { + // relaxed by default! + _atomic_store(ptr, Impl::memory_order_relaxed); +} + +} // end namespace Impl +} // end namespace Kokkos + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +#endif // defined(KOKKOS_ATOMIC_HPP) +#endif //KOKKOS_IMPL_KOKKOS_ATOMIC_STORE_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp b/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp new file mode 100644 index 0000000000..f86e68cb1d --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp @@ -0,0 +1,314 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_LOCKFREEDEQUE_HPP +#define KOKKOS_IMPL_LOCKFREEDEQUE_HPP + +#include +#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using CUDA + +#include + +#include +#include +#include // KOKKOS_EXPECTS +#include // KOKKOS_EXPECTS + +#include // atomic_compare_exchange, atomic_fence +#include "Kokkos_LIFO.hpp" + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +struct fixed_size_circular_buffer { +public: + + using node_type = NodeType; + using size_type = SizeType; + +private: + + node_type* m_buffer[CircularBufferSize] = { nullptr }; + +public: + + fixed_size_circular_buffer() = default; + fixed_size_circular_buffer(fixed_size_circular_buffer const&) = delete; + fixed_size_circular_buffer(fixed_size_circular_buffer&&) = default; + fixed_size_circular_buffer& operator=(fixed_size_circular_buffer const&) = delete; + fixed_size_circular_buffer& operator=(fixed_size_circular_buffer&&) = default; + ~fixed_size_circular_buffer() = default; + + KOKKOS_FORCEINLINE_FUNCTION + static constexpr size_type size() noexcept { + return size_type(CircularBufferSize); + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type* operator[](size_type idx) const noexcept { + return m_buffer[idx % size()]; + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type*& operator[](size_type idx) noexcept { + return m_buffer[idx % size()]; + } +}; + +template +struct non_owning_variable_size_circular_buffer { +public: + + using node_type = NodeType; + using size_type = SizeType; + +private: + + ObservingRawPtr m_buffer = nullptr; + size_type m_size = 0; + +public: + + KOKKOS_INLINE_FUNCTION + non_owning_variable_size_circular_buffer( + ObservingRawPtr buffer, + size_type arg_size + ) noexcept + : m_buffer(buffer), + m_size(arg_size) + { } + + non_owning_variable_size_circular_buffer() = default; + non_owning_variable_size_circular_buffer(non_owning_variable_size_circular_buffer const&) = delete; + non_owning_variable_size_circular_buffer(non_owning_variable_size_circular_buffer&&) = default; + non_owning_variable_size_circular_buffer& operator=(non_owning_variable_size_circular_buffer const&) = delete; + non_owning_variable_size_circular_buffer& operator=(non_owning_variable_size_circular_buffer&&) = default; + ~non_owning_variable_size_circular_buffer() = default; + + KOKKOS_FORCEINLINE_FUNCTION + constexpr size_type size() const noexcept { + return m_size; + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type* operator[](size_type idx) const noexcept { + return m_buffer[idx % size()]; + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type*& operator[](size_type idx) noexcept { + return m_buffer[idx % size()]; + } +}; + +/** Based on "Correct and Efficient Work-Stealing for Weak Memory Models," + * PPoPP '13, https://www.di.ens.fr/~zappa/readings/ppopp13.pdf + * + */ +template < + class T, + class CircularBufferT, + class SizeType = int32_t +> +struct ChaseLevDeque { +public: + + using size_type = SizeType; + using value_type = T; + // Still using intrusive linked list for waiting queue + using node_type = SimpleSinglyLinkedListNode<>; + +private: + + // TODO @tasking @new_feature DSH variable size circular buffer? + + CircularBufferT m_array; + size_type m_top = 0; + size_type m_bottom = 0; + + +public: + + template < + class _ignore=void, + class=typename std::enable_if< + std::is_default_constructible::value + >::type + > + ChaseLevDeque() : m_array() { } + + explicit + ChaseLevDeque(CircularBufferT buffer) + : m_array(std::move(buffer)) + { } + + KOKKOS_INLINE_FUNCTION + bool empty() const { + // TODO @tasking @memory_order DSH memory order + return m_top > m_bottom - 1; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + pop() { + auto b = m_bottom - 1; // atomic load relaxed + auto& a = m_array; // atomic load relaxed + m_bottom = b; // atomic store relaxed + Kokkos::memory_fence(); // memory order seq_cst + auto t = m_top; // atomic load relaxed + OptionalRef return_value; + if(t <= b) { + /* non-empty queue */ + return_value = *static_cast(a[b]); // relaxed load + if(t == b) { + /* single last element in the queue. */ + if(not Impl::atomic_compare_exchange_strong(&m_top, t, t+1, memory_order_seq_cst, memory_order_relaxed)) { + /* failed race, someone else stole it */ + return_value = nullptr; + } + m_bottom = b + 1; // memory order relaxed + } + } else { + /* empty queue */ + m_bottom = b + 1; // memory order relaxed + } + return return_value; + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type&& node) + { + // Just forward to the lvalue version + return push(node); + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type& node) + { + auto b = m_bottom; // memory order relaxed + auto t = Impl::atomic_load(&m_top, memory_order_acquire); + auto& a = m_array; + if(b - t > a.size() - 1) { + /* queue is full, resize */ + //m_array = a->grow(); + //a = m_array; + return false; + } + a[b] = &node; // relaxed + Impl::atomic_store(&m_bottom, b + 1, memory_order_release); + return true; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + steal() { + auto t = m_top; // TODO @tasking @memory_order DSH: atomic load acquire + Kokkos::memory_fence(); // seq_cst fence, so why does the above need to be acquire? + auto b = Impl::atomic_load(&m_bottom, memory_order_acquire); + OptionalRef return_value; + if(t < b) { + /* Non-empty queue */ + auto& a = m_array; // TODO @tasking @memory_order DSH: technically consume ordered, but acquire should be fine + Kokkos::load_fence(); // TODO @tasking @memory_order DSH memory order instead of fence + return_value = *static_cast(a[t]); // relaxed + if(not Impl::atomic_compare_exchange_strong(&m_top, t, t+1, memory_order_seq_cst, memory_order_relaxed)) { + return_value = nullptr; + } + } + return return_value; + } + +}; + +/* + // The atomicity of this load was more important in the paper's version + // because that version had a circular buffer that could grow. We're + // essentially using the memory order in this version as a fence, which + // may be unnecessary + auto buffer_ptr = (node_type***)&m_array.buffer; + auto a = Impl::atomic_load(buffer_ptr, memory_order_acquire); // technically consume ordered, but acquire should be fine + return_value = *static_cast(a[t % m_array->size]); // relaxed; we'd have to replace the m_array->size if we ever allow growth +*/ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +struct TaskQueueTraitsChaseLev { + + template + using ready_queue_type = ChaseLevDeque< + Task, + fixed_size_circular_buffer, CircularBufferSize, int32_t>, + int32_t + >; + + template + using waiting_queue_type = SingleConsumeOperationLIFO; + + template + using intrusive_task_base_type = + typename ready_queue_type::node_type; + + static constexpr auto ready_queue_insertion_may_fail = true; + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined KOKKOS_ENABLE_TASKDAG */ +#endif /* #ifndef KOKKOS_IMPL_LOCKFREEDEQUE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Core.cpp b/lib/kokkos/core/src/impl/Kokkos_Core.cpp index 82fdee4399..0d472e98bb 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Core.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Core.cpp @@ -85,7 +85,8 @@ setenv("MEMKIND_HBW_NODES", "1", 0); } // Protect declarations, to prevent "unused variable" warnings. -#if defined( KOKKOS_ENABLE_OPENMP ) || defined( KOKKOS_ENABLE_THREADS ) || defined( KOKKOS_ENABLE_OPENMPTARGET ) +#if defined( KOKKOS_ENABLE_OPENMP ) || defined( KOKKOS_ENABLE_THREADS ) ||\ + defined( KOKKOS_ENABLE_OPENMPTARGET ) || defined ( KOKKOS_ENABLE_HPX ) const int num_threads = args.num_threads; #endif #if defined( KOKKOS_ENABLE_THREADS ) || defined( KOKKOS_ENABLE_OPENMPTARGET ) @@ -160,6 +161,21 @@ setenv("MEMKIND_HBW_NODES", "1", 0); } #endif +#if defined( KOKKOS_ENABLE_HPX ) + if( std::is_same< Kokkos::Experimental::HPX , Kokkos::DefaultExecutionSpace >::value || + std::is_same< Kokkos::Experimental::HPX , Kokkos::HostSpace::execution_space >::value ) { + if(num_threads>0) { + Kokkos::Experimental::HPX::impl_initialize(num_threads); + } else { + Kokkos::Experimental::HPX::impl_initialize(); + } + //std::cout << "Kokkos::initialize() fyi: HPX enabled and initialized" << std::endl ; + } + else { + //std::cout << "Kokkos::initialize() fyi: HPX enabled but not initialized" << std::endl ; + } +#endif + #if defined( KOKKOS_ENABLE_SERIAL ) // Prevent "unused variable" warning for 'args' input struct. If // Serial::initialize() ever needs to take arguments from the input @@ -268,6 +284,8 @@ void finalize_internal( const bool all_spaces = false ) Kokkos::Cuda::impl_finalize(); #endif } +#else + (void)all_spaces; #endif #if defined( KOKKOS_ENABLE_ROCM ) @@ -298,6 +316,15 @@ void finalize_internal( const bool all_spaces = false ) } #endif +#if defined( KOKKOS_ENABLE_HPX ) + if( std::is_same< Kokkos::Experimental::HPX , Kokkos::DefaultExecutionSpace >::value || + std::is_same< Kokkos::Experimental::HPX , Kokkos::HostSpace::execution_space >::value || + all_spaces ) { + if(Kokkos::Experimental::HPX::impl_is_initialized()) + Kokkos::Experimental::HPX::impl_finalize(); + } +#endif + #if defined( KOKKOS_ENABLE_THREADS ) if( std::is_same< Kokkos::Threads , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::Threads , Kokkos::HostSpace::execution_space >::value || @@ -331,34 +358,38 @@ void fence_internal() #if defined( KOKKOS_ENABLE_CUDA ) if( std::is_same< Kokkos::Cuda , Kokkos::DefaultExecutionSpace >::value ) { - Kokkos::Cuda::fence(); + Kokkos::Cuda::impl_static_fence(); } #endif #if defined( KOKKOS_ENABLE_ROCM ) if( std::is_same< Kokkos::Experimental::ROCm , Kokkos::DefaultExecutionSpace >::value ) { - Kokkos::Experimental::ROCm::fence(); + Kokkos::Experimental::ROCm().fence(); } #endif #if defined( KOKKOS_ENABLE_OPENMP ) if( std::is_same< Kokkos::OpenMP , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::OpenMP , Kokkos::HostSpace::execution_space >::value ) { - Kokkos::OpenMP::fence(); + Kokkos::OpenMP::impl_static_fence(); } #endif +#if defined( KOKKOS_ENABLE_HPX ) + Kokkos::Experimental::HPX::impl_static_fence(); +#endif + #if defined( KOKKOS_ENABLE_THREADS ) if( std::is_same< Kokkos::Threads , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::Threads , Kokkos::HostSpace::execution_space >::value ) { - Kokkos::Threads::fence(); + Kokkos::Threads::impl_static_fence(); } #endif #if defined( KOKKOS_ENABLE_SERIAL ) if( std::is_same< Kokkos::Serial , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::Serial , Kokkos::HostSpace::execution_space >::value ) { - Kokkos::Serial::fence(); + Kokkos::Serial::impl_static_fence(); } #endif @@ -708,6 +739,12 @@ void print_configuration( std::ostream & out , const bool detail ) msg << "yes" << std::endl; #else msg << "no" << std::endl; +#endif + msg << " KOKKOS_ENABLE_HPX: "; +#ifdef KOKKOS_ENABLE_HPX + msg << "yes" << std::endl; +#else + msg << "no" << std::endl; #endif msg << " KOKKOS_ENABLE_THREADS: "; #ifdef KOKKOS_ENABLE_THREADS @@ -957,6 +994,9 @@ void print_configuration( std::ostream & out , const bool detail ) #ifdef KOKKOS_ENABLE_OPENMP OpenMP::print_configuration(msg, detail); #endif +#ifdef KOKKOS_ENABLE_HPX + Experimental::HPX::print_configuration(msg, detail); +#endif #if defined( KOKKOS_ENABLE_THREADS ) Threads::print_configuration(msg, detail); #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_EBO.hpp b/lib/kokkos/core/src/impl/Kokkos_EBO.hpp new file mode 100644 index 0000000000..69bb74e2c5 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_EBO.hpp @@ -0,0 +1,343 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_EBO_HPP +#define KOKKOS_EBO_HPP + +//---------------------------------------------------------------------------- + +#include + +#include +//---------------------------------------------------------------------------- + + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +struct NotOnDeviceCtorDisambiguator { }; + +template +struct NoCtorsNotOnDevice : std::false_type { }; + +template +struct DefaultCtorNotOnDevice : std::false_type { }; + +template <> +struct DefaultCtorNotOnDevice<> : std::true_type { }; + +template class CtorNotOnDevice = NoCtorsNotOnDevice> +struct EBOBaseImpl; + +template class CtorNotOnDevice> +struct EBOBaseImpl { + + /* + * Workaround for constexpr in C++11: we need to still call T(args...), but we + * can't do so in the body of a constexpr function (in C++11), and there's no + * data member to construct into. But we can construct into an argument + * of a delegating constructor... + */ + // TODO @minor DSH the destructor gets called too early with this workaround + struct _constexpr_14_workaround_tag { }; + struct _constexpr_14_workaround_no_device_tag { }; + KOKKOS_FORCEINLINE_FUNCTION + constexpr EBOBaseImpl(_constexpr_14_workaround_tag, T&&) noexcept { } + inline constexpr EBOBaseImpl(_constexpr_14_workaround_no_device_tag, T&&) noexcept { } + + template < + class... Args, + class _ignored = void, + typename std::enable_if< + std::is_void<_ignored>::value + && std::is_constructible::value + && !CtorNotOnDevice::value, + int + >::type = 0 + > + KOKKOS_FORCEINLINE_FUNCTION + constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + // still call the constructor + : EBOBaseImpl(_constexpr_14_workaround_tag{}, T(std::forward(args)...)) + { } + + template < + class... Args, + class _ignored=void, + typename std::enable_if< + std::is_void<_ignored>::value + && std::is_constructible::value + && CtorNotOnDevice::value, + long + >::type = 0 + > + inline constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + // still call the constructor + : EBOBaseImpl(_constexpr_14_workaround_no_device_tag{}, T(std::forward(args)...)) + { } + + KOKKOS_FORCEINLINE_FUNCTION + constexpr EBOBaseImpl(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + constexpr EBOBaseImpl(EBOBaseImpl&&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl&&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + ~EBOBaseImpl() = default; + + KOKKOS_INLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T& _ebo_data_member() & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + constexpr + T const& _ebo_data_member() const & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + T volatile& _ebo_data_member() volatile & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + T const volatile& _ebo_data_member() const volatile & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T&& _ebo_data_member() && { + return std::move(*reinterpret_cast(this)); + } + +}; + +template class CTorsNotOnDevice> +struct EBOBaseImpl { + + T m_ebo_object; + + template < + class... Args, + class _ignored=void, + typename std::enable_if< + std::is_void<_ignored>::value + && !CTorsNotOnDevice::value + && std::is_constructible::value, + int + >::type = 0 + > + KOKKOS_FORCEINLINE_FUNCTION + constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + : m_ebo_object(std::forward(args)...) + { } + + template < + class... Args, + class _ignored=void, + typename std::enable_if< + std::is_void<_ignored>::value + && CTorsNotOnDevice::value + && std::is_constructible::value, + long + >::type = 0 + > + inline + constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + : m_ebo_object(std::forward(args)...) + { } + + + // TODO @tasking @minor DSH noexcept in the right places? + + KOKKOS_FORCEINLINE_FUNCTION + constexpr + EBOBaseImpl(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + constexpr + EBOBaseImpl(EBOBaseImpl&&) noexcept = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl&&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + ~EBOBaseImpl() = default; + + KOKKOS_INLINE_FUNCTION + T& _ebo_data_member() & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T const& _ebo_data_member() const & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T volatile& _ebo_data_member() volatile & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T const volatile& _ebo_data_member() const volatile & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T&& _ebo_data_member() && { + return m_ebo_object; + } + +}; + +/** + * + * @tparam T + */ +template class CtorsNotOnDevice=NoCtorsNotOnDevice> +struct StandardLayoutNoUniqueAddressMemberEmulation + : EBOBaseImpl::value, CtorsNotOnDevice> +{ +private: + + using ebo_base_t = EBOBaseImpl::value, CtorsNotOnDevice>; + +public: + + using ebo_base_t::ebo_base_t; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T& no_unique_address_data_member() & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + constexpr + T const& no_unique_address_data_member() const & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + T volatile& no_unique_address_data_member() volatile & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + T const volatile& no_unique_address_data_member() const volatile & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T&& no_unique_address_data_member() && { + return this->ebo_base_t::_ebo_data_member(); + } +}; + +/** + * + * @tparam T + */ +template class CtorsNotOnDevice=NoCtorsNotOnDevice> +class NoUniqueAddressMemberEmulation + : private StandardLayoutNoUniqueAddressMemberEmulation +{ +private: + + using base_t = StandardLayoutNoUniqueAddressMemberEmulation; + +public: + + using base_t::base_t; + using base_t::no_unique_address_data_member; + +}; + + +} // end namespace Impl +} // end namespace Kokkos + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + +#endif /* #ifndef KOKKOS_EBO_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Error.hpp b/lib/kokkos/core/src/impl/Kokkos_Error.hpp index e7d5f9344c..3d634fe5d1 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Error.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Error.hpp @@ -51,6 +51,10 @@ #include #endif +#ifndef KOKKOS_ABORT_MESSAGE_BUFFER_SIZE +# define KOKKOS_ABORT_MESSAGE_BUFFER_SIZE 2048 +#endif // ifndef KOKKOS_ABORT_MESSAGE_BUFFER_SIZE + namespace Kokkos { namespace Impl { @@ -83,6 +87,50 @@ void abort( const char * const message ) { } + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + +#if !defined(NDEBUG) || defined(KOKKOS_ENFORCE_CONTRACTS) || defined(KOKKOS_DEBUG) +# define KOKKOS_EXPECTS(...) \ + { \ + if(!bool(__VA_ARGS__)) { \ + ::Kokkos::abort( \ + "Kokkos contract violation:\n " \ + " Expected precondition `" #__VA_ARGS__ "` evaluated false." \ + ); \ + } \ + } +# define KOKKOS_ENSURES(...) \ + { \ + if(!bool(__VA_ARGS__)) { \ + ::Kokkos::abort( \ + "Kokkos contract violation:\n " \ + " Ensured postcondition `" #__VA_ARGS__ "` evaluated false." \ + ); \ + } \ + } +// some projects already define this for themselves, so don't mess them up +# ifndef KOKKOS_ASSERT +# define KOKKOS_ASSERT(...) \ + { \ + if(!bool(__VA_ARGS__)) { \ + ::Kokkos::abort( \ + "Kokkos contract violation:\n " \ + " Asserted condition `" #__VA_ARGS__ "` evaluated false." \ + ); \ + } \ + } +# endif // ifndef KOKKOS_ASSERT +#else // not debug mode +# define KOKKOS_EXPECTS(...) +# define KOKKOS_ENSURES(...) +# ifndef KOKKOS_ASSERT +# define KOKKOS_ASSERT(...) +# endif // ifndef KOKKOS_ASSERT +#endif // end debug mode ifdefs + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp b/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp new file mode 100644 index 0000000000..3053d8d9d0 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp @@ -0,0 +1,307 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_KOKKOS_FIXEDBUFFERMEMORYPOOL_HPP +#define KOKKOS_IMPL_KOKKOS_FIXEDBUFFERMEMORYPOOL_HPP + +#include +#include + +#include +#include + +namespace Kokkos { +namespace Impl { + +template < + class DeviceType, + size_t Size, + size_t Align=1, + class SizeType = typename DeviceType::execution_space::size_type +> +class FixedBlockSizeMemoryPool + : private MemorySpaceInstanceStorage +{ +public: + + using memory_space = typename DeviceType::memory_space; + using size_type = SizeType; + +private: + + using memory_space_storage_base = MemorySpaceInstanceStorage; + using tracker_type = Kokkos::Impl::SharedAllocationTracker; + using record_type = Kokkos::Impl::SharedAllocationRecord; + + struct alignas(Align) Block { union { char ignore; char data[Size]; }; }; + + static constexpr auto actual_size = sizeof(Block); + + // TODO shared allocation tracker + // TODO @optimization put the index values on different cache lines (CPU) or pages (GPU)? + + tracker_type m_tracker = { }; + size_type m_num_blocks = 0; + size_type m_first_free_idx = 0; + size_type m_last_free_idx = 0; + Kokkos::OwningRawPtr m_first_block = nullptr; + Kokkos::OwningRawPtr m_free_indices = nullptr; + + enum : size_type { IndexInUse = ~size_type(0) }; + +public: + + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_type num_blocks + ) : memory_space_storage_base(mem_space), + m_tracker(), + m_num_blocks(num_blocks), + m_first_free_idx(0), + m_last_free_idx(num_blocks) + { + // TODO alignment? + auto block_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(Block) + ); + KOKKOS_ASSERT(intptr_t(block_record->data()) % Align == 0); + m_tracker.assign_allocated_record_to_uninitialized(block_record); + m_first_block = (Block*)block_record->data(); + + auto idx_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(size_type) + ); + KOKKOS_ASSERT(intptr_t(idx_record->data()) % alignof(size_type) == 0); + m_tracker.assign_allocated_record_to_uninitialized(idx_record); + m_free_indices = (size_type*)idx_record->data(); + + for(size_type i = 0; i < num_blocks; ++i) { + m_free_indices[i] = i; + } + + Kokkos::memory_fence(); + } + + // For compatibility with MemoryPool<> + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_t mempool_capacity, + unsigned, unsigned, unsigned + ) : FixedBlockSizeMemoryPool(mem_space, mempool_capacity / actual_size) + { /* forwarding ctor, must be empty */ } + + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool() = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool const&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool const&) = default; + + + KOKKOS_INLINE_FUNCTION + void* allocate(size_type alloc_size) const noexcept + { + KOKKOS_EXPECTS(alloc_size <= Size); + auto free_idx_counter = Kokkos::atomic_fetch_add((volatile size_type*)&m_first_free_idx, size_type(1)); + auto free_idx_idx = free_idx_counter % m_num_blocks; + + // We don't have exclusive access to m_free_indices[free_idx_idx] because + // the allocate counter might have lapped us since we incremented it + auto current_free_idx = m_free_indices[free_idx_idx]; + size_type free_idx = IndexInUse; + free_idx = + Kokkos::atomic_compare_exchange(&m_free_indices[free_idx_idx], current_free_idx, free_idx); + Kokkos::memory_fence(); + + // TODO figure out how to decrement here? + + if(free_idx == IndexInUse) { + return nullptr; + } + else { + return (void*)&m_first_block[free_idx]; + } + } + + KOKKOS_INLINE_FUNCTION + void deallocate(void* ptr, size_type alloc_size) const noexcept + { + // figure out which block we are + auto offset = intptr_t(ptr) - intptr_t(m_first_block); + + KOKKOS_EXPECTS(offset % actual_size == 0 && offset/actual_size < m_num_blocks); + + Kokkos::memory_fence(); + auto last_idx_idx = Kokkos::atomic_fetch_add((volatile size_type*)&m_last_free_idx, size_type(1)); + last_idx_idx %= m_num_blocks; + m_free_indices[last_idx_idx] = offset / actual_size; + } + +}; + +#if 0 +template < + class DeviceType, + size_t Size, + size_t Align=1, + class SizeType = typename DeviceType::execution_space::size_type +> +class FixedBlockSizeChaseLevMemoryPool + : private MemorySpaceInstanceStorage +{ +public: + + using memory_space = typename DeviceType::memory_space; + using size_type = SizeType; + +private: + + using memory_space_storage_base = MemorySpaceInstanceStorage; + using tracker_type = Kokkos::Impl::SharedAllocationTracker; + using record_type = Kokkos::Impl::SharedAllocationRecord; + + struct alignas(Align) Block { union { char ignore; char data[Size]; }; }; + + static constexpr auto actual_size = sizeof(Block); + + tracker_type m_tracker = { }; + size_type m_num_blocks = 0; + size_type m_first_free_idx = 0; + size_type m_last_free_idx = 0; + + + enum : size_type { IndexInUse = ~size_type(0) }; + +public: + + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_type num_blocks + ) : memory_space_storage_base(mem_space), + m_tracker(), + m_num_blocks(num_blocks), + m_first_free_idx(0), + m_last_free_idx(num_blocks) + { + // TODO alignment? + auto block_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(Block) + ); + KOKKOS_ASSERT(intptr_t(block_record->data()) % Align == 0); + m_tracker.assign_allocated_record_to_uninitialized(block_record); + m_first_block = (Block*)block_record->data(); + + auto idx_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(size_type) + ); + KOKKOS_ASSERT(intptr_t(idx_record->data()) % alignof(size_type) == 0); + m_tracker.assign_allocated_record_to_uninitialized(idx_record); + m_free_indices = (size_type*)idx_record->data(); + + for(size_type i = 0; i < num_blocks; ++i) { + m_free_indices[i] = i; + } + + Kokkos::memory_fence(); + } + + // For compatibility with MemoryPool<> + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_t mempool_capacity, + unsigned, unsigned, unsigned + ) : FixedBlockSizeMemoryPool(mem_space, mempool_capacity / actual_size) + { /* forwarding ctor, must be empty */ } + + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool() = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool const&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool const&) = default; + + + KOKKOS_INLINE_FUNCTION + void* allocate(size_type alloc_size) const noexcept + { + KOKKOS_EXPECTS(alloc_size <= Size); + auto free_idx_counter = Kokkos::atomic_fetch_add((volatile size_type*)&m_first_free_idx, size_type(1)); + auto free_idx_idx = free_idx_counter % m_num_blocks; + + // We don't have exclusive access to m_free_indices[free_idx_idx] because + // the allocate counter might have lapped us since we incremented it + auto current_free_idx = m_free_indices[free_idx_idx]; + size_type free_idx = IndexInUse; + free_idx = + Kokkos::atomic_compare_exchange(&m_free_indices[free_idx_idx], current_free_idx, free_idx); + Kokkos::memory_fence(); + + // TODO figure out how to decrement here? + + if(free_idx == IndexInUse) { + return nullptr; + } + else { + return (void*)&m_first_block[free_idx]; + } + } + + KOKKOS_INLINE_FUNCTION + void deallocate(void* ptr, size_type alloc_size) const noexcept + { + // figure out which block we are + auto offset = intptr_t(ptr) - intptr_t(m_first_block); + + KOKKOS_EXPECTS(offset % actual_size == 0 && offset/actual_size < m_num_blocks); + + Kokkos::memory_fence(); + auto last_idx_idx = Kokkos::atomic_fetch_add((volatile size_type*)&m_last_free_idx, size_type(1)); + last_idx_idx %= m_num_blocks; + m_free_indices[last_idx_idx] = offset / actual_size; + } + +}; +#endif + +} // end namespace Impl +} // end namespace Kokkos + +#endif //KOKKOS_IMPL_KOKKOS_FIXEDBUFFERMEMORYPOOL_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp b/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp index 7d4ffb85c1..ea3480b48b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp @@ -1432,7 +1432,10 @@ namespace Impl { template struct JoinLambdaAdapter::enable_if( & JoinOp::join ) )> { typedef ValueType value_type; - typedef StaticAssertSame assert_value_types_match; + static_assert( + std::is_same::value, + "JoinLambdaAdapter static_assert Fail: ValueType != JoinOp::value_type"); + const JoinOp& lambda; KOKKOS_INLINE_FUNCTION JoinLambdaAdapter(const JoinOp& lambda_):lambda(lambda_) {} diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp index d8cb7593bf..848746d265 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp @@ -420,15 +420,19 @@ SharedAllocationRecord< Kokkos::HostSpace , void >::get_record( void * alloc_ptr } // Iterate records to print orphaned memory ... +#ifdef KOKKOS_DEBUG void SharedAllocationRecord< Kokkos::HostSpace , void >:: print_records( std::ostream & s , const Kokkos::HostSpace & , bool detail ) { -#ifdef KOKKOS_DEBUG SharedAllocationRecord< void , void >::print_host_accessible_records( s , "HostSpace" , & s_root_record , detail ); -#else - throw_runtime_exception("SharedAllocationRecord::print_records only works with KOKKOS_DEBUG enabled"); -#endif } +#else +void SharedAllocationRecord< Kokkos::HostSpace , void >:: +print_records( std::ostream & , const Kokkos::HostSpace & , bool ) +{ + throw_runtime_exception("SharedAllocationRecord::print_records only works with KOKKOS_DEBUG enabled"); +} +#endif } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp new file mode 100644 index 0000000000..21b95f6985 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp @@ -0,0 +1,134 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include "Kokkos_Core.hpp" +#include "Kokkos_HostSpace_deepcopy.hpp" + +namespace Kokkos { + +namespace Impl { + +#ifndef KOKKOS_IMPL_HOST_DEEP_COPY_SERIAL_LIMIT +#define KOKKOS_IMPL_HOST_DEEP_COPY_SERIAL_LIMIT 10*8192 +#endif + +void hostspace_parallel_deepcopy(void * dst, const void * src, ptrdiff_t n) { + if((n policy_t; + + // Both src and dst are aligned the same way with respect to 8 byte words + if(reinterpret_cast(src)%8 == reinterpret_cast(dst)%8) { + char* dst_c = reinterpret_cast(dst); + const char* src_c = reinterpret_cast(src); + int count = 0; + // get initial bytes copied + while(reinterpret_cast(dst_c)%8!=0) { + *dst_c=*src_c; + dst_c++; src_c++; count++; + } + + // copy the bulk of the data + double* dst_p = reinterpret_cast(dst_c); + const double* src_p = reinterpret_cast(src_c); + Kokkos::parallel_for("Kokkos::Impl::host_space_deepcopy_double",policy_t(0,(n-count)/8),[=](const ptrdiff_t i) { + dst_p[i] = src_p[i]; + }); + + // get final data copied + dst_c += ((n-count)/8) * 8; + src_c += ((n-count)/8) * 8; + char* dst_end = reinterpret_cast(dst)+n; + while(dst_c != dst_end) { + *dst_c = *src_c; + dst_c++; src_c++; + } + return; + } + + // Both src and dst are aligned the same way with respect to 4 byte words + if(reinterpret_cast(src)%4 == reinterpret_cast(dst)%4) { + char* dst_c = reinterpret_cast(dst); + const char* src_c = reinterpret_cast(src); + int count = 0; + // get initial bytes copied + while(reinterpret_cast(dst_c)%4!=0) { + *dst_c=*src_c; + dst_c++; src_c++; count++; + } + + // copy the bulk of the data + int32_t* dst_p = reinterpret_cast(dst_c); + const int32_t* src_p = reinterpret_cast(src_c); + Kokkos::parallel_for("Kokkos::Impl::host_space_deepcopy_int",policy_t(0,(n-count)/4),[=](const ptrdiff_t i) { + dst_p[i] = src_p[i]; + }); + + // get final data copied + dst_c += ((n-count)/4) * 4; + src_c += ((n-count)/4) * 4; + char* dst_end = reinterpret_cast(dst)+n; + while(dst_c != dst_end) { + *dst_c = *src_c; + dst_c++; src_c++; + } + return; + } + + // Src and dst are not aligned the same way, we can only to byte wise copy. + { + char* dst_p = reinterpret_cast(dst); + const char* src_p = reinterpret_cast(src); + Kokkos::parallel_for("Kokkos::Impl::host_space_deepcopy_char",policy_t(0,n),[=](const ptrdiff_t i) { + dst_p[i] = src_p[i]; + }); + } +} + +} // namespace Impl + +} // namespace Kokkos + diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp new file mode 100644 index 0000000000..b8aea95363 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#include + +namespace Kokkos { + +namespace Impl { + +void hostspace_parallel_deepcopy(void * dst, const void * src, ptrdiff_t n); + +} // namespace Impl + +} // namespace Kokkos + diff --git a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp index fff48e87f6..f44a13c574 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp @@ -52,6 +52,8 @@ #include #include +#include // std::numeric_limits + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -477,6 +479,9 @@ class HostThreadTeamMember { public: using scratch_memory_space = typename HostExecSpace::scratch_memory_space ; + using execution_space = HostExecSpace; + using thread_team_member = HostThreadTeamMember; + using host_thread_team_member = HostThreadTeamMember; private: @@ -490,8 +495,8 @@ public: constexpr HostThreadTeamMember( HostThreadTeamData & arg_data ) noexcept : m_scratch( arg_data.team_shared() , arg_data.team_shared_bytes() ) , m_data( arg_data ) - , m_league_rank(0) - , m_league_size(1) + , m_league_rank(arg_data.m_league_rank) + , m_league_size(arg_data.m_league_size) {} constexpr HostThreadTeamMember( HostThreadTeamData & arg_data @@ -630,6 +635,12 @@ public: KOKKOS_INLINE_FUNCTION typename std::enable_if< is_reducer< ReducerType >::value >::type team_reduce( ReducerType const & reducer ) const noexcept + { team_reduce(reducer,reducer.reference()); } + + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< is_reducer< ReducerType >::value >::type + team_reduce( ReducerType const & reducer, typename ReducerType::value_type contribution ) const noexcept #if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) { if ( 1 < m_data.m_team_size ) { @@ -640,7 +651,7 @@ public: // Non-root copies to their local buffer: /*reducer.copy( (value_type*) m_data.team_reduce_local() , reducer.data() );*/ - *((value_type*) m_data.team_reduce_local()) = reducer.reference(); + *((value_type*) m_data.team_reduce_local()) = contribution; } // Root does not overwrite shared memory until all threads arrive @@ -656,12 +667,13 @@ public: value_type * const src = (value_type*) m_data.team_member(i)->team_reduce_local(); - reducer.join( reducer.reference(), *src); + reducer.join( contribution, *src); } // Copy result to root member's buffer: // reducer.copy( (value_type*) m_data.team_reduce() , reducer.data() ); - *((value_type*) m_data.team_reduce()) = reducer.reference(); + *((value_type*) m_data.team_reduce()) = contribution; + reducer.reference() = contribution; m_data.team_rendezvous_release(); // This thread released all other threads from 'team_rendezvous' // with a return value of 'false' @@ -670,6 +682,8 @@ public: // Copy from root member's buffer: reducer.reference() = *((value_type*) m_data.team_reduce()); } + } else { + reducer.reference() = contribution; } } #else @@ -795,50 +809,105 @@ public: namespace Kokkos { -template +template KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct > -TeamThreadRange( Impl::HostThreadTeamMember const & member - , iType const & count ) +Impl::TeamThreadRangeBoundariesStruct +TeamThreadRange( + Member const & member, + iType count, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { return Impl::TeamThreadRangeBoundariesStruct - >(member,0,count); + (member,0,count); } -template +template KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct - < typename std::common_type< iType1, iType2 >::type - , Impl::HostThreadTeamMember > -TeamThreadRange( Impl::HostThreadTeamMember const & member - , iType1 const & begin , iType2 const & end ) +Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type< iType1, iType2 >::type, Member +> +TeamThreadRange( + Member const & member, + iType1 begin, + iType2 end, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { return Impl::TeamThreadRangeBoundariesStruct < typename std::common_type< iType1, iType2 >::type - , Impl::HostThreadTeamMember >( member , begin , end ); + , Member >( member , begin , end ); } -template +template KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange - ( Impl::HostThreadTeamMember const & member - , const iType & count ) +Impl::TeamThreadRangeBoundariesStruct +TeamVectorRange( + Member const & member, + iType count, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { - return Impl::ThreadVectorRangeBoundariesStruct >(member,count); + return + Impl::TeamThreadRangeBoundariesStruct + (member,0,count); } -template +template KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange - ( Impl::HostThreadTeamMember const & member - , const iType & arg_begin - , const iType & arg_end ) +Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type< iType1, iType2 >::type, Member +> +TeamVectorRange( + Member const & member, + iType1 begin, + iType2 end, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { - return Impl::ThreadVectorRangeBoundariesStruct >(member,arg_begin,arg_end); + return + Impl::TeamThreadRangeBoundariesStruct + < typename std::common_type< iType1, iType2 >::type + , Member >( member , begin , end ); +} + +template +KOKKOS_INLINE_FUNCTION +Impl::ThreadVectorRangeBoundariesStruct +ThreadVectorRange( + Member const & member, + iType count, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) +{ + return Impl::ThreadVectorRangeBoundariesStruct(member,count); +} + +template +KOKKOS_INLINE_FUNCTION +Impl::ThreadVectorRangeBoundariesStruct +ThreadVectorRange( + Member const & member, + iType arg_begin, + iType arg_end, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) +{ + return Impl::ThreadVectorRangeBoundariesStruct(member,arg_begin,arg_end); } //---------------------------------------------------------------------------- @@ -848,11 +917,14 @@ ThreadVectorRange * * The range [0..N) is mapped to all threads of the the calling thread team. */ -template +template KOKKOS_INLINE_FUNCTION void parallel_for - ( Impl::TeamThreadRangeBoundariesStruct > const & loop_boundaries + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure + , typename std::enable_if< + Impl::is_host_thread_team_member::value + >::type const** = nullptr ) { for( iType i = loop_boundaries.start @@ -862,11 +934,14 @@ void parallel_for } } -template +template KOKKOS_INLINE_FUNCTION void parallel_for - ( Impl::ThreadVectorRangeBoundariesStruct > const & loop_boundaries + ( Impl::ThreadVectorRangeBoundariesStruct const & loop_boundaries , Closure const & closure + , typename std::enable_if< + Impl::is_host_thread_team_member::value + >::type const** = nullptr ) { #ifdef KOKKOS_ENABLE_PRAGMA_IVDEP @@ -881,40 +956,47 @@ void parallel_for //---------------------------------------------------------------------------- -template< typename iType, class Space, class Closure, class Reducer > +template< typename iType, class Closure, class Reducer, class Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< Kokkos::is_reducer< Reducer >::value >::type +typename std::enable_if< + Kokkos::is_reducer< Reducer >::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - ( Impl::TeamThreadRangeBoundariesStruct > + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure , Reducer const & reducer ) { - reducer.init( reducer.reference() ); + typename Reducer::value_type value; + reducer.init( value ); for( iType i = loop_boundaries.start ; i < loop_boundaries.end ; i += loop_boundaries.increment ) { - closure( i , reducer.reference() ); + closure( i , value ); } - - loop_boundaries.thread.team_reduce( reducer ); + + loop_boundaries.thread.team_reduce( reducer, value ); } -template< typename iType, class Space, typename Closure, typename ValueType > +template< typename iType, typename Closure, typename ValueType, typename Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< ! Kokkos::is_reducer::value >::type +typename std::enable_if< + ! Kokkos::is_reducer::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - ( Impl::TeamThreadRangeBoundariesStruct > + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure , ValueType & result ) { - Sum reducer( result ); - - reducer.init( result ); + ValueType val; + Sum reducer( val ); + reducer.init( val ); for( iType i = loop_boundaries.start ; i < loop_boundaries.end @@ -923,6 +1005,7 @@ parallel_reduce } loop_boundaries.thread.team_reduce( reducer ); + result = reducer.reference(); } /*template< typename iType, class Space @@ -958,11 +1041,14 @@ void parallel_reduce * calling thread team and a summation of val is * performed and put into result. */ -template< typename iType, class Space , class Lambda, typename ValueType > +template< typename iType, class Lambda, typename ValueType, typename Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< ! Kokkos::is_reducer::value >::type +typename std::enable_if< + ! Kokkos::is_reducer::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ValueType& result) { @@ -974,11 +1060,14 @@ parallel_reduce } } -template< typename iType, class Space , class Lambda, typename ReducerType > +template< typename iType, class Lambda, typename ReducerType, typename Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type +typename std::enable_if< + Kokkos::is_reducer< ReducerType >::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { @@ -990,41 +1079,15 @@ parallel_reduce } } -/** \brief Intra-thread vector parallel_reduce. - * - * Executes lambda(iType i, ValueType & val) for each i=[0..N) - * - * The range [0..N) is mapped to all vector lanes of the the - * calling thread and a reduction of val is performed using - * JoinType(ValueType& val, const ValueType& update) - * and put into init_result. - * The input value of init_result is used as initializer for - * temporary variables of ValueType. Therefore * the input - * value should be the neutral element with respect to the - * join operation (e.g. '0 for +-' or * '1 for *'). - */ -template< typename iType, class Space - , class Lambda, class JoinType , typename ValueType > -KOKKOS_INLINE_FUNCTION -void parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, - const Lambda & lambda, - const JoinType & join, - ValueType& result) -{ - for( iType i = loop_boundaries.start ; - i < loop_boundaries.end ; - i += loop_boundaries.increment ) { - lambda(i,result); - } -} - //---------------------------------------------------------------------------- -template< typename iType, class Space, class Closure > +template< typename iType, class Closure, class Member > KOKKOS_INLINE_FUNCTION -void parallel_scan - ( Impl::TeamThreadRangeBoundariesStruct > const & loop_boundaries +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +parallel_scan + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure ) { @@ -1056,10 +1119,13 @@ void parallel_scan } -template< typename iType, class Space, class ClosureType > +template< typename iType, class ClosureType, class Member > KOKKOS_INLINE_FUNCTION -void parallel_scan - ( Impl::ThreadVectorRangeBoundariesStruct > const & loop_boundaries +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +parallel_scan + ( Impl::ThreadVectorRangeBoundariesStruct const & loop_boundaries , ClosureType const & closure ) { @@ -1083,47 +1149,65 @@ void parallel_scan //---------------------------------------------------------------------------- -template< class Space > +template< class Member > KOKKOS_INLINE_FUNCTION -Impl::ThreadSingleStruct > -PerTeam(const Impl::HostThreadTeamMember & member ) +Impl::ThreadSingleStruct +PerTeam( + Member const& member, + typename std::enable_if::value>::type const** = nullptr +) { - return Impl::ThreadSingleStruct >(member); + return Impl::ThreadSingleStruct(member); } -template< class Space > +template< class Member > KOKKOS_INLINE_FUNCTION -Impl::VectorSingleStruct > -PerThread(const Impl::HostThreadTeamMember & member) +Impl::VectorSingleStruct +PerThread( + Member const& member, + typename std::enable_if::value>::type const** = nullptr +) { - return Impl::VectorSingleStruct >(member); + return Impl::VectorSingleStruct(member); } -template< class Space , class FunctorType > +template< class Member , class FunctorType > KOKKOS_INLINE_FUNCTION -void single( const Impl::ThreadSingleStruct< Impl::HostThreadTeamMember > & single , const FunctorType & functor ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::ThreadSingleStruct & single , const FunctorType & functor ) { // 'single' does not perform a barrier. if ( single.team_member.team_rank() == 0 ) functor(); } -template< class Space , class FunctorType , typename ValueType > +template< class Member, class FunctorType , typename ValueType > KOKKOS_INLINE_FUNCTION -void single( const Impl::ThreadSingleStruct< Impl::HostThreadTeamMember > & single , const FunctorType & functor , ValueType & val ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::ThreadSingleStruct & single , const FunctorType & functor , ValueType & val ) { single.team_member.team_broadcast( functor , val , 0 ); } -template< class Space , class FunctorType > +template< class Member, class FunctorType > KOKKOS_INLINE_FUNCTION -void single( const Impl::VectorSingleStruct< Impl::HostThreadTeamMember > & , const FunctorType & functor ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::VectorSingleStruct & , const FunctorType & functor ) { functor(); } -template< class Space , class FunctorType , typename ValueType > +template< class Member, class FunctorType , typename ValueType > KOKKOS_INLINE_FUNCTION -void single( const Impl::VectorSingleStruct< Impl::HostThreadTeamMember > & , const FunctorType & functor , ValueType & val ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::VectorSingleStruct & , const FunctorType & functor , ValueType & val ) { functor(val); } diff --git a/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp b/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp new file mode 100644 index 0000000000..43e9783beb --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp @@ -0,0 +1,431 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_LIFO_HPP +#define KOKKOS_IMPL_LIFO_HPP + +#include +#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using CUDA + +#include + +#include +#include +#include // KOKKOS_EXPECTS +#include + +#include // atomic_compare_exchange, atomic_fence + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +struct LockBasedLIFOCommon +{ + + using value_type = T; + + using node_type = SimpleSinglyLinkedListNode<>; + + static constexpr uintptr_t LockTag = ~uintptr_t(0); + static constexpr uintptr_t EndTag = ~uintptr_t(1); + + OwningRawPtr m_head = (node_type*)EndTag; + + KOKKOS_INLINE_FUNCTION + bool _try_push_node(node_type& node) { + + KOKKOS_EXPECTS(!node.is_enqueued()); + + auto* volatile & next = LinkedListNodeAccess::next_ptr(node); + + // store the head of the queue in a local variable + auto* old_head = m_head; + + // retry until someone locks the queue or we successfully compare exchange + while (old_head != (node_type*)LockTag) { + + // TODO @tasking @memory_order DSH this should have a memory order and not a memory fence + + // set task->next to the head of the queue + next = old_head; + + // fence to emulate acquire semantics on next and release semantics on + // the store of m_head + // Do not proceed until 'next' has been stored. + Kokkos::memory_fence(); + + // store the old head + auto* const old_head_tmp = old_head; + + // attempt to swap task with the old head of the queue + // as if this were done atomically: + // if(m_head == old_head) { + // m_head = &node; + // } + // old_head = m_head; + old_head = ::Kokkos::atomic_compare_exchange(&m_head, old_head, &node); + + if(old_head_tmp == old_head) return true; + } + + // Failed, replace 'task->m_next' value since 'task' remains + // not a member of a queue. + + // TODO @tasking @memory_order DSH this should have a memory order and not a memory fence + LinkedListNodeAccess::mark_as_not_enqueued(node); + + // fence to emulate acquire semantics on next + // Do not proceed until 'next' has been stored. + ::Kokkos::memory_fence(); + + return false; + } + + bool _is_empty() const noexcept { + // TODO @tasking @memory_order DSH make this an atomic load with memory order + return (volatile node_type*)this->m_head == (node_type*)EndTag; + } + +}; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +template +class LockBasedLIFO + : private LockBasedLIFOCommon +{ + +private: + + using base_t = LockBasedLIFOCommon; + using node_type = typename base_t::node_type; + +public: + + using value_type = typename base_t::value_type; // = T + using intrusive_node_base_type = SimpleSinglyLinkedListNode<>; + +public: + + + LockBasedLIFO() = default; + LockBasedLIFO(LockBasedLIFO const&) = delete; + LockBasedLIFO(LockBasedLIFO&&) = delete; + LockBasedLIFO& operator=(LockBasedLIFO const&) = delete; + LockBasedLIFO& operator=(LockBasedLIFO&&) = delete; + + ~LockBasedLIFO() = default; + + + bool empty() const noexcept { + // TODO @tasking @memory_order DSH memory order + return this->_is_empty(); + } + + KOKKOS_INLINE_FUNCTION + OptionalRef pop(bool abort_on_locked = false) + { + // Put this in here to avoid requiring value_type to be complete until now. + static_assert( + std::is_base_of::value, + "Intrusive linked-list value_type must be derived from intrusive_node_base_type" + ); + + // We can't use the static constexpr LockTag directly because + // atomic_compare_exchange needs to bind a reference to that, and you + // can't do that with static constexpr variables. + auto* const lock_tag = (node_type*)base_t::LockTag; + + // TODO @tasking @memory_order DSH shouldn't this be a relaxed atomic load? + // start with the return value equal to the head + auto* rv = this->m_head; + + // Retry until the lock is acquired or the queue is empty. + while(rv != (node_type*)base_t::EndTag) { + + // The only possible values for the queue are + // (1) lock, (2) end, or (3) a valid task. + // Thus zero will never appear in the queue. + // + // If queue is locked then just read by guaranteeing the CAS will fail. + KOKKOS_ASSERT(rv != nullptr); + + if(rv == lock_tag) { + // TODO @tasking @memory_order DSH this should just be an atomic load followed by a continue + // just set rv to nullptr for now, effectively turning the + // atomic_compare_exchange below into a load + rv = nullptr; + if(abort_on_locked) { + break; + } + } + + auto* const old_rv = rv; + + // TODO @tasking @memory_order DSH this should be a weak compare exchange in a loop + rv = Kokkos::atomic_compare_exchange(&(this->m_head), old_rv, lock_tag); + + if(rv == old_rv) { + // CAS succeeded and queue is locked + // + // This thread has locked the queue and removed 'rv' from the queue. + // Extract the next entry of the queue from 'rv->m_next' + // and mark 'rv' as popped from a queue by setting + // 'rv->m_next = nullptr'. + // + // Place the next entry in the head of the queue, + // which also unlocks the queue. + // + // This thread has exclusive access to + // the queue and the popped task's m_next. + + // TODO @tasking @memory_order DSH check whether the volatile is needed here + auto* volatile& next = LinkedListNodeAccess::next_ptr(*rv); //->m_next; + + // This algorithm is not lockfree because a adversarial scheduler could + // context switch this thread at this point and the rest of the threads + // calling this method would never make forward progress + + // TODO @tasking @memory_order DSH I think this needs to be a atomic store release (and the memory fence needs to be removed) + // TODO @tasking DSH prove that this doesn't need to be a volatile store + // Lock is released here + this->m_head = next; + + // Mark rv as popped by assigning nullptr to the next + LinkedListNodeAccess::mark_as_not_enqueued(*rv); + + Kokkos::memory_fence(); + + return OptionalRef{ *static_cast(rv) }; + } + + // Otherwise, the CAS got a value that didn't match (either because + // another thread locked the queue and we observed the lock tag or because + // another thread replaced the head and now we want to try to lock the + // queue with that as the popped item. Either way, try again. + } + + // Return an empty OptionalRef by calling the default constructor + return { }; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + steal() + { + // TODO @tasking @optimization DSH do this with fewer retries + return pop(/* abort_on_locked = */ true); + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type& node) + { + while(!this->_try_push_node(node)) { /* retry until success */ } + // for consistency with push interface on other queue types: + return true; + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type&& node) + { + // Just forward to the lvalue version + return push(node); + } + +}; + + +/** @brief A Multiple Producer, Single Consumer Queue with some special semantics + * + * This multi-producer, single consumer queue has the following semantics: + * + * - Any number of threads may call `try_emplace`/`try_push` + * + These operations are lock-free. + * - Exactly one thread calls `consume()`, and the call occurs exactly once + * in the lifetime of the queue. + * + This operation is lock-free (and wait-free w.r.t. producers) + * - Any calls to `try_push` that happen-before the call to + * `consume()` will succeed and return an true, such that the `consume()` + * call will visit that node. + * - Any calls to `try_push` for which the single call to `consume()` + * happens-before those calls will return false and the node given as + * an argument to `try_push` will not be visited by consume() + * + * + * @tparam T The type of items in the queue + * + */ +template +class SingleConsumeOperationLIFO + : private LockBasedLIFOCommon +{ +private: + + using base_t = LockBasedLIFOCommon; + using node_type = typename base_t::node_type; + + // Allows us to reuse the existing infrastructure for + static constexpr auto ConsumedTag = base_t::LockTag; + +public: + + using value_type = typename base_t::value_type; // = T + + KOKKOS_INLINE_FUNCTION + SingleConsumeOperationLIFO() noexcept = default; + + SingleConsumeOperationLIFO(SingleConsumeOperationLIFO const&) = delete; + SingleConsumeOperationLIFO(SingleConsumeOperationLIFO&&) = delete; + SingleConsumeOperationLIFO& operator=(SingleConsumeOperationLIFO const&) = delete; + SingleConsumeOperationLIFO& operator=(SingleConsumeOperationLIFO&&) = delete; + + KOKKOS_INLINE_FUNCTION + ~SingleConsumeOperationLIFO() = default; + + KOKKOS_INLINE_FUNCTION + bool empty() const noexcept { + // TODO @tasking @memory_order DSH memory order + return this->_is_empty(); + } + + KOKKOS_INLINE_FUNCTION + bool is_consumed() const noexcept { + // TODO @tasking @memory_order DSH memory order? + return this->m_head == (node_type*)ConsumedTag; + } + + KOKKOS_INLINE_FUNCTION + bool try_push(node_type& node) + { + return this->_try_push_node(node); + // Ensures: (return value is true) || (node.is_enqueued() == false); + } + + template + KOKKOS_INLINE_FUNCTION + void consume(Function&& f) { + auto* const consumed_tag = (node_type*)ConsumedTag; + + // Swap the Consumed tag into the head of the queue: + + // (local variable used for assertion only) + // TODO @tasking @memory_order DSH this should have memory order release, I think + Kokkos::memory_fence(); + auto old_head = Kokkos::atomic_exchange(&(this->m_head), consumed_tag); + + // Assert that the queue wasn't consumed before this + // This can't be an expects clause because the acquire fence on the read + // would be a side-effect + KOKKOS_ASSERT(old_head != consumed_tag); + + // We now have exclusive access to the queue; loop over it and call + // the user function + while(old_head != (node_type*)base_t::EndTag) { + + // get the Node to make the call with + auto* call_arg = old_head; + + // advance the head + old_head = LinkedListNodeAccess::next_ptr(*old_head); + + // Mark as popped before proceeding + LinkedListNodeAccess::mark_as_not_enqueued(*call_arg); + + // Call the user function + auto& arg = *static_cast(call_arg); + f(std::move(arg)); + + } + + } + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +struct TaskQueueTraitsLockBased +{ + + // TODO @tasking @documentation DSH document what concepts these match + + template + using ready_queue_type = LockBasedLIFO; + + template + using waiting_queue_type = SingleConsumeOperationLIFO; + + template + using intrusive_task_base_type = + typename ready_queue_type::intrusive_node_base_type; + + static constexpr auto ready_queue_insertion_may_fail = false; + +}; + + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined KOKKOS_ENABLE_TASKDAG */ +#endif /* #ifndef KOKKOS_IMPL_LIFO_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp b/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp new file mode 100644 index 0000000000..78a6faca90 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp @@ -0,0 +1,206 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_LINKEDLISTNODE_HPP +#define KOKKOS_IMPL_LINKEDLISTNODE_HPP + +#include +#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using CUDA + +#include + +#include +#include +#include // KOKKOS_EXPECTS + +#include // atomic_compare_exchange, atomic_fence + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +struct LinkedListNodeAccess; + +template < + uintptr_t NotEnqueuedValue = 0, + template class PointerTemplate = std::add_pointer +> +struct SimpleSinglyLinkedListNode +{ + +private: + + using pointer_type = typename PointerTemplate::type; + + pointer_type m_next = reinterpret_cast(NotEnqueuedValue); + + // These are private because they are an implementation detail of the queue + // and should not get added to the value type's interface via the intrusive + // wrapper. + + KOKKOS_INLINE_FUNCTION + void mark_as_not_enqueued() noexcept { + // TODO @tasking @memory_order DSH make this an atomic store with memory order + m_next = (pointer_type)NotEnqueuedValue; + } + + KOKKOS_INLINE_FUNCTION + void mark_as_not_enqueued() volatile noexcept { + // TODO @tasking @memory_order DSH make this an atomic store with memory order + m_next = (pointer_type)NotEnqueuedValue; + } + + KOKKOS_INLINE_FUNCTION + pointer_type& _next_ptr() noexcept { + return m_next; + } + + KOKKOS_INLINE_FUNCTION + pointer_type volatile& _next_ptr() volatile noexcept { + return m_next; + } + + KOKKOS_INLINE_FUNCTION + pointer_type const& _next_ptr() const noexcept { + return m_next; + } + + KOKKOS_INLINE_FUNCTION + pointer_type const volatile& _next_ptr() const volatile noexcept { + return m_next; + } + + friend struct LinkedListNodeAccess; + +public: + + // KOKKOS_CONSTEXPR_14 + KOKKOS_INLINE_FUNCTION + bool is_enqueued() const noexcept { + // TODO @tasking @memory_order DSH make this an atomic load with memory order + return m_next != reinterpret_cast(NotEnqueuedValue); + } + + // KOKKOS_CONSTEXPR_14 + KOKKOS_INLINE_FUNCTION + bool is_enqueued() const volatile noexcept { + // TODO @tasking @memory_order DSH make this an atomic load with memory order + return m_next != reinterpret_cast(NotEnqueuedValue); + } + +}; + +/// Attorney for LinkedListNode, since user types inherit from it +struct LinkedListNodeAccess +{ + + template + KOKKOS_INLINE_FUNCTION + static void mark_as_not_enqueued(Node& node) noexcept { + node.mark_as_not_enqueued(); + } + + template + KOKKOS_INLINE_FUNCTION + static void mark_as_not_enqueued(Node volatile& node) noexcept { + node.mark_as_not_enqueued(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + next_ptr(Node& node) noexcept { + return node._next_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + next_ptr(Node volatile& node) noexcept { + return node._next_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + next_ptr(Node const& node) noexcept { + return node._next_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + prev_ptr(Node& node) noexcept { + return node._prev_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + prev_ptr(Node const& node) noexcept { + return node._prev_ptr(); + } + +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined KOKKOS_ENABLE_TASKDAG */ +#endif /* #ifndef KOKKOS_IMPL_LINKEDLISTNODE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp b/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp new file mode 100644 index 0000000000..b4629df5b0 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp @@ -0,0 +1,140 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_MEMORYPOOLALLOCATOR_HPP +#define KOKKOS_IMPL_MEMORYPOOLALLOCATOR_HPP + +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +namespace Kokkos { +namespace Impl { + +template +class MemoryPoolAllocator { +public: + + using memory_pool = MemoryPool; + +private: + + memory_pool m_pool; + +public: + + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator() = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator(MemoryPoolAllocator const&) = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator(MemoryPoolAllocator&&) = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator& operator=(MemoryPoolAllocator const&) = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator& operator=(MemoryPoolAllocator&&) = default; + KOKKOS_INLINE_FUNCTION + ~MemoryPoolAllocator() = default; + + KOKKOS_INLINE_FUNCTION + explicit MemoryPoolAllocator(memory_pool const& arg_pool) : m_pool(arg_pool) { } + KOKKOS_INLINE_FUNCTION + explicit MemoryPoolAllocator(memory_pool&& arg_pool) : m_pool(std::move(arg_pool)) { } + +public: + + using value_type = T; + using pointer = T*; + using size_type = typename MemoryPool::memory_space::size_type; + using difference_type = typename std::make_signed::type; + + template + struct rebind { + using other = MemoryPoolAllocator; + }; + + KOKKOS_INLINE_FUNCTION + pointer allocate(size_t n) { + void* rv = m_pool.allocate(n * sizeof(T)); + if(rv == nullptr) { + Kokkos::abort("Kokkos MemoryPool allocator failed to allocate memory"); + } + return reinterpret_cast(rv); + } + + KOKKOS_INLINE_FUNCTION + void deallocate(T* ptr, size_t n) { + m_pool.deallocate(ptr, n * sizeof(T)); + } + + KOKKOS_INLINE_FUNCTION + size_type max_size() const { + return m_pool.max_block_size(); + } + + KOKKOS_INLINE_FUNCTION + bool operator==(MemoryPoolAllocator const& other) const { + return m_pool == other.m_pool; + } + + KOKKOS_INLINE_FUNCTION + bool operator!=(MemoryPoolAllocator const& other) const { + return !(*this == other); + } + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + + +#endif /* #ifndef KOKKOS_IMPL_MEMORYPOOLALLOCATOR_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp new file mode 100644 index 0000000000..ed8d2be5ae --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp @@ -0,0 +1,616 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_MULTIPLETASKQUEUE_HPP +#define KOKKOS_IMPL_MULTIPLETASKQUEUE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +// A *non*-concurrent linked list of tasks that failed to be enqueued +// (We can't reuse the wait queue for this because of the semantics of that +// queue that require it to be popped exactly once, and if a task has failed +// to be enqueued, it has already been marked ready) +template +struct FailedQueueInsertionLinkedListSchedulingInfo { + using task_base_type = TaskNode; + task_base_type* next = nullptr; +}; + +struct EmptyTaskSchedulingInfo { }; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template < + class ExecSpace, + class MemorySpace, + class TaskQueueTraits, + class MemoryPool +> +class MultipleTaskQueue; + +template +struct MultipleTaskQueueTeamEntry { +public: + + using task_base_type = TaskNode; + using runnable_task_base_type = RunnableTaskBase; + using ready_queue_type = typename TaskQueueTraits::template ready_queue_type; + using task_queue_traits = TaskQueueTraits; + using task_scheduling_info_type = typename std::conditional< + TaskQueueTraits::ready_queue_insertion_may_fail, + FailedQueueInsertionLinkedListSchedulingInfo, + EmptyTaskSchedulingInfo + >::type; + +private: + + // Number of allowed priorities + static constexpr int NumPriorities = 3; + + ready_queue_type m_ready_queues[NumPriorities][2]; + + task_base_type* m_failed_heads[NumPriorities][2]; + + KOKKOS_INLINE_FUNCTION + task_base_type*& + failed_head_for(runnable_task_base_type const& task) + { + return m_failed_heads[int(task.get_priority())][int(task.get_task_type())]; + } + + template + KOKKOS_INLINE_FUNCTION + OptionalRef + _pop_failed_insertion( + int priority, TaskType type, + typename std::enable_if< + task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) { + auto* rv_ptr = m_failed_heads[priority][(int)type]; + if(rv_ptr) { + m_failed_heads[priority][(int)type] = + rv_ptr->as_runnable_task() + .template scheduling_info_as() + .next; + return OptionalRef{ *rv_ptr }; + } + else { + return OptionalRef{ nullptr }; + } + } + + template + KOKKOS_INLINE_FUNCTION + OptionalRef + _pop_failed_insertion( + int priority, TaskType type, + typename std::enable_if< + not task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) { + return OptionalRef{ nullptr }; + } + +public: + + KOKKOS_INLINE_FUNCTION + MultipleTaskQueueTeamEntry() { + for(int iPriority = 0; iPriority < NumPriorities; ++iPriority) { + for(int iType = 0; iType < 2; ++iType) { + m_failed_heads[iPriority][iType] = nullptr; + } + } + } + + + KOKKOS_INLINE_FUNCTION + OptionalRef + try_to_steal_ready_task() + { + auto return_value = OptionalRef{}; + // prefer lower priority tasks when stealing + for(int i_priority = NumPriorities-1; i_priority >= 0; --i_priority) { + // Check for a single task with this priority + return_value = m_ready_queues[i_priority][TaskSingle].steal(); + if(return_value) return return_value; + + // Check for a team task with this priority + return_value = m_ready_queues[i_priority][TaskTeam].steal(); + if(return_value) return return_value; + + } + return return_value; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + pop_ready_task() + { + auto return_value = OptionalRef{}; + for(int i_priority = 0; i_priority < NumPriorities; ++i_priority) { + return_value = _pop_failed_insertion(i_priority, TaskTeam); + if(not return_value) return_value = m_ready_queues[i_priority][TaskTeam].pop(); + if(return_value) return return_value; + + // Check for a single task with this priority + return_value = _pop_failed_insertion(i_priority, TaskSingle); + if(not return_value) return_value = m_ready_queues[i_priority][TaskSingle].pop(); + if(return_value) return return_value; + } + return return_value; + } + + KOKKOS_INLINE_FUNCTION + ready_queue_type& + team_queue_for(runnable_task_base_type const& task) + { + return m_ready_queues[int(task.get_priority())][int(task.get_task_type())]; + } + + + template + KOKKOS_INLINE_FUNCTION + void do_handle_failed_insertion( + runnable_task_base_type&& task, + typename std::enable_if< + task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) + { + // failed insertions, if they happen, must be from the only thread that + // is allowed to push to m_ready_queues, so this linked-list insertion is not + // concurrent + auto& node = task.template scheduling_info_as(); + auto*& head = failed_head_for(task); + node.next = head; + head = &task; + } + + template + KOKKOS_INLINE_FUNCTION + void do_handle_failed_insertion( + runnable_task_base_type&& task, + typename std::enable_if< + not task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) + { + Kokkos::abort("should be unreachable!"); + } + + + template + KOKKOS_INLINE_FUNCTION + void + flush_failed_insertions( + int priority, + int task_type, + typename std::enable_if< + task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, // just to make this dependent on template parameter + int + >::type = 0 + ) { + // TODO @tasking @minor DSH this somethimes gets some things out of LIFO order, which may be undesirable (but not a bug) + + + auto*& failed_head = m_failed_heads[priority][task_type]; + auto& team_queue = m_ready_queues[priority][task_type]; + + while(failed_head != nullptr) { + bool success = team_queue.push(*failed_head); + if(success) { + // Step to the next linked list element + failed_head = failed_head->as_runnable_task() + .template scheduling_info_as().next; + } + else { + // no more room, stop traversing and leave the head where it is + break; + } + } + } + + + template + KOKKOS_INLINE_FUNCTION + void + flush_failed_insertions( + int, int, + typename std::enable_if< + not task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, // just to make this dependent on template parameter + int + >::type = 0 + ) { } + + + KOKKOS_INLINE_FUNCTION + void + flush_all_failed_insertions() { + for(int iPriority = 0; iPriority < NumPriorities; ++iPriority) { + flush_failed_insertions(iPriority, (int)TaskType::TaskTeam); + flush_failed_insertions(iPriority, (int)TaskType::TaskSingle); + } + } + + + template + KOKKOS_INLINE_FUNCTION + void + do_schedule_runnable( + MultipleTaskQueue& queue, + RunnableTaskBase&& task, + TeamSchedulerInfo const& info + + ) { + // Push on any nodes that failed to enqueue + auto& team_queue = team_queue_for(task); + auto priority = task.get_priority(); + auto task_type = task.get_task_type(); + + // First schedule the task + queue.schedule_runnable_to_queue( + std::move(task), + team_queue, + info + ); + + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + flush_failed_insertions((int)priority, (int)task_type); + } + + + +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template < + class ExecSpace, + class MemorySpace, + class TaskQueueTraits, + class MemoryPool +> +class MultipleTaskQueue final + : public TaskQueueMemoryManager, + public TaskQueueCommonMixin>, + private ObjectWithVLAEmulation< + MultipleTaskQueue, + MultipleTaskQueueTeamEntry + > +{ +public: + + using task_queue_type = MultipleTaskQueue; // mark as task_queue concept + using task_queue_traits = TaskQueueTraits; + using task_base_type = TaskNode; + using ready_queue_type = typename TaskQueueTraits::template ready_queue_type; + +private: + + using base_t = TaskQueueMemoryManager; + using common_mixin_t = TaskQueueCommonMixin; + using vla_emulation_base_t = ObjectWithVLAEmulation< + MultipleTaskQueue, + MultipleTaskQueueTeamEntry + >; + + // Allow private inheritance from ObjectWithVLAEmulation + friend struct VLAEmulationAccess; + +public: + + struct SchedulerInfo { + using team_queue_id_t = int32_t; + static constexpr team_queue_id_t NoAssociatedTeam = -1; + team_queue_id_t team_association = NoAssociatedTeam; + + using scheduler_info_type = SchedulerInfo; + + KOKKOS_INLINE_FUNCTION + constexpr explicit SchedulerInfo(team_queue_id_t association) noexcept + : team_association(association) + { } + + KOKKOS_INLINE_FUNCTION + SchedulerInfo() = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo(SchedulerInfo const&) = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo(SchedulerInfo&&) = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo& operator=(SchedulerInfo const&) = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo& operator=(SchedulerInfo&&) = default; + + KOKKOS_INLINE_FUNCTION + ~SchedulerInfo() = default; + + }; + + using task_scheduling_info_type = typename std::conditional< + TaskQueueTraits::ready_queue_insertion_may_fail, + FailedQueueInsertionLinkedListSchedulingInfo, + EmptyTaskSchedulingInfo + >::type; + using team_scheduler_info_type = SchedulerInfo; + + using runnable_task_base_type = RunnableTaskBase; + + template + // requires TaskScheduler && TaskFunctor + using runnable_task_type = RunnableTask< + task_queue_traits, Scheduler, typename Functor::value_type, Functor + >; + + using aggregate_task_type = AggregateTask; + + // Number of allowed priorities + static constexpr int NumPriorities = 3; + + KOKKOS_INLINE_FUNCTION + constexpr typename vla_emulation_base_t::vla_entry_count_type + n_queues() const noexcept { return this->n_vla_entries(); } + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + MultipleTaskQueue() = delete; + MultipleTaskQueue(MultipleTaskQueue const&) = delete; + MultipleTaskQueue(MultipleTaskQueue&&) = delete; + MultipleTaskQueue& operator=(MultipleTaskQueue const&) = delete; + MultipleTaskQueue& operator=(MultipleTaskQueue&&) = delete; + + MultipleTaskQueue( + typename base_t::execution_space const& arg_execution_space, + typename base_t::memory_space const&, + typename base_t::memory_pool const& arg_memory_pool + ) : base_t(arg_memory_pool), + vla_emulation_base_t( + Impl::TaskQueueSpecialization< + // TODO @tasking @generalization DSH avoid referencing SimpleTaskScheduler directly? + SimpleTaskScheduler + >::get_max_team_count(arg_execution_space) + ) + { } + + // end Constructors, destructors, and assignment }}}2 + //---------------------------------------------------------------------------- + + KOKKOS_FUNCTION + void + schedule_runnable( + runnable_task_base_type&& task, + team_scheduler_info_type const& info + ) { + auto team_association = info.team_association; + // Should only not be assigned if this is a host spawn... + if(team_association == team_scheduler_info_type::NoAssociatedTeam) { + team_association = 0; + } + this->vla_value_at(team_association).do_schedule_runnable(*this, std::move(task), info); + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + } + + KOKKOS_FUNCTION + OptionalRef + pop_ready_task( + team_scheduler_info_type const& info + ) + { + KOKKOS_EXPECTS(info.team_association != team_scheduler_info_type::NoAssociatedTeam); + + auto return_value = OptionalRef{}; + auto team_association = info.team_association; + + // always loop in order of priority first, then prefer team tasks over single tasks + auto& team_queue_info = this->vla_value_at(team_association); + + if(task_queue_traits::ready_queue_insertion_may_fail) { + team_queue_info.flush_all_failed_insertions(); + } + + return_value = team_queue_info.pop_ready_task(); + + if(not return_value) { + + // loop through the rest of the teams and try to steal + for( + auto isteal = (team_association + 1) % this->n_queues(); + isteal != team_association; + isteal = (isteal + 1) % this->n_queues() + ) { + return_value = this->vla_value_at(isteal).try_to_steal_ready_task(); + if(return_value) { break; } + } + + // Note that this is where we'd update the task's scheduling info + } + // if nothing was found, return a default-constructed (empty) OptionalRef + return return_value; + } + + + // TODO @tasking @generalization DSH make this a property-based customization point + KOKKOS_INLINE_FUNCTION + team_scheduler_info_type + initial_team_scheduler_info(int rank_in_league) const noexcept { + return team_scheduler_info_type{ + typename team_scheduler_info_type::team_queue_id_t(rank_in_league % n_queues()) + }; + } + + // TODO @tasking @generalization DSH make this a property-based customization point + static /* KOKKOS_CONSTEXPR_14 */ size_t + task_queue_allocation_size( + typename base_t::execution_space const& exec_space, + typename base_t::memory_space const&, + typename base_t::memory_pool const& + ) + { + using specialization = + Impl::TaskQueueSpecialization< + // TODO @tasking @generalization DSH avoid referencing SimpleTaskScheduler directly? + SimpleTaskScheduler + >; + + return vla_emulation_base_t::required_allocation_size( + /* num_vla_entries = */ specialization::get_max_team_count(exec_space) + ); + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + runnable_task_base_type& ready_task, + runnable_task_base_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + aggregate_task_type& aggregate, + runnable_task_base_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + aggregate_task_type& aggregate, + aggregate_task_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + runnable_task_base_type& ready_task, + aggregate_task_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + KOKKOS_INLINE_FUNCTION + void + handle_failed_ready_queue_insertion( + runnable_task_base_type&& task, + ready_queue_type&, + team_scheduler_info_type const& info + ) { + KOKKOS_EXPECTS(info.team_association != team_scheduler_info_type::NoAssociatedTeam); + + this->vla_value_at(info.team_association).do_handle_failed_insertion( + std::move(task) + ); + } +}; + + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_MULTIPLETASKQUEUE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp b/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp new file mode 100644 index 0000000000..bf83d1831c --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp @@ -0,0 +1,242 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_OPTIONALREF_HPP +#define KOKKOS_IMPL_OPTIONALREF_HPP + +#include + +#include + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +namespace Kokkos { +namespace Impl { + +struct InPlaceTag { }; + +template +struct OptionalRef { +private: + + ObservingRawPtr m_value = nullptr; + +public: + + using value_type = T; + + KOKKOS_INLINE_FUNCTION + OptionalRef() = default; + + KOKKOS_INLINE_FUNCTION + OptionalRef(OptionalRef const&) = default; + + KOKKOS_INLINE_FUNCTION + OptionalRef(OptionalRef&&) = default; + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(OptionalRef const&) = default; + + KOKKOS_INLINE_FUNCTION + // Can't return a reference to volatile OptionalRef, since GCC issues a warning about + // reference to volatile not accessing the underlying value + void + operator=(OptionalRef const volatile& other) volatile noexcept + { + m_value = other.m_value; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(OptionalRef&&) = default; + + KOKKOS_INLINE_FUNCTION + ~OptionalRef() = default; + + KOKKOS_INLINE_FUNCTION + explicit OptionalRef(T& arg_value) : m_value(&arg_value) { } + + KOKKOS_INLINE_FUNCTION + explicit OptionalRef(std::nullptr_t) : m_value(nullptr) { } + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(T& arg_value) { m_value = &arg_value; return *this; } + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(std::nullptr_t) { m_value = nullptr; return *this; } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + OptionalRef::type> + as_volatile() volatile noexcept { + return + OptionalRef::type>(*(*this)); + } + + KOKKOS_INLINE_FUNCTION + OptionalRef::type>::type> + as_volatile() const volatile noexcept { + return + OptionalRef::type>::type>(*(*this)); + } + + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + T& operator*() & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T const& operator*() const & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T volatile& operator*() volatile & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T const volatile& operator*() const volatile & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T&& operator*() && { + KOKKOS_EXPECTS(this->has_value()); + return std::move(*m_value); + } + + KOKKOS_INLINE_FUNCTION + T* operator->() { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const* operator->() const { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T volatile* operator->() volatile { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const volatile* operator->() const volatile { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T* get() { + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const* get() const { + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T volatile* get() volatile { + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const volatile* get() const volatile { + return m_value; + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + operator bool() { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + operator bool() const { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + operator bool() volatile { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + operator bool() const volatile { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() const { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() volatile { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() const volatile { return m_value != nullptr; } + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + + +#endif /* #ifndef KOKKOS_IMPL_OPTIONALREF_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp index d84a854622..687a0e9c37 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp @@ -55,104 +55,7 @@ namespace Kokkos { namespace Impl { -template class TaskQueue< Kokkos::Serial > ; - -void TaskQueueSpecialization< Kokkos::Serial >::execute - ( TaskQueue< Kokkos::Serial > * const queue ) -{ - using exec_space = Kokkos::Serial ; - using tqs_queue_type = TaskQueue< exec_space > ; - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< exec_space > ; - - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - // Set default buffers - serial_resize_thread_team_data( 0 /* global reduce buffer */ - , 512 /* team reduce buffer */ - , 0 /* team shared buffer */ - , 0 /* thread local buffer */ - ); - - Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); - - Member exec( *data ); - - // Loop until all queues are empty - while ( 0 < queue->m_ready_count ) { - - task_root_type * task = end ; - - for ( int i = 0 ; i < tqs_queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = tqs_queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - if ( end != task ) { - - // pop_ready_task resulted in lock == task->m_next - // In the executing state - - (*task->m_apply)( task , & exec ); - -#if 0 - printf( "TaskQueue::executed: 0x%lx { 0x%lx 0x%lx %d %d %d }\n" - , uintptr_t(task) - , uintptr_t(task->m_wait) - , uintptr_t(task->m_next) - , task->m_task_type - , task->m_priority - , task->m_ref_count ); -#endif - - // If a respawn then re-enqueue otherwise the task is complete - // and all tasks waiting on this task are updated. - queue->complete( task ); - } - else if ( 0 != queue->m_ready_count ) { - Kokkos::abort("TaskQueue::execute ERROR: ready_count"); - } - } -} - -void TaskQueueSpecialization< Kokkos::Serial > :: - iff_single_thread_recursive_execute( - TaskQueue< Kokkos::Serial > * const queue ) -{ - using exec_space = Kokkos::Serial ; - using tqs_queue_type = TaskQueue< exec_space > ; - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< exec_space > ; - - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); - - Member exec( *data ); - - // Loop until no runnable task - - task_root_type * task = end ; - - do { - - task = end ; - - for ( int i = 0 ; i < tqs_queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = tqs_queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - if ( end == task ) break ; - - (*task->m_apply)( task , & exec ); - - queue->complete( task ); - - } while(1); -} +template class TaskQueue; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp index 2fec5dfb89..c379a12fb1 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp @@ -47,7 +47,11 @@ #include #if defined( KOKKOS_ENABLE_TASKDAG ) +#include + #include +#include +#include //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -55,32 +59,217 @@ namespace Kokkos { namespace Impl { -//---------------------------------------------------------------------------- - -template<> -class TaskQueueSpecialization< Kokkos::Serial > +template +class TaskQueueSpecialization< + SimpleTaskScheduler +> { public: - using execution_space = Kokkos::Serial ; - using memory_space = Kokkos::HostSpace ; - using queue_type = Kokkos::Impl::TaskQueue< execution_space > ; - using task_base_type = Kokkos::Impl::TaskBase< void , void , void > ; - using member_type = Kokkos::Impl::HostThreadTeamMember< execution_space > ; + // Note: Scheduler may be an incomplete type at class scope (but not inside + // of the methods, obviously) + + using execution_space = Kokkos::Serial; + using memory_space = Kokkos::HostSpace; + using scheduler_type = SimpleTaskScheduler; + using member_type = TaskTeamMemberAdapter< + HostThreadTeamMember, scheduler_type + >; static - void iff_single_thread_recursive_execute( queue_type * const ); + void execute(scheduler_type const& scheduler) + { + using task_base_type = typename scheduler_type::task_base_type; - static - void execute( queue_type * const ); + // Set default buffers + serial_resize_thread_team_data( + 0, /* global reduce buffer */ + 512, /* team reduce buffer */ + 0, /* team shared buffer */ + 0 /* thread local buffer */ + ); - template< typename TaskType > - static - typename TaskType::function_type - get_function_pointer() { return TaskType::apply ; } + Impl::HostThreadTeamData& self = *Impl::serial_get_thread_team_data(); + + auto& queue = scheduler.queue(); + auto team_scheduler = scheduler.get_team_scheduler(0); + + member_type member(scheduler, self); + + auto current_task = OptionalRef(nullptr); + + while(not queue.is_done()) { + + // Each team lead attempts to acquire either a thread team task + // or a single thread task for the team. + + // pop a task off + current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); + + // run the task + if(current_task) { + current_task->as_runnable_task().run(member); + // Respawns are handled in the complete function + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } + + } + + static constexpr uint32_t + get_max_team_count(execution_space const&) noexcept + { + return 1; + } + + template + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) + { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } }; -extern template class TaskQueue< Kokkos::Serial > ; +//---------------------------------------------------------------------------- + +template +class TaskQueueSpecializationConstrained< + Scheduler, + typename std::enable_if< + std::is_same::value + >::type +> +{ +public: + + // Note: Scheduler may be an incomplete type at class scope (but not inside + // of the methods, obviously) + + using execution_space = Kokkos::Serial; + using memory_space = Kokkos::HostSpace; + using scheduler_type = Scheduler; + using member_type = TaskTeamMemberAdapter< + HostThreadTeamMember, scheduler_type + >; + + static + void iff_single_thread_recursive_execute(scheduler_type const& scheduler) { + using task_base_type = TaskBase; + using queue_type = typename scheduler_type::queue_type; + + task_base_type * const end = (task_base_type *) task_base_type::EndTag ; + + Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); + + member_type exec( scheduler, *data ); + + // Loop until no runnable task + + task_base_type * task = end ; + + auto* const queue = scheduler.m_queue; + + do { + + task = end ; + + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); + } + } + + if ( end == task ) break ; + + (*task->m_apply)( task , & exec ); + + queue->complete( task ); + + } while(1); + + } + + static + void execute(scheduler_type const& scheduler) + { + using task_base_type = TaskBase; + using queue_type = typename scheduler_type::queue_type; + + task_base_type * const end = (task_base_type *) task_base_type::EndTag ; + + // Set default buffers + serial_resize_thread_team_data( + 0, /* global reduce buffer */ + 512, /* team reduce buffer */ + 0, /* team shared buffer */ + 0 /* thread local buffer */ + ); + + auto* const queue = scheduler.m_queue; + + Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); + + member_type exec( scheduler, *data ); + + // Loop until all queues are empty + while ( 0 < queue->m_ready_count ) { + + task_base_type * task = end ; + + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); + } + } + + if ( end != task ) { + + // pop_ready_task resulted in lock == task->m_next + // In the executing state + + (*task->m_apply)( task , & exec ); + +#if 0 + printf( "TaskQueue::executed: 0x%lx { 0x%lx 0x%lx %d %d %d }\n" + , uintptr_t(task) + , uintptr_t(task->m_wait) + , uintptr_t(task->m_next) + , task->m_task_type + , task->m_priority + , task->m_ref_count ); +#endif + + // If a respawn then re-enqueue otherwise the task is complete + // and all tasks waiting on this task are updated. + queue->complete( task ); + } + else if ( 0 != queue->m_ready_count ) { + Kokkos::abort("TaskQueue::execute ERROR: ready_count"); + } + } + } + + template + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) + { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } +}; + +extern template class TaskQueue< Kokkos::Serial, typename Kokkos::Serial::memory_space > ; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp index 658f1db06b..77eb69d081 100644 --- a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp @@ -48,11 +48,11 @@ namespace Impl { __thread int SharedAllocationRecord::t_tracking_enabled = 1; +#ifdef KOKKOS_DEBUG bool SharedAllocationRecord< void , void >:: is_sane( SharedAllocationRecord< void , void > * arg_record ) { -#ifdef KOKKOS_DEBUG SharedAllocationRecord * const root = arg_record ? arg_record->m_root : 0 ; bool ok = root != 0 && root->use_count() == 0 ; @@ -102,16 +102,23 @@ is_sane( SharedAllocationRecord< void , void > * arg_record ) } } return ok ; -#else - Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord::is_sane only works with KOKKOS_DEBUG enabled"); - return false ; -#endif } +#else + +bool +SharedAllocationRecord< void , void >:: +is_sane( SharedAllocationRecord< void , void > * ) +{ + Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord::is_sane only works with KOKKOS_DEBUG enabled"); + return false ; +} +#endif //#ifdef KOKKOS_DEBUG + +#ifdef KOKKOS_DEBUG SharedAllocationRecord * SharedAllocationRecord::find( SharedAllocationRecord * const arg_root , void * const arg_data_ptr ) { -#ifdef KOKKOS_DEBUG SharedAllocationRecord * root_next = 0 ; static constexpr SharedAllocationRecord * zero = nullptr; @@ -130,11 +137,15 @@ SharedAllocationRecord::find( SharedAllocationRecord * con Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord failed locking/unlocking"); } return r ; +} #else +SharedAllocationRecord * +SharedAllocationRecord::find( SharedAllocationRecord * const , void * const ) +{ Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord::find only works with KOKKOS_DEBUG enabled"); return nullptr; -#endif } +#endif /**\brief Construct and insert into 'arg_root' tracking set. @@ -271,6 +282,7 @@ decrement( SharedAllocationRecord< void , void > * arg_record ) return arg_record ; } +#ifdef KOKKOS_DEBUG void SharedAllocationRecord< void , void >:: print_host_accessible_records( std::ostream & s @@ -278,7 +290,6 @@ print_host_accessible_records( std::ostream & s , const SharedAllocationRecord * const root , const bool detail ) { -#ifdef KOKKOS_DEBUG const SharedAllocationRecord< void , void > * r = root ; char buffer[256] ; @@ -339,12 +350,20 @@ print_host_accessible_records( std::ostream & s r = r->m_next ; } while ( r != root ); } +} #else +void +SharedAllocationRecord< void , void >:: +print_host_accessible_records( std::ostream & + , const char * const + , const SharedAllocationRecord * const + , const bool ) +{ Kokkos::Impl::throw_runtime_exception( "Kokkos::Impl::SharedAllocationRecord::print_host_accessible_records" " only works with KOKKOS_DEBUG enabled"); -#endif } +#endif } /* namespace Impl */ } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp b/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp new file mode 100644 index 0000000000..c2dbc96814 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp @@ -0,0 +1,646 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_SIMPLETASKSCHEDULER_HPP +#define KOKKOS_SIMPLETASKSCHEDULER_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include +//---------------------------------------------------------------------------- + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +namespace Impl { + +// TODO @tasking @cleanup move this +template +struct DefaultDestroy { + T* managed_object; + KOKKOS_FUNCTION + void destroy_shared_allocation() { + managed_object->~T(); + } +}; + + +template +class ExecutionSpaceInstanceStorage + : private NoUniqueAddressMemberEmulation +{ +private: + + using base_t = NoUniqueAddressMemberEmulation; + +protected: + + constexpr explicit + ExecutionSpaceInstanceStorage() + : base_t() + { } + + KOKKOS_INLINE_FUNCTION + constexpr explicit + ExecutionSpaceInstanceStorage(ExecutionSpace const& arg_execution_space) + : base_t(arg_execution_space) + { } + + KOKKOS_INLINE_FUNCTION + constexpr explicit + ExecutionSpaceInstanceStorage(ExecutionSpace&& arg_execution_space) + : base_t(std::move(arg_execution_space)) + { } + + KOKKOS_INLINE_FUNCTION + ExecutionSpace& execution_space_instance() & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + ExecutionSpace const& execution_space_instance() const & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + ExecutionSpace&& execution_space_instance() && + { + return std::move(*this).no_unique_address_data_member(); + } +}; + + +template +class MemorySpaceInstanceStorage + : private NoUniqueAddressMemberEmulation +{ +private: + + using base_t = NoUniqueAddressMemberEmulation; + +protected: + + MemorySpaceInstanceStorage() + : base_t() + { } + + KOKKOS_INLINE_FUNCTION + MemorySpaceInstanceStorage(MemorySpace const& arg_memory_space) + : base_t(arg_memory_space) + { } + + KOKKOS_INLINE_FUNCTION + constexpr explicit + MemorySpaceInstanceStorage(MemorySpace&& arg_memory_space) + : base_t(arg_memory_space) + { } + + KOKKOS_INLINE_FUNCTION + MemorySpace& memory_space_instance() & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + MemorySpace const& memory_space_instance() const & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + MemorySpace&& memory_space_instance() && + { + return std::move(*this).no_unique_address_data_member(); + } +}; + +} // end namespace Impl + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template + // requires ExecutionSpace && TaskQueue +class SimpleTaskScheduler + : public Impl::TaskSchedulerBase, + private Impl::ExecutionSpaceInstanceStorage, + private Impl::MemorySpaceInstanceStorage, + private Impl::NoUniqueAddressMemberEmulation +{ +public: + // TODO @tasking @generalization (maybe?) don't force QueueType to be complete here + + using scheduler_type = SimpleTaskScheduler; // tag as scheduler concept + using execution_space = ExecSpace; + using task_queue_type = QueueType; + using memory_space = typename task_queue_type::memory_space; + using memory_pool = typename task_queue_type::memory_pool; + + using team_scheduler_info_type = typename task_queue_type::team_scheduler_info_type; + using task_scheduling_info_type = typename task_queue_type::task_scheduling_info_type; + using specialization = Impl::TaskQueueSpecialization; + using member_type = typename specialization::member_type; + + template + using runnable_task_type = typename QueueType::template runnable_task_type; + + using task_base_type = typename task_queue_type::task_base_type; + using runnable_task_base_type = typename task_queue_type::runnable_task_base_type; + + using task_queue_traits = typename QueueType::task_queue_traits; + + template + using future_type = Kokkos::BasicFuture; + template + using future_type_for_functor = future_type; + +private: + + template + friend class BasicFuture; + + using track_type = Kokkos::Impl::SharedAllocationTracker; + using execution_space_storage = Impl::ExecutionSpaceInstanceStorage; + using memory_space_storage = Impl::MemorySpaceInstanceStorage; + using team_scheduler_info_storage = Impl::NoUniqueAddressMemberEmulation; + + track_type m_track; + task_queue_type* m_queue = nullptr; + + KOKKOS_INLINE_FUNCTION + static constexpr task_base_type* _get_task_ptr(std::nullptr_t) { return nullptr; } + + template + KOKKOS_INLINE_FUNCTION + static constexpr task_base_type* _get_task_ptr(future_type&& f) + { + return f.m_task; + } + + template < + int TaskEnum, + class DepTaskType, + class FunctorType + > + KOKKOS_FUNCTION + future_type_for_functor::type> + _spawn_impl( + DepTaskType arg_predecessor_task, + TaskPriority arg_priority, + typename runnable_task_base_type::function_type apply_function_ptr, + typename runnable_task_base_type::destroy_type destroy_function_ptr, + FunctorType&& functor + ) + { + KOKKOS_EXPECTS(m_queue != nullptr); + + using functor_future_type = future_type_for_functor::type>; + using task_type = typename task_queue_type::template runnable_task_type< + FunctorType, scheduler_type + >; + + // Reference count starts at two: + // +1 for the matching decrement when task is complete + // +1 for the future + auto& runnable_task = *m_queue->template allocate_and_construct( + /* functor = */ std::forward(functor), + /* apply_function_ptr = */ apply_function_ptr, + /* task_type = */ static_cast(TaskEnum), + /* priority = */ arg_priority, + /* queue_base = */ m_queue, + /* initial_reference_count = */ 2 + ); + + if(arg_predecessor_task != nullptr) { + m_queue->initialize_scheduling_info_from_predecessor( + runnable_task, *arg_predecessor_task + ); + runnable_task.set_predecessor(*arg_predecessor_task); + arg_predecessor_task->decrement_and_check_reference_count(); + } + else { + m_queue->initialize_scheduling_info_from_team_scheduler_info( + runnable_task, team_scheduler_info() + ); + } + + auto rv = functor_future_type(&runnable_task); + + Kokkos::memory_fence(); // fence to ensure dependent stores are visible + + m_queue->schedule_runnable( + std::move(runnable_task), + team_scheduler_info() + ); + // note that task may be already completed even here, so don't touch it again + + return rv; + } + + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + SimpleTaskScheduler() = default; + + explicit + SimpleTaskScheduler( + execution_space const& arg_execution_space, + memory_space const& arg_memory_space, + memory_pool const& arg_memory_pool + ) : execution_space_storage(arg_execution_space), + memory_space_storage(arg_memory_space) + { + // Ask the task queue how much space it needs (usually will just be + // sizeof(task_queue_type), but some queues may need additional storage + // dependent on runtime conditions or properties of the execution space) + auto const allocation_size = task_queue_type::task_queue_allocation_size( + arg_execution_space, + arg_memory_space, + arg_memory_pool + ); + + // TODO @tasking @generalization DSH better encapsulation of the SharedAllocationRecord pattern + using record_type = Impl::SharedAllocationRecord< + memory_space, Impl::DefaultDestroy + >; + + // Allocate space for the task queue + auto* record = record_type::allocate( + memory_space(), "TaskQueue", allocation_size + ); + m_queue = new (record->data()) task_queue_type( + arg_execution_space, + arg_memory_space, + arg_memory_pool + ); + record->m_destroy.managed_object = m_queue; + m_track.assign_allocated_record_to_uninitialized(record); + } + + explicit + SimpleTaskScheduler( + execution_space const& arg_execution_space, + memory_pool const& pool + ) : SimpleTaskScheduler(arg_execution_space, memory_space{}, pool) + { /* forwarding ctor, must be empty */ } + + explicit + SimpleTaskScheduler(memory_pool const& pool) + : SimpleTaskScheduler(execution_space{}, memory_space{}, pool) + { /* forwarding ctor, must be empty */ } + + SimpleTaskScheduler( + memory_space const & arg_memory_space, + size_t const mempool_capacity, + unsigned const mempool_min_block_size, // = 1u << 6 + unsigned const mempool_max_block_size, // = 1u << 10 + unsigned const mempool_superblock_size // = 1u << 12 + ) : SimpleTaskScheduler( + execution_space{}, + arg_memory_space, + memory_pool( + arg_memory_space, mempool_capacity, mempool_min_block_size, + mempool_max_block_size, mempool_superblock_size + ) + ) + { /* forwarding ctor, must be empty */ } + + // end Constructors, destructor, and assignment }}}2 + //---------------------------------------------------------------------------- + + // Note that this is an expression of shallow constness + KOKKOS_INLINE_FUNCTION + task_queue_type& queue() const + { + KOKKOS_EXPECTS(m_queue != nullptr); + return *m_queue; + } + + KOKKOS_INLINE_FUNCTION + SimpleTaskScheduler + get_team_scheduler(int rank_in_league) const noexcept + { + KOKKOS_EXPECTS(m_queue != nullptr); + auto rv = SimpleTaskScheduler{ *this }; + rv.team_scheduler_info() = m_queue->initial_team_scheduler_info(rank_in_league); + return rv; + } + + KOKKOS_INLINE_FUNCTION + execution_space const& get_execution_space() const { return this->execution_space_instance(); } + + KOKKOS_INLINE_FUNCTION + team_scheduler_info_type& team_scheduler_info() & + { + return this->team_scheduler_info_storage::no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + team_scheduler_info_type const& team_scheduler_info() const & + { + return this->team_scheduler_info_storage::no_unique_address_data_member(); + } + + //---------------------------------------------------------------------------- + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE + // For backwards compatibility purposes only + KOKKOS_DEPRECATED + KOKKOS_INLINE_FUNCTION + memory_pool* + memory() const noexcept KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE + { + if(m_queue != nullptr) return &(m_queue->get_memory_pool()); + else return nullptr; + } + #endif + + //---------------------------------------------------------------------------- + + template + KOKKOS_FUNCTION + static + Kokkos::BasicFuture + spawn( + Impl::TaskPolicyWithScheduler&& arg_policy, + typename runnable_task_base_type::function_type arg_function, + typename runnable_task_base_type::destroy_type arg_destroy, + FunctorType&& arg_functor + ) + { + return std::move(arg_policy.scheduler()).template _spawn_impl( + _get_task_ptr(std::move(arg_policy.predecessor())), + arg_policy.priority(), + arg_function, + arg_destroy, + std::forward(arg_functor) + ); + } + + template + KOKKOS_FUNCTION + Kokkos::BasicFuture + spawn( + Impl::TaskPolicyWithPredecessor&& arg_policy, + FunctorType&& arg_functor + ) + { + static_assert( + std::is_same::value, + "Can't create a task policy from a scheduler and a future from a different scheduler" + ); + + using task_type = runnable_task_type; + typename task_type::function_type const ptr = task_type::apply; + typename task_type::destroy_type const dtor = task_type::destroy; + + return _spawn_impl( + std::move(arg_policy).predecessor().m_task, + arg_policy.priority(), + ptr, dtor, + std::forward(arg_functor) + ); + } + + template + KOKKOS_FUNCTION + static void + respawn( + FunctorType* functor, + BasicFuture const& predecessor, + TaskPriority priority = TaskPriority::Regular + ) { + using task_type = typename task_queue_type::template runnable_task_type< + FunctorType, scheduler_type + >; + + auto& task = *static_cast(functor); + + KOKKOS_EXPECTS(!task.get_respawn_flag()); + + task.set_priority(priority); + task.set_predecessor(*predecessor.m_task); + task.set_respawn_flag(true); + } + + template + KOKKOS_FUNCTION + static void + respawn( + FunctorType* functor, + scheduler_type const&, + TaskPriority priority = TaskPriority::Regular + ) { + using task_type = typename task_queue_type::template runnable_task_type< + FunctorType, scheduler_type + >; + + auto& task = *static_cast(functor); + + KOKKOS_EXPECTS(!task.get_respawn_flag()); + + task.set_priority(priority); + KOKKOS_ASSERT(not task.has_predecessor()); + task.set_respawn_flag(true); + } + + + template + KOKKOS_FUNCTION + future_type + when_all(BasicFuture const predecessors[], int n_predecessors) { + + // TODO @tasking @generalization DSH propagate scheduling info + + using task_type = typename task_queue_type::aggregate_task_type; + + future_type rv; + + if(n_predecessors > 0) { + task_queue_type* queue_ptr = nullptr; + + // Loop over the predecessors to find the queue and increment the reference + // counts + for(int i_pred = 0; i_pred < n_predecessors; ++i_pred) { + + auto* predecessor_task_ptr = predecessors[i_pred].m_task; + + if(predecessor_task_ptr != nullptr) { + // TODO @tasking @cleanup DSH figure out when this is allowed to be nullptr (if at all anymore) + + // Increment reference count to track subsequent assignment. + // TODO @tasking @optimization DSH figure out if this reference count increment is necessary + predecessor_task_ptr->increment_reference_count(); + + // TODO @tasking @cleanup DSH we should just set a boolean here instead to make this more readable + queue_ptr = m_queue; + } + + } // end loop over predecessors + + // This only represents a non-ready future if at least one of the predecessors + // has a task (and thus, a queue) + if(queue_ptr != nullptr) { + auto& q = *queue_ptr; + + auto* aggregate_task_ptr = q.template allocate_and_construct_with_vla_emulation< + task_type, task_base_type* + >( + /* n_vla_entries = */ n_predecessors, + /* aggregate_predecessor_count = */ n_predecessors, + /* queue_base = */ &q, + /* initial_reference_count = */ 2 + ); + + rv = future_type(aggregate_task_ptr); + + for(int i_pred = 0; i_pred < n_predecessors; ++i_pred) { + aggregate_task_ptr->vla_value_at(i_pred) = predecessors[i_pred].m_task; + } + + Kokkos::memory_fence(); // we're touching very questionable memory, so be sure to fence + + q.schedule_aggregate(std::move(*aggregate_task_ptr), team_scheduler_info()); + // the aggregate may be processed at any time, so don't touch it after this + } + } + + return rv; + } + + template + KOKKOS_FUNCTION + future_type + when_all(int n_calls, F&& func) + { + // TODO @tasking @generalization DSH propagate scheduling info? + + // later this should be std::invoke_result_t + using generated_type = decltype(func(0)); + using task_type = typename task_queue_type::aggregate_task_type; + + static_assert( + is_future::value, + "when_all function must return a Kokkos future (an instance of Kokkos::BasicFuture)" + ); + static_assert( + std::is_base_of::value, + "when_all function must return a Kokkos::BasicFuture of a compatible scheduler type" + ); + + auto* aggregate_task = m_queue->template allocate_and_construct_with_vla_emulation< + task_type, task_base_type* + >( + /* n_vla_entries = */ n_calls, + /* aggregate_predecessor_count = */ n_calls, + /* queue_base = */ m_queue, + /* initial_reference_count = */ 2 + ); + + auto rv = future_type(aggregate_task); + + for(int i_call = 0; i_call < n_calls; ++i_call) { + + auto generated_future = func(i_call); + + if(generated_future.m_task != nullptr) { + generated_future.m_task->increment_reference_count(); + aggregate_task->vla_value_at(i_call) = generated_future.m_task; + + KOKKOS_ASSERT(m_queue == generated_future.m_task->ready_queue_base_ptr() + && "Queue mismatch in when_all" + ); + } + + } + + Kokkos::memory_fence(); + + m_queue->schedule_aggregate(std::move(*aggregate_task), team_scheduler_info()); + // This could complete at any moment, so don't touch anything after this + + return rv; + } + +}; + + +template +inline +void wait(SimpleTaskScheduler const& scheduler) +{ + using scheduler_type = SimpleTaskScheduler; + scheduler_type::specialization::execute(scheduler); +} + +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_SIMPLETASKSCHEDULER_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp new file mode 100644 index 0000000000..d73028eb5b --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp @@ -0,0 +1,207 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_SINGLETASKQUEUE_HPP +#define KOKKOS_IMPL_SINGLETASKQUEUE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template < + class ExecSpace, + class MemorySpace, + class TaskQueueTraits, + class MemoryPool +> +class SingleTaskQueue + : public TaskQueueMemoryManager, + public TaskQueueCommonMixin> +{ +private: + + using base_t = TaskQueueMemoryManager; + using common_mixin_t = TaskQueueCommonMixin; + + struct EmptyTeamSchedulerInfo { }; + struct EmptyTaskSchedulingInfo { }; + +public: + + using task_queue_type = SingleTaskQueue; // mark as task_queue concept + using task_queue_traits = TaskQueueTraits; + using task_base_type = TaskNode; + using ready_queue_type = typename TaskQueueTraits::template ready_queue_type; + + using team_scheduler_info_type = EmptyTeamSchedulerInfo; + using task_scheduling_info_type = EmptyTaskSchedulingInfo; + + using runnable_task_base_type = RunnableTaskBase; + + template + // requires TaskScheduler && TaskFunctor + using runnable_task_type = RunnableTask< + task_queue_traits, Scheduler, typename Functor::value_type, Functor + >; + + using aggregate_task_type = AggregateTask; + + // Number of allowed priorities + static constexpr int NumQueue = 3; + +private: + + ready_queue_type m_ready_queues[NumQueue][2]; + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + SingleTaskQueue() = delete; + SingleTaskQueue(SingleTaskQueue const&) = delete; + SingleTaskQueue(SingleTaskQueue&&) = delete; + SingleTaskQueue& operator=(SingleTaskQueue const&) = delete; + SingleTaskQueue& operator=(SingleTaskQueue&&) = delete; + + explicit + SingleTaskQueue( + typename base_t::execution_space const&, + typename base_t::memory_space const&, + typename base_t::memory_pool const& arg_memory_pool + ) + : base_t(arg_memory_pool) + { } + + ~SingleTaskQueue() { + for(int i_priority = 0; i_priority < NumQueue; ++i_priority) { + KOKKOS_EXPECTS(m_ready_queues[i_priority][TaskTeam].empty()); + KOKKOS_EXPECTS(m_ready_queues[i_priority][TaskSingle].empty()); + } + } + + // end Constructors, destructors, and assignment }}}2 + //---------------------------------------------------------------------------- + + KOKKOS_FUNCTION + void + schedule_runnable( + runnable_task_base_type&& task, + team_scheduler_info_type const& info + ) { + this->schedule_runnable_to_queue( + std::move(task), + m_ready_queues[int(task.get_priority())][int(task.get_task_type())], + info + ); + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + } + + KOKKOS_FUNCTION + OptionalRef + pop_ready_task( + team_scheduler_info_type const& info + ) + { + OptionalRef return_value; + // always loop in order of priority first, then prefer team tasks over single tasks + for(int i_priority = 0; i_priority < NumQueue; ++i_priority) { + + // Check for a team task with this priority + return_value = m_ready_queues[i_priority][TaskTeam].pop(); + if(return_value) return return_value; + + // Check for a single task with this priority + return_value = m_ready_queues[i_priority][TaskSingle].pop(); + if(return_value) return return_value; + + } + // if nothing was found, return a default-constructed (empty) OptionalRef + return return_value; + } + + KOKKOS_INLINE_FUNCTION + constexpr team_scheduler_info_type + initial_team_scheduler_info(int) const noexcept { return { }; } + +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_SINGLETASKQUEUE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp new file mode 100644 index 0000000000..b0c06fb26e --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp @@ -0,0 +1,329 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKBASE_HPP +#define KOKKOS_IMPL_TASKBASE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +/** \brief Base class for task management, access, and execution. + * + * Inheritance structure to allow static_cast from the task root type + * and a task's FunctorType. + * + * // Enable a functor to access the base class + * // and provide memory for result value. + * TaskBase< Space , ResultType , FunctorType > + * : TaskBase< void , void , void > + * , FunctorType + * { ... }; + * Followed by memory allocated for result value. + * + * + * States of a task: + * + * Constructing State, NOT IN a linked list + * m_wait == 0 + * m_next == 0 + * + * Scheduling transition : Constructing -> Waiting + * before: + * m_wait == 0 + * m_next == this task's initial dependence, 0 if none + * after: + * m_wait == EndTag + * m_next == EndTag + * + * Waiting State, IN a linked list + * m_apply != 0 + * m_queue != 0 + * m_ref_count > 0 + * m_wait == head of linked list of tasks waiting on this task + * m_next == next of linked list of tasks + * + * transition : Waiting -> Executing + * before: + * m_next == EndTag + * after:: + * m_next == LockTag + * + * Executing State, NOT IN a linked list + * m_apply != 0 + * m_queue != 0 + * m_ref_count > 0 + * m_wait == head of linked list of tasks waiting on this task + * m_next == LockTag + * + * Respawn transition : Executing -> Executing-Respawn + * before: + * m_next == LockTag + * after: + * m_next == this task's updated dependence, 0 if none + * + * Executing-Respawn State, NOT IN a linked list + * m_apply != 0 + * m_queue != 0 + * m_ref_count > 0 + * m_wait == head of linked list of tasks waiting on this task + * m_next == this task's updated dependence, 0 if none + * + * transition : Executing -> Complete + * before: + * m_wait == head of linked list + * after: + * m_wait == LockTag + * + * Complete State, NOT IN a linked list + * m_wait == LockTag: cannot add dependence (<=> complete) + * m_next == LockTag: not a member of a wait queue + * + */ +class TaskBase +{ +public: + + enum : int16_t { TaskTeam = 0 , TaskSingle = 1 , Aggregate = 2 }; + enum : uintptr_t { LockTag = ~uintptr_t(0) , EndTag = ~uintptr_t(1) }; + + template friend class Kokkos::BasicTaskScheduler ; + + using queue_type = TaskQueueBase; + + using function_type = void(*)( TaskBase * , void * ); + typedef void (* destroy_type) ( TaskBase * ); + + // sizeof(TaskBase) == 48 + + function_type m_apply = nullptr; ///< Apply function pointer + queue_type* m_queue = nullptr; ///< Pointer to the scheduler + TaskBase* m_next = nullptr; ///< next in linked list of ready tasks + TaskBase* m_wait = nullptr; ///< Queue of tasks waiting on this + int32_t m_ref_count = 0; + int32_t m_alloc_size = 0; + int32_t m_dep_count ; ///< Aggregate's number of dependences + int16_t m_task_type ; ///< Type of task + int16_t m_priority ; ///< Priority of runnable task + + TaskBase( TaskBase && ) = delete ; + TaskBase( const TaskBase & ) = delete ; + TaskBase & operator = ( TaskBase && ) = delete ; + TaskBase & operator = ( const TaskBase & ) = delete ; + +#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND + KOKKOS_INLINE_FUNCTION ~TaskBase() {}; +#else + KOKKOS_INLINE_FUNCTION ~TaskBase() = default; +#endif + + KOKKOS_INLINE_FUNCTION constexpr + TaskBase() + : m_apply( nullptr ) + , m_queue( nullptr ) + , m_next( nullptr ) + , m_wait( nullptr ) + , m_ref_count( 0 ) + , m_alloc_size( 0 ) + , m_dep_count( 0 ) + , m_task_type( 0 ) + , m_priority( 0 ) + {} + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + TaskBase * volatile * aggregate_dependences() volatile + { return reinterpret_cast( this + 1 ); } + + KOKKOS_INLINE_FUNCTION + bool requested_respawn() + { + // This should only be called when a task has finished executing and is + // in the transition to either the complete or executing-respawn state. + TaskBase * const lock = reinterpret_cast< TaskBase * >( LockTag ); + return lock != m_next; + } + + KOKKOS_INLINE_FUNCTION + void add_dependence( TaskBase* dep ) + { + // Precondition: lock == m_next + + TaskBase * const lock = (TaskBase *) LockTag ; + + // Assign dependence to m_next. It will be processed in the subsequent + // call to schedule. Error if the dependence is reset. + if ( lock != Kokkos::atomic_exchange( & m_next, dep ) ) { + Kokkos::abort("TaskScheduler ERROR: resetting task dependence"); + } + + if ( 0 != dep ) { + // The future may be destroyed upon returning from this call + // so increment reference count to track this assignment. + Kokkos::atomic_increment( &(dep->m_ref_count) ); + } + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + int32_t reference_count() const + { return *((int32_t volatile *)( & m_ref_count )); } + +}; + +static_assert( sizeof(TaskBase) == 48 + , "Verifying expected sizeof(TaskBase)" ); + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template< class Scheduler, typename ResultType , class FunctorType > +class Task + : public TaskBase, + public FunctorType +{ +public: + + Task() = delete ; + Task( Task && ) = delete ; + Task( const Task & ) = delete ; + Task & operator = ( Task && ) = delete ; + Task & operator = ( const Task & ) = delete ; + + + using root_type = TaskBase; + using functor_type = FunctorType ; + using result_type = ResultType ; + + using specialization = TaskQueueSpecialization ; + using member_type = typename specialization::member_type ; + + KOKKOS_INLINE_FUNCTION + void apply_functor( member_type * const member , void * ) + { this->functor_type::operator()( *member ); } + + template< typename T > + KOKKOS_INLINE_FUNCTION + void apply_functor( member_type * const member + , T * const result ) + { this->functor_type::operator()( *member , *result ); } + + KOKKOS_FUNCTION static + void destroy( root_type * root ) + { + TaskResult::destroy(root); + } + + KOKKOS_FUNCTION static + void apply( root_type * root , void * exec ) + { + Task* const task = static_cast< Task * >( root ); + member_type * const member = reinterpret_cast< member_type * >( exec ); + result_type * const result = TaskResult< result_type >::ptr( task ); + + // Task may be serial or team. + // If team then must synchronize before querying if respawn was requested. + // If team then only one thread calls destructor. + + const bool only_one_thread = +#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) + 0 == threadIdx.x && 0 == threadIdx.y ; +#else + 0 == member->team_rank(); +#endif + + task->apply_functor( member , result ); + + member->team_barrier(); + + if ( only_one_thread && !(task->requested_respawn()) ) { + // Did not respawn, destroy the functor to free memory. + task->functor_type::~functor_type(); + // Cannot destroy and deallocate the task until its dependences + // have been processed. + } + } + + // Constructor for runnable task + KOKKOS_INLINE_FUNCTION constexpr + Task( FunctorType && arg_functor ) + : root_type() , functor_type( std::move(arg_functor) ) + { } + + KOKKOS_INLINE_FUNCTION + ~Task() = delete; +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKBASE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp new file mode 100644 index 0000000000..35f8853f1f --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp @@ -0,0 +1,758 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKNODE_HPP +#define KOKKOS_IMPL_TASKNODE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +enum TaskType : int16_t { TaskTeam = 0 , TaskSingle = 1 , Aggregate = 2, TaskSpecial = -1 }; + +//============================================================================== + +/** Intrusive base class for things allocated with a Kokkos::MemoryPool + * + * @warning Memory pools assume that the address of this class is the same + * as the address of the most derived type that was allocated to + * have the given size. As a consequence, when interacting with + * multiple inheritance, this must always be the first base class + * of any derived class that uses it! + * @todo Consider inverting inheritance structure to avoid this problem? + * + * @tparam CountType type of integer used to store the allocation size + */ +template +class alignas(void*) PoolAllocatedObjectBase { +public: + + using pool_allocation_size_type = CountType; + +private: + + pool_allocation_size_type m_alloc_size; + +public: + + + KOKKOS_INLINE_FUNCTION + constexpr explicit PoolAllocatedObjectBase(pool_allocation_size_type allocation_size) + : m_alloc_size(allocation_size) + { } + + KOKKOS_INLINE_FUNCTION + CountType get_allocation_size() const noexcept { return m_alloc_size; } + +}; + +//============================================================================== + + +// TODO @tasking @cleanup DSH move this? +template +class ReferenceCountedBase { +public: + + using reference_count_size_type = CountType; + +private: + + reference_count_size_type m_ref_count = 0; + +public: + + KOKKOS_INLINE_FUNCTION + constexpr explicit + ReferenceCountedBase(reference_count_size_type initial_reference_count) + : m_ref_count(initial_reference_count) + { + // This can't be here because it breaks constexpr + // KOKKOS_EXPECTS(initial_reference_count > 0); + } + + /** Decrement the reference count, + * and return true iff this decrement caused + * the reference count to become zero + */ + KOKKOS_INLINE_FUNCTION + bool decrement_and_check_reference_count() + { + // TODO @tasking @memory_order DSH memory order + auto old_count = Kokkos::atomic_fetch_add(&m_ref_count, -1); + + KOKKOS_ASSERT(old_count > 0 && "reference count greater less than zero!"); + + return (old_count == 1); + } + + KOKKOS_INLINE_FUNCTION + void increment_reference_count() + { + Kokkos::atomic_increment(&m_ref_count); + } + +}; + +template +class AggregateTask; + +template +class RunnableTaskBase; + +//============================================================================== + +template +class TaskNode + : public PoolAllocatedObjectBase, // size 4, must be first! + public ReferenceCountedBase, // size 4 + public TaskQueueTraits::template intrusive_task_base_type> // size 8+ +{ +public: + + using priority_type = int16_t; + +private: + + using task_base_type = TaskNode; + using pool_allocated_base_type = PoolAllocatedObjectBase; + using reference_counted_base_type = ReferenceCountedBase; + using task_queue_traits = TaskQueueTraits; + using waiting_queue_type = + typename task_queue_traits::template waiting_queue_type; + + waiting_queue_type m_wait_queue; // size 8+ + + // TODO @tasking @cleanup DSH eliminate this, or make its purpose a bit more clear. It's only used in BasicFuture, and only for deallocation purposes + TaskQueueBase* m_ready_queue_base; + + TaskType m_task_type; // size 2 + priority_type m_priority; // size 2 + bool m_is_respawning = false; + +public: + + KOKKOS_INLINE_FUNCTION + constexpr + TaskNode( + TaskType task_type, + TaskPriority priority, + TaskQueueBase* queue_base, + reference_count_size_type initial_reference_count, + pool_allocation_size_type allocation_size + ) : pool_allocated_base_type( + /* allocation_size = */ allocation_size + ), + reference_counted_base_type( + /* initial_reference_count = */ initial_reference_count + ), + m_wait_queue(), + m_ready_queue_base(queue_base), + m_task_type(task_type), + m_priority(static_cast(priority)), + m_is_respawning(false) + { } + + TaskNode() = delete; + TaskNode(TaskNode const&) = delete; + TaskNode(TaskNode&&) = delete; + TaskNode& operator=(TaskNode const&) = delete; + TaskNode& operator=(TaskNode&&) = delete; + + KOKKOS_INLINE_FUNCTION + bool is_aggregate() const noexcept { return m_task_type == TaskType::Aggregate; } + + KOKKOS_INLINE_FUNCTION + bool is_runnable() const noexcept { return m_task_type != TaskType::Aggregate; } + + KOKKOS_INLINE_FUNCTION + bool is_runnable() const volatile noexcept { return m_task_type != TaskType::Aggregate; } + + KOKKOS_INLINE_FUNCTION + bool is_single_runnable() const noexcept { return m_task_type == TaskType::TaskSingle; } + + KOKKOS_INLINE_FUNCTION + bool is_team_runnable() const noexcept { return m_task_type == TaskType::TaskTeam; } + + KOKKOS_INLINE_FUNCTION + TaskType get_task_type() const noexcept { return m_task_type; } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase& + as_runnable_task() & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase const& + as_runnable_task() const & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast const&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase volatile& + as_runnable_task() volatile & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast volatile&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase const volatile& + as_runnable_task() const volatile & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast const volatile&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase&& + as_runnable_task() && { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast&&>(*this); + } + + template + KOKKOS_INLINE_FUNCTION + AggregateTask& + as_aggregate() & { + KOKKOS_EXPECTS(this->is_aggregate()); + return static_cast&>(*this); + } + + template + KOKKOS_INLINE_FUNCTION + AggregateTask const& + as_aggregate() const & { + KOKKOS_EXPECTS(this->is_aggregate()); + return static_cast const&>(*this); + } + + template + KOKKOS_INLINE_FUNCTION + AggregateTask&& + as_aggregate() && { + KOKKOS_EXPECTS(this->is_aggregate()); + return static_cast&&>(*this); + } + + KOKKOS_INLINE_FUNCTION + bool try_add_waiting(task_base_type& depends_on_this) { + return m_wait_queue.try_push(depends_on_this); + } + + template + KOKKOS_INLINE_FUNCTION + void consume_wait_queue(Function&& f) { + KOKKOS_EXPECTS(not m_wait_queue.is_consumed()); + m_wait_queue.consume(std::forward(f)); + } + + KOKKOS_INLINE_FUNCTION + bool wait_queue_is_consumed() const noexcept { + // TODO @tasking @memory_order DSH memory order + return m_wait_queue.is_consumed(); + } + + KOKKOS_INLINE_FUNCTION + TaskQueueBase* + ready_queue_base_ptr() const noexcept { + return m_ready_queue_base; + } + + KOKKOS_INLINE_FUNCTION + void set_priority(TaskPriority priority) noexcept { + KOKKOS_EXPECTS(!this->is_enqueued()); + m_priority = (priority_type)priority; + } + + KOKKOS_INLINE_FUNCTION + void set_priority(TaskPriority priority) volatile noexcept { + KOKKOS_EXPECTS(!this->is_enqueued()); + m_priority = (priority_type)priority; + } + + KOKKOS_INLINE_FUNCTION + TaskPriority get_priority() const noexcept { + return (TaskPriority)m_priority; + } + + KOKKOS_INLINE_FUNCTION + bool get_respawn_flag() const { return m_is_respawning; } + + KOKKOS_INLINE_FUNCTION + void set_respawn_flag(bool value = true) { + m_is_respawning = value; + } + + KOKKOS_INLINE_FUNCTION + void set_respawn_flag(bool value = true) volatile { + m_is_respawning = value; + } + +}; + +//============================================================================== + +template +class SchedulingInfoStorage; + +//============================================================================== + +template +class SchedulingInfoStorage + : public BaseType, // must be first base class for allocation reasons!!! + private NoUniqueAddressMemberEmulation +{ + +private: + + using base_t = BaseType; + using task_scheduling_info_type = SchedulingInfo; + +public: + + using base_t::base_t; + + KOKKOS_INLINE_FUNCTION + task_scheduling_info_type& scheduling_info() & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + task_scheduling_info_type const& scheduling_info() const & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + task_scheduling_info_type&& scheduling_info() && + { + return std::move(*this).no_unique_address_data_member(); + } + +}; + + +//============================================================================== + +template +class alignas(16) AggregateTask final + : public SchedulingInfoStorage< + TaskNode, + SchedulingInfo + >, // must be first base class for allocation reasons!!! + public ObjectWithVLAEmulation< + AggregateTask, + OwningRawPtr> + > +{ +private: + + using base_t = SchedulingInfoStorage< + TaskNode, + SchedulingInfo + >; + using vla_base_t = ObjectWithVLAEmulation< + AggregateTask, + OwningRawPtr> + >; + + using task_base_type = TaskNode; + +public: + + using aggregate_task_type = AggregateTask; // concept marker + + template + // requires std::is_constructible_v + KOKKOS_INLINE_FUNCTION + constexpr explicit + AggregateTask( + int32_t aggregate_predecessor_count, + Args&&... args + ) : base_t( + TaskType::Aggregate, + TaskPriority::Regular, // all aggregates are regular priority + std::forward(args)... + ), + vla_base_t(aggregate_predecessor_count) + { } + + KOKKOS_INLINE_FUNCTION + int32_t dependence_count() const { return this->n_vla_entries(); } + +}; + +//KOKKOS_IMPL_IS_CONCEPT(aggregate_task); + +//============================================================================== + + +template +class RunnableTaskBase + : public TaskNode // must be first base class for allocation reasons!!! +{ +private: + + using base_t = TaskNode; + +public: + + using task_base_type = TaskNode; + using function_type = void(*)( task_base_type * , void * ); + using destroy_type = void(*)( task_base_type * ); + using runnable_task_type = RunnableTaskBase; + +private: + + function_type m_apply; + task_base_type* m_predecessor = nullptr; + +public: + + template + // requires std::is_constructible_v + KOKKOS_INLINE_FUNCTION + constexpr explicit + RunnableTaskBase( + function_type apply_function_ptr, + Args&&... args + ) : base_t(std::forward(args)...), + m_apply(apply_function_ptr) + { } + + KOKKOS_INLINE_FUNCTION + bool has_predecessor() const { return m_predecessor != nullptr; } + + KOKKOS_INLINE_FUNCTION + void clear_predecessor() { m_predecessor = nullptr; } + + KOKKOS_INLINE_FUNCTION + void clear_predecessor() volatile { m_predecessor = nullptr; } + + template + KOKKOS_INLINE_FUNCTION + SchedulingInfo& + scheduling_info_as() + { + using info_storage_type = SchedulingInfoStorage; + + return static_cast(this)->scheduling_info(); + } + + template + KOKKOS_INLINE_FUNCTION + SchedulingInfo const& + scheduling_info_as() const + { + using info_storage_type = SchedulingInfoStorage; + + return static_cast(this)->scheduling_info(); + } + + + KOKKOS_INLINE_FUNCTION + task_base_type& get_predecessor() const { + KOKKOS_EXPECTS(m_predecessor != nullptr); + return *m_predecessor; + } + + KOKKOS_INLINE_FUNCTION + void set_predecessor(task_base_type& predecessor) + { + KOKKOS_EXPECTS(m_predecessor == nullptr); + // Increment the reference count so that predecessor doesn't go away + // before this task is enqueued. + // (should be memory order acquire) + predecessor.increment_reference_count(); + m_predecessor = &predecessor; + } + + KOKKOS_INLINE_FUNCTION + void acquire_predecessor_from(runnable_task_type& other) + { + KOKKOS_EXPECTS(m_predecessor == nullptr || other.m_predecessor == m_predecessor); + // since we're transfering, no need to modify the reference count + m_predecessor = other.m_predecessor; + other.m_predecessor = nullptr; + } + + KOKKOS_INLINE_FUNCTION + void acquire_predecessor_from(runnable_task_type& other) volatile + { + KOKKOS_EXPECTS(m_predecessor == nullptr || other.m_predecessor == m_predecessor); + // since we're transfering, no need to modify the reference count + m_predecessor = other.m_predecessor; + other.m_predecessor = nullptr; + } + + template + KOKKOS_INLINE_FUNCTION + void run(TeamMember& member) { + (*m_apply)(this, &member); + } +}; + +//KOKKOS_IMPL_IS_CONCEPT(runnable_task); + +//============================================================================== + +template +class TaskResultStorage : public Base +{ +private: + + using base_t = Base; + + alignas(Base) ResultType m_value = ResultType{}; + + +public: + + using base_t::base_t; + + KOKKOS_INLINE_FUNCTION + ResultType* value_pointer() { + // Over-alignment makes this a non-standard-layout class, + // so alignas() doesn't work + //static_assert( + // offsetof(TaskResultStorage, m_value) == sizeof(Base), + // "TaskResultStorage must be POD for layout purposes" + //); + return &m_value; + } + + KOKKOS_INLINE_FUNCTION + ResultType& value_reference() { return m_value; } + +}; + + +// TODO @tasking @optimization DSH optimization for empty types (in addition to void) +template +class TaskResultStorage : public Base +{ +private: + + using base_t = Base; + +public: + + using base_t::base_t; + + KOKKOS_INLINE_FUNCTION + void* value_pointer() noexcept { return nullptr; } + + KOKKOS_INLINE_FUNCTION + void value_reference() noexcept { } + +}; + +//============================================================================== + +template < + class TaskQueueTraits, + class Scheduler, + class ResultType, + class FunctorType +> +class alignas(16) RunnableTask + : // using nesting of base classes to control layout; multiple empty base classes + // may not be ABI compatible with CUDA on Windows + public TaskResultStorage< + ResultType, + SchedulingInfoStorage< + RunnableTaskBase, + typename Scheduler::task_queue_type::task_scheduling_info_type + > + >, // must be first base class + public FunctorType +{ +private: + using base_t = TaskResultStorage< + ResultType, + SchedulingInfoStorage< + RunnableTaskBase, + typename Scheduler::task_queue_type::task_scheduling_info_type + > + >; + + using runnable_task_base_type = RunnableTaskBase; + using scheduler_type = Scheduler; + using scheduling_info_type = + typename scheduler_type::task_scheduling_info_type; + using scheduling_info_storage_base = base_t; + + using task_base_type = TaskNode; + using specialization = TaskQueueSpecialization; + using member_type = typename specialization::member_type; + using result_type = ResultType; + using functor_type = FunctorType; + +public: + + template + // requires std::is_constructible_v + KOKKOS_INLINE_FUNCTION + constexpr explicit + RunnableTask( + FunctorType&& functor, + Args&&... args + ) : base_t( + std::forward(args)... + ), + functor_type(std::move(functor)) + { } + + KOKKOS_INLINE_FUNCTION + ~RunnableTask() = delete; + + KOKKOS_INLINE_FUNCTION + void update_scheduling_info( + member_type& member + ) { + // TODO @tasking @generalization DSH call a queue-specific hook here; for now, this info is already updated elsewhere + // this->scheduling_info() = member.scheduler().scheduling_info(); + } + + KOKKOS_INLINE_FUNCTION + void apply_functor(member_type* member, void*) + { + update_scheduling_info(*member); + this->functor_type::operator()(*member); + } + + template + KOKKOS_INLINE_FUNCTION + void apply_functor(member_type* member, T* val) + { + update_scheduling_info(*member); + //this->functor_type::operator()(*member, *val); + this->functor_type::operator()(*member, *val); + } + + KOKKOS_FUNCTION static + void destroy( task_base_type * root ) + { + //TaskResult::destroy(root); + } + + KOKKOS_FUNCTION static + void apply(task_base_type* self, void* member_as_void) + { + using task_type = Impl::RunnableTask*; + auto* const task = static_cast(self); + auto* const member = reinterpret_cast(member_as_void); + + // Now that we're over-aligning the result storage, this isn't a problem any more + //static_assert(std::is_standard_layout::value, + // "Tasks must be standard layout" + //); + //static_assert(std::is_pod::value, + // "Tasks must be PODs" + //); + + // Task may be serial or team. + // If team then must synchronize before querying if respawn was requested. + // If team then only one thread calls destructor. + + const bool only_one_thread = +#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) + 0 == threadIdx.x && 0 == threadIdx.y ; +#else + 0 == member->team_rank(); +#endif + + // Ensure that the respawn flag is set to zero + self->set_respawn_flag(false); + + //task->apply_functor(member, TaskResult::ptr(task)); + task->apply_functor(member, task->value_pointer()); + + member->team_barrier(); + + if ( only_one_thread && !(task->get_respawn_flag()) ) { + // Did not respawn, destroy the functor to free memory. + task->functor_type::~functor_type(); + // Cannot destroy and deallocate the task until its dependences + // have been processed. + } + } + +}; + +} /* namespace Impl */ + + +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKNODE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp new file mode 100644 index 0000000000..85e665fffc --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp @@ -0,0 +1,195 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKPOLICYDATA_HPP +#define KOKKOS_IMPL_TASKPOLICYDATA_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- + +template +struct TaskPolicyWithPredecessor +{ +private: + + DepFutureType m_predecessor; + Kokkos::TaskPriority m_priority; + +public: + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor( + DepFutureType arg_predecessor, + Kokkos::TaskPriority arg_priority + ) : m_predecessor(std::move(arg_predecessor)), + m_priority(arg_priority) + { } + + TaskPolicyWithPredecessor() = delete; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor(TaskPolicyWithPredecessor const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor(TaskPolicyWithPredecessor&&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor& operator=(TaskPolicyWithPredecessor const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor& operator=(TaskPolicyWithPredecessor&&) = default; + + KOKKOS_INLINE_FUNCTION + ~TaskPolicyWithPredecessor() = default; + + KOKKOS_INLINE_FUNCTION + DepFutureType&& predecessor() && { + return std::move(m_predecessor); + } + + KOKKOS_INLINE_FUNCTION + constexpr TaskPriority priority() const { return m_priority; } + + KOKKOS_INLINE_FUNCTION + static constexpr int task_type() noexcept { return TaskEnum; } + +}; + +// TODO @tasking @cleanup DSH clean this up. Using nullptr_t here is too clever +template +struct TaskPolicyWithScheduler +{ +public: + + using predecessor_future_type = PredecessorFuture; + +private: + + Scheduler m_scheduler; + Kokkos::TaskPriority m_priority; + predecessor_future_type m_predecessor; + +public: + + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler( + Scheduler arg_scheduler, + Kokkos::TaskPriority arg_priority + ) : m_scheduler(std::move(arg_scheduler)), + m_priority(arg_priority) + { } + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler( + Scheduler arg_scheduler, + predecessor_future_type arg_predecessor, + Kokkos::TaskPriority arg_priority + ) : m_scheduler(std::move(arg_scheduler)), + m_priority(arg_priority), + m_predecessor(std::move(arg_predecessor)) + { } + + TaskPolicyWithScheduler() = delete; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler(TaskPolicyWithScheduler const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler(TaskPolicyWithScheduler&&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler& operator=(TaskPolicyWithScheduler const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler& operator=(TaskPolicyWithScheduler&&) = default; + + KOKKOS_INLINE_FUNCTION + ~TaskPolicyWithScheduler() = default; + + KOKKOS_INLINE_FUNCTION + Scheduler& scheduler() & { + return m_scheduler; + } + + KOKKOS_INLINE_FUNCTION + constexpr TaskPriority priority() const { return m_priority; } + + KOKKOS_INLINE_FUNCTION + predecessor_future_type& predecessor() & { + return m_predecessor; + } + + KOKKOS_INLINE_FUNCTION + static constexpr bool has_predecessor() noexcept + { + return not std::is_same::value; + } + + KOKKOS_INLINE_FUNCTION + static constexpr int task_type() noexcept { return TaskEnum; } + +}; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKPOLICYDATA_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp index eacf0837fa..1adcfe4cc4 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp @@ -49,27 +49,24 @@ #include #if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include + #include #include #include -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template< class Space , typename ResultType , class FunctorType > -class TaskBase ; - -template< typename Space > -class TaskQueue ; - -template< typename Space > -class TaskQueueSpecialization ; - -} /* namespace Impl */ -} /* namespace Kokkos */ //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -77,240 +74,29 @@ class TaskQueueSpecialization ; namespace Kokkos { namespace Impl { -/** \brief Base class for task management, access, and execution. - * - * Inheritance structure to allow static_cast from the task root type - * and a task's FunctorType. - * - * // Enable a functor to access the base class - * // and provide memory for result value. - * TaskBase< Space , ResultType , FunctorType > - * : TaskBase< void , void , void > - * , FunctorType - * { ... }; - * Followed by memory allocated for result value. - * - * - * States of a task: - * - * Constructing State, NOT IN a linked list - * m_wait == 0 - * m_next == 0 - * - * Scheduling transition : Constructing -> Waiting - * before: - * m_wait == 0 - * m_next == this task's initial dependence, 0 if none - * after: - * m_wait == EndTag - * m_next == EndTag - * - * Waiting State, IN a linked list - * m_apply != 0 - * m_queue != 0 - * m_ref_count > 0 - * m_wait == head of linked list of tasks waiting on this task - * m_next == next of linked list of tasks - * - * transition : Waiting -> Executing - * before: - * m_next == EndTag - * after:: - * m_next == LockTag - * - * Executing State, NOT IN a linked list - * m_apply != 0 - * m_queue != 0 - * m_ref_count > 0 - * m_wait == head of linked list of tasks waiting on this task - * m_next == LockTag - * - * Respawn transition : Executing -> Executing-Respawn - * before: - * m_next == LockTag - * after: - * m_next == this task's updated dependence, 0 if none - * - * Executing-Respawn State, NOT IN a linked list - * m_apply != 0 - * m_queue != 0 - * m_ref_count > 0 - * m_wait == head of linked list of tasks waiting on this task - * m_next == this task's updated dependence, 0 if none - * - * transition : Executing -> Complete - * before: - * m_wait == head of linked list - * after: - * m_wait == LockTag - * - * Complete State, NOT IN a linked list - * m_wait == LockTag: cannot add dependence (<=> complete) - * m_next == LockTag: not a member of a wait queue - * - */ -template<> -class TaskBase< void , void , void > -{ -public: - - enum : int16_t { TaskTeam = 0 , TaskSingle = 1 , Aggregate = 2 }; - enum : uintptr_t { LockTag = ~uintptr_t(0) , EndTag = ~uintptr_t(1) }; - - template< typename > friend class Kokkos::TaskScheduler ; - - typedef TaskQueue< void > queue_type ; - - typedef void (* function_type) ( TaskBase * , void * ); - - // sizeof(TaskBase) == 48 - - function_type m_apply ; ///< Apply function pointer - queue_type * m_queue ; ///< Pointer to queue - TaskBase * m_wait ; ///< Linked list of tasks waiting on this - TaskBase * m_next ; ///< Waiting linked-list next - int32_t m_ref_count ; ///< Reference count - int32_t m_alloc_size ; ///< Allocation size - int32_t m_dep_count ; ///< Aggregate's number of dependences - int16_t m_task_type ; ///< Type of task - int16_t m_priority ; ///< Priority of runnable task - - TaskBase( TaskBase && ) = delete ; - TaskBase( const TaskBase & ) = delete ; - TaskBase & operator = ( TaskBase && ) = delete ; - TaskBase & operator = ( const TaskBase & ) = delete ; - -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~TaskBase() {}; -#else - KOKKOS_INLINE_FUNCTION ~TaskBase() = default; -#endif - - KOKKOS_INLINE_FUNCTION constexpr - TaskBase() - : m_apply( 0 ) - , m_queue( 0 ) - , m_wait( 0 ) - , m_next( 0 ) - , m_ref_count( 0 ) - , m_alloc_size( 0 ) - , m_dep_count( 0 ) - , m_task_type( 0 ) - , m_priority( 0 ) - {} - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - TaskBase * volatile * aggregate_dependences() volatile - { return reinterpret_cast( this + 1 ); } - - KOKKOS_INLINE_FUNCTION - bool requested_respawn() - { - // This should only be called when a task has finished executing and is - // in the transition to either the complete or executing-respawn state. - TaskBase * const lock = reinterpret_cast< TaskBase * >( LockTag ); - return lock != m_next; - } - - KOKKOS_INLINE_FUNCTION - void add_dependence( TaskBase* dep ) - { - // Precondition: lock == m_next - - TaskBase * const lock = (TaskBase *) LockTag ; - - // Assign dependence to m_next. It will be processed in the subsequent - // call to schedule. Error if the dependence is reset. - if ( lock != Kokkos::atomic_exchange( & m_next, dep ) ) { - Kokkos::abort("TaskScheduler ERROR: resetting task dependence"); - } - - if ( 0 != dep ) { - // The future may be destroyed upon returning from this call - // so increment reference count to track this assignment. - Kokkos::atomic_increment( &(dep->m_ref_count) ); - } - } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - int32_t reference_count() const - { return *((int32_t volatile *)( & m_ref_count )); } - -}; - -static_assert( sizeof(TaskBase) == 48 - , "Verifying expected sizeof(TaskBase)" ); - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -template< typename ResultType > -struct TaskResult { - - enum : int32_t { size = sizeof(ResultType) }; - - using reference_type = ResultType & ; - - KOKKOS_INLINE_FUNCTION static - ResultType * ptr( TaskBase * task ) - { - return reinterpret_cast< ResultType * > - ( reinterpret_cast< char * >(task) + task->m_alloc_size - sizeof(ResultType) ); - } - - KOKKOS_INLINE_FUNCTION static - reference_type get( TaskBase * task ) - { return *ptr( task ); } -}; - -template<> -struct TaskResult< void > { - - enum : int32_t { size = 0 }; - - using reference_type = void ; - - KOKKOS_INLINE_FUNCTION static - void * ptr( TaskBase * ) { return (void*) 0 ; } - - KOKKOS_INLINE_FUNCTION static - reference_type get( TaskBase * ) {} -}; - -} /* namespace Impl */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template<> -class TaskQueue< void > {}; /** \brief Manage task allocation, deallocation, and scheduling. * * Task execution is deferred to the TaskQueueSpecialization. * All other aspects of task management have shared implementation. */ -template< typename ExecSpace > -class TaskQueue : public TaskQueue { -private: +template< typename ExecSpace, typename MemorySpace > +class TaskQueue : public TaskQueueBase { +protected: - friend class TaskQueueSpecialization< ExecSpace > ; - friend class Kokkos::TaskScheduler< ExecSpace > ; + template + friend struct TaskQueueSpecialization; + template + friend class TaskQueueSpecializationConstrained; + template + friend class Kokkos::BasicTaskScheduler; - using execution_space = ExecSpace ; - using specialization = TaskQueueSpecialization< execution_space > ; - using memory_space = typename specialization::memory_space ; - using device_type = Kokkos::Device< execution_space , memory_space > ; - using memory_pool = Kokkos::MemoryPool< device_type > ; - using task_root_type = Kokkos::Impl::TaskBase ; + using execution_space = ExecSpace; + using memory_space = MemorySpace; + using device_type = Kokkos::Device< execution_space , memory_space > ; + using memory_pool = Kokkos::MemoryPool< device_type > ; + using task_root_type = Kokkos::Impl::TaskBase; + using team_queue_type = TaskQueue; struct Destroy { TaskQueue * m_queue ; @@ -325,8 +111,8 @@ private: memory_pool m_memory ; task_root_type * volatile m_ready[ NumQueue ][ 2 ]; - long m_accum_alloc ; // Accumulated number of allocations - int m_count_alloc ; // Current number of allocations + //long m_accum_alloc ; // Accumulated number of allocations + int m_count_alloc = 0 ; // Current number of allocations int m_max_alloc ; // Maximum number of allocations int m_ready_count ; // Number of ready or executing @@ -347,8 +133,8 @@ private: // task->m_next is the dependence or zero // Postcondition: // task->m_next is linked list membership - KOKKOS_FUNCTION void schedule_runnable( task_root_type * const ); - KOKKOS_FUNCTION void schedule_aggregate( task_root_type * const ); + KOKKOS_FUNCTION void schedule_runnable(task_root_type*); + KOKKOS_FUNCTION void schedule_aggregate(task_root_type*); // Reschedule a task // Precondition: @@ -381,23 +167,29 @@ private: KOKKOS_FUNCTION static void decrement( task_root_type * task ); + public: - // If and only if the execution space is a single thread - // then execute ready tasks. KOKKOS_INLINE_FUNCTION - void iff_single_thread_recursive_execute() - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - specialization::iff_single_thread_recursive_execute( this ); -#endif - } + int allocation_count() const noexcept { return m_count_alloc; } - void execute() { specialization::execute( this ); } + + KOKKOS_INLINE_FUNCTION + void initialize_team_queues(int pool_size) const noexcept { } + + KOKKOS_INLINE_FUNCTION + task_root_type* attempt_to_steal_task() const noexcept { return nullptr; } + + KOKKOS_INLINE_FUNCTION + team_queue_type& get_team_queue(int team_rank) { return *this; } + + //void execute() { specialization::execute( this ); } template< typename FunctorType > void proc_set_apply( typename task_root_type::function_type * ptr ) { + using specialization = + TaskQueueSpecialization>; specialization::template proc_set_apply< FunctorType >( ptr ); } @@ -451,9 +243,7 @@ public: { using value_type = typename FunctorType::value_type ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + using task_type = Impl::Task ; enum : size_t { align = ( 1 << 4 ) , align_mask = align - 1 }; enum : size_t { task_size = sizeof(task_type) }; @@ -480,86 +270,6 @@ public: //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- -namespace Kokkos { -namespace Impl { - -template< class ExecSpace , typename ResultType , class FunctorType > -class TaskBase - : public TaskBase< void , void , void > - , public FunctorType -{ -private: - - TaskBase() = delete ; - TaskBase( TaskBase && ) = delete ; - TaskBase( const TaskBase & ) = delete ; - TaskBase & operator = ( TaskBase && ) = delete ; - TaskBase & operator = ( const TaskBase & ) = delete ; - -public: - - using root_type = TaskBase< void , void , void > ; - using functor_type = FunctorType ; - using result_type = ResultType ; - - using specialization = TaskQueueSpecialization< ExecSpace > ; - using member_type = typename specialization::member_type ; - - KOKKOS_INLINE_FUNCTION - void apply_functor( member_type * const member , void * ) - { functor_type::operator()( *member ); } - - template< typename T > - KOKKOS_INLINE_FUNCTION - void apply_functor( member_type * const member - , T * const result ) - { functor_type::operator()( *member , *result ); } - - KOKKOS_FUNCTION static - void apply( root_type * root , void * exec ) - { - TaskBase * const task = static_cast< TaskBase * >( root ); - member_type * const member = reinterpret_cast< member_type * >( exec ); - result_type * const result = TaskResult< result_type >::ptr( task ); - - // Task may be serial or team. - // If team then must synchronize before querying if respawn was requested. - // If team then only one thread calls destructor. - - const bool only_one_thread = -#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) - 0 == threadIdx.x && 0 == threadIdx.y ; -#else - 0 == member->team_rank(); -#endif - - task->apply_functor( member , result ); - - member->team_barrier(); - - if ( only_one_thread && !(task->requested_respawn()) ) { - // Did not respawn, destroy the functor to free memory. - static_cast(task)->~functor_type(); - // Cannot destroy and deallocate the task until its dependences - // have been processed. - } - } - - // Constructor for runnable task - KOKKOS_INLINE_FUNCTION constexpr - TaskBase( FunctorType && arg_functor ) - : root_type() , functor_type( arg_functor ) {} - - KOKKOS_INLINE_FUNCTION - ~TaskBase() {} -}; - -} /* namespace Impl */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ #endif /* #ifndef KOKKOS_IMPL_TASKQUEUE_HPP */ diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp new file mode 100644 index 0000000000..b0685506d4 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp @@ -0,0 +1,569 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKQUEUECOMMON_HPP +#define KOKKOS_IMPL_TASKQUEUECOMMON_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +/// @brief CRTP Base class implementing the ready count parts common to most task queues +template +class TaskQueueCommonMixin +{ +private: + + int32_t m_ready_count = 0; + + // CRTP boilerplate + KOKKOS_INLINE_FUNCTION + Derived& _self() { return *static_cast(this); } + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + TaskQueueCommonMixin() + : m_ready_count(0) + { + // TODO @tasking @memory_order DSH figure out if I need this store to be atomic + } + + ~TaskQueueCommonMixin() { + KOKKOS_EXPECTS((Kokkos::memory_fence(), m_ready_count < 1)); + KOKKOS_EXPECTS(m_ready_count == 0); + } + + // end Constructors, destructor, and assignment }}}2 + //---------------------------------------------------------------------------- + + + //---------------------------------------------------------------------------- + // {{{2 + +private: + + // This would be more readable with a lambda, but that comes with + // all the baggage associated with a lambda (compilation times, bugs with + // nvcc, etc.), so we'll use a simple little helper functor here. + template + struct _schedule_waiting_tasks_operation { + TaskNode const& m_predecessor; + Derived& m_queue; + TeamSchedulerInfo const& m_info; + KOKKOS_INLINE_FUNCTION + void operator()(TaskNode&& task) const noexcept + // requires Same + { + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + if(task.is_runnable()) // KOKKOS_LIKELY + { + // TODO @tasking @optimiazation DSH check this outside of the loop ? + if(m_predecessor.is_runnable()) { + m_queue.update_scheduling_info_from_completed_predecessor( + /* ready_task = */ task.as_runnable_task(), + /* predecessor = */ m_predecessor.as_runnable_task() + ); + } + else { + KOKKOS_ASSERT(m_predecessor.is_aggregate()); + m_queue.update_scheduling_info_from_completed_predecessor( + /* ready_task = */ task.as_runnable_task(), + /* predecessor = */ m_predecessor.template as_aggregate() + ); + } + m_queue.schedule_runnable( + std::move(task).as_runnable_task(), + m_info + ); + } + else { + // The scheduling info update happens inside of schedule_aggregate + m_queue.schedule_aggregate( + std::move(task).template as_aggregate(), + m_info + ); + } + } + }; + +protected: + + template + KOKKOS_FUNCTION + void _complete_finished_task( + TaskNode&& task, + TeamSchedulerInfo const& info + ) { + task.consume_wait_queue( + _schedule_waiting_tasks_operation{ + task, + _self(), + info + } + ); + bool should_delete = task.decrement_and_check_reference_count(); + if(should_delete) { + _self().deallocate(std::move(task)); + } + } + + KOKKOS_INLINE_FUNCTION + void _increment_ready_count() { + // TODO @tasking @memory_order DSH memory order + Kokkos::atomic_increment(&this->m_ready_count); + } + + KOKKOS_INLINE_FUNCTION + void _decrement_ready_count() { + // TODO @tasking @memory_order DSH memory order + Kokkos::atomic_decrement(&this->m_ready_count); + Kokkos::memory_fence(); + } + +public: + + KOKKOS_INLINE_FUNCTION + bool is_done() const noexcept { + // TODO @tasking @memory_order DSH Memory order, instead of volatile + return (*(volatile int*)(&m_ready_count)) == 0; + } + + KOKKOS_INLINE_FUNCTION + int32_t ready_count() const noexcept { + // TODO @tasking @memory_order DSH Memory order, instead of volatile + return (*(volatile int*)(&m_ready_count)); + } + + template + KOKKOS_FUNCTION + void + complete( + RunnableTaskBase&& task, + TeamSchedulerInfo const& info + ) + { + if(task.get_respawn_flag()) { + _self().schedule_runnable(std::move(task), info); + } + else { + _complete_finished_task(std::move(task), info); + } + // A runnable task was popped from a ready queue finished executing. + // If respawned into a ready queue then the ready count was incremented + // so decrement whether respawned or not. If finished, all of the + // tasks waiting on this have been enqueued (either in the ready queue + // or the next waiting queue, in the case of an aggregate), and the + // ready count has been incremented for each of those, preventing + // quiescence. Thus, it's safe to decrement the ready count here. + // TODO @tasking @memory_order DSH memory order? (probably release) + _decrement_ready_count(); + } + + template + KOKKOS_FUNCTION + void + complete( + AggregateTask&& task, + TeamSchedulerInfo const& info + ) { + // TODO @tasking DSH old code has a ifndef __HCC_ACCELERATOR__ here; figure out why + _complete_finished_task(std::move(task), info); + } + + // end Task and queue completion }}}2 + //---------------------------------------------------------------------------- + + + //---------------------------------------------------------------------------- + // {{{2 + +public: + + // This isn't actually generic; the template parameters are just to keep + // Derived from having to be complete + template + KOKKOS_INLINE_FUNCTION + void + schedule_runnable_to_queue( + RunnableTaskBase&& task, + ReadyQueueType& ready_queue, + TeamSchedulerInfo const& info + ) + { + bool task_is_ready = true; + bool scheduling_info_updated = false; + + // do this before enqueueing and potentially losing exclusive access to task + bool task_is_respawning = task.get_respawn_flag(); + + // clear the respawn flag, since we're handling the respawn (if any) here. + // We must make sure this is written through the cache, since the next + // thread to access it might be a Cuda thread from a different thread block. + ((RunnableTaskBase volatile&)task).set_respawn_flag(false); + + if(task.has_predecessor()) { + // save the predecessor into a local variable, then clear it from the + // task before adding it to the wait queue of the predecessor + // (We have exclusive access to the task's predecessor, so we don't need + // to do this atomically) + // TODO @tasking @internal_documentation DSH document that we expect exclusive access to `task` in this function + auto& predecessor = task.get_predecessor(); + // This needs a load/store fence here, technically + // making this a release store would also do this + ((RunnableTaskBase volatile&)task).clear_predecessor(); + + // TODO @tasking @memory_order DSH remove this fence in favor of memory orders + Kokkos::memory_fence(); // for now + + // Try to add the task to the predecessor's waiting queue. If it fails, + // the predecessor is already done + bool predecessor_not_ready = predecessor.try_add_waiting(task); + + // NOTE: if the predecessor was not ready and the task was enqueued, + // we've lost exclusive access and should nt touch task again + + // If the predecessor is not done, then task is not ready + task_is_ready = not predecessor_not_ready; + + if(task_is_ready and predecessor.is_runnable()) { + // this is our last chance to update the scheduling info before + // predecessor is potentially deleted + _self().update_scheduling_info_from_completed_predecessor( + /* ready_task = */ task, + /* predecessor = */ predecessor.as_runnable_task() + ); + scheduling_info_updated = true; + } + + if(task_is_respawning) { + // Reference count for predecessor was incremented when + // respawn called set_dependency() + // so that if predecessor completed prior to the + // above try_add_waiting(), predecessor would not be destroyed. + // predecessor reference count can now be decremented, + // which may deallocate it. + bool should_delete = predecessor.decrement_and_check_reference_count(); + if(should_delete) { + // TODO @tasking @cleanup DSH better encapsulation of this! + _self().deallocate(std::move(predecessor)); + } + } + // Note! predecessor may be destroyed at this point, so don't add anything + // here + } + + if(scheduling_info_updated) { + // We need to go back to the queue itself and see if it wants to schedule + // somewhere else + _self().schedule_runnable(std::move(task), info); + } + // Put it in the appropriate ready queue if it's ready + else if(task_is_ready) { + // Increment the ready count + _self()._increment_ready_count(); + // and enqueue the task + // (can't move because the task isn't expired unless the push succeeds + bool push_success = ready_queue.push(task); + if(not push_success) { + _self().handle_failed_ready_queue_insertion( + std::move(task), ready_queue, info + ); + } + } + + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + } + + template + KOKKOS_INLINE_FUNCTION + void + handle_failed_ready_queue_insertion( + RunnableTaskBase&& task, + ReadyQueueType& ready_queue, + TeamSchedulerInfo const& info + ) { + Kokkos::abort("Unhandled failure of ready task queue insertion!\n"); + } + + // This isn't actually generic; the template parameters are just to keep + // Derived from having to be complete + template + KOKKOS_FUNCTION + void + schedule_aggregate( + AggregateTask&& aggregate, + TeamSchedulerInfo const& info + ) + { + // Because the aggregate is being scheduled, should not be in any queue + KOKKOS_EXPECTS(not aggregate.is_enqueued()); + + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + using team_scheduler_info_type = typename Derived::team_scheduler_info_type; + static_assert( + std::is_same::value, + "SchedulingInfo type mismatch!" + ); + + bool incomplete_dependence_found = false; + + for(auto*& predecessor_ptr_ref : aggregate) { + + // if a previous scheduling operation hasn't already set the predecessor + // to nullptr, try to enqueue the aggregate into the predecessorendence's waiting + // queue + if(predecessor_ptr_ref != nullptr) { + + // Swap the pointer onto the stack and set the one in the aggregate VLA + // to nullptr before we try to add it to the waiting queue so that some + // other thread doesn't also get to here and find the pointer to be + // not null (since as soon as we try and schedule the aggregate, we + // potentially lose exclusive access to it if that enqueueing operation + // succeeds. The swap doesn't need to happen atomically since we have + // exclusive access to aggregate until an insertion succeeds + auto* predecessor_ptr = std::move(predecessor_ptr_ref); + + // TODO @tasking @memory_order DSH I think this needs to be a store release so that it doesn't get reordered after the queue insertion + predecessor_ptr_ref = nullptr; + + // TODO @tasking @memory_order DSH remove this fence in favor of memory orders + Kokkos::memory_fence(); + + // If adding the aggregate to the waiting queue succeeds, the predecessor is not + // complete + bool pred_not_ready = predecessor_ptr->try_add_waiting(aggregate); + + // NOTE! At this point it is unsafe to access aggregate (unless the + // enqueueing failed, so we can't use move semantics to expire it) + + // we found an incomplete dependence, so we can't make task's successors + // ready yet + incomplete_dependence_found = pred_not_ready; + + if(not pred_not_ready) { + // A predecessor was done, and we didn't enqueue the aggregate + // Update the aggregate's scheduling info (we still have exclusive + // access to it here) + if(predecessor_ptr->is_runnable()) { + _self().update_scheduling_info_from_completed_predecessor( + aggregate, predecessor_ptr->as_runnable_task() + ); + } + else { + KOKKOS_ASSERT(predecessor_ptr->is_aggregate()); + _self().update_scheduling_info_from_completed_predecessor( + aggregate, (*predecessor_ptr).template as_aggregate() + ); + } + } + + // the reference count for the predecessor was incremented when we put + // it into the predecessor list, so decrement it here + bool should_delete = predecessor_ptr->decrement_and_check_reference_count(); + if(should_delete) { + // TODO @tasking @cleanup DSH better encapsulation of this! + _self().deallocate(std::move(*predecessor_ptr)); + } + + // Stop the loop if we found an incomplete dependence + if(incomplete_dependence_found) break; + } + } + + // NOTE: it's not safe to access aggregate any more if an incomplete dependence + // was found, because some other thread could have already popped it off + // of another waiting queue + + if(not incomplete_dependence_found) { + // all of the predecessors were completed, so we can complete `task` + _self().complete(std::move(aggregate), info); + } + // Note!! task may have been deleted at this point, so don't add anything here! + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + RunnableTaskBase& ready_task, + RunnableTaskBase const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + ready_task.template scheduling_info_as() = + predecessor.template scheduling_info_as(); + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + AggregateTask& aggregate, + RunnableTaskBase const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + aggregate.scheduling_info() = + predecessor.template scheduling_info_as(); + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + AggregateTask& aggregate, + AggregateTask const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + aggregate.scheduling_info() = predecessor.scheduling_info(); + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + RunnableTaskBase& ready_task, + AggregateTask const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + ready_task.template scheduling_info_as() = + predecessor.scheduling_info(); + } + + template + KOKKOS_INLINE_FUNCTION + void initialize_scheduling_info_from_predecessor( + TaskNode& task, + TaskNode& predecessor + ) const + { + /* do nothing by default */ + } + + template + KOKKOS_INLINE_FUNCTION + void initialize_scheduling_info_from_team_scheduler_info( + TaskNode& task, + TeamSchedulerInfo const& info + ) const + { + /* do nothing by default */ + } + + template < + class ExecutionSpace, + class MemorySpace, + class MemoryPool + > + static /* KOKKOS_CONSTEXPR_14 */ size_t + task_queue_allocation_size( + ExecutionSpace const&, + MemorySpace const&, + MemoryPool const& + ) + // requires Same + // && Same + // && Same + { + static_assert( + std::is_same::value + && std::is_same::value + && std::is_same::value, + "Type mismatch in task_queue_allocation_size customization point" + ); + + return sizeof(Derived); + } + + // end Scheduling }}}2 + //---------------------------------------------------------------------------- + +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUECOMMON_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp new file mode 100644 index 0000000000..c3ed1d6c71 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp @@ -0,0 +1,251 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKQUEUEMEMORYMANAGER_HPP +#define KOKKOS_IMPL_TASKQUEUEMEMORYMANAGER_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template < + class ExecSpace, + class MemorySpace, + class MemoryPool = Kokkos::MemoryPool> +> +class TaskQueueMemoryManager + : public TaskQueueBase +{ +public: + + using execution_space = ExecSpace; + using memory_space = MemorySpace; + using device_type = Kokkos::Device; + using memory_pool = MemoryPool; + using allocation_size_type = size_t; + +private: + + memory_pool m_pool; + // TODO @tasking @generalization DSH re-enable this with a flag in the type + //long m_accum_alloc = 0; + int m_count_alloc = 0; + int m_max_alloc = 0; + + struct _allocation_result { + bool success; + void* pointer; + }; + + KOKKOS_INLINE_FUNCTION + _allocation_result + _do_pool_allocate(allocation_size_type requested_size) { + // KOKKOS_EXPECTS(requested_size >= 0); generates a warning when allocation_size_type is unsigned + if(requested_size == 0 ) { + return { true, nullptr }; + } + else { + void* data = m_pool.allocate(static_cast(requested_size)); + + //Kokkos::atomic_increment(&m_accum_alloc); // memory_order_relaxed + Kokkos::atomic_increment(&m_count_alloc); // memory_order_relaxed + // TODO @tasking @minor DSH make this thread safe? (otherwise, it's just an approximation, which is probably fine...) + if(m_max_alloc < m_count_alloc) m_max_alloc = m_count_alloc; + + return { data != nullptr, data }; + } + } + + template + KOKKOS_INLINE_FUNCTION + T* + _do_contruct(void* allocated, allocation_size_type allocated_size, Args&&... args) { + + static_assert( + std::is_base_of, T>::value, + "TaskQueueMemoryManager can only allocate objects with PoolAllocatedObjectBase base class" + ); + + // TODO @tasking DSH figure out why this isn't working + //static_assert( + // std::is_constructible::value, + // "TaskQueueMemoryManager can't construct object of the requested type from the " + // " allocation size and the given arguments" + //); + + + auto rv = new (allocated) T( + std::forward(args)..., + allocated_size + ); + + // It feels like there should be a way to check this at compile-time + KOKKOS_ASSERT( + (intptr_t)(rv) == (intptr_t)(static_cast*>(rv)) + && "PoolAllocatedObjectBase must be the first base class of the allocated type" + ); + + return rv; + + } + + +public: + + explicit + TaskQueueMemoryManager(memory_pool const& pool) + : m_pool(pool) + { } + + + template + KOKKOS_FUNCTION + T* + allocate_and_construct(Args&&... args) + // requires + // std::is_base_of_v, T> + // && std::is_constructible_v + { + constexpr auto allocation_size = sizeof(T); + + + auto result = _do_pool_allocate(allocation_size); + + KOKKOS_ASSERT(result.success && "Memory allocation failure"); + + auto rv = _do_contruct(result.pointer, allocation_size, std::forward(args)...); + + KOKKOS_ENSURES(intptr_t(rv) % alignof(T) == 0 && "alignment not preserved!"); + + return rv; + } + + template + KOKKOS_INLINE_FUNCTION + T* + allocate_and_construct_with_vla_emulation( + allocation_size_type n_vla_entries, + Args&&... args + ) + // requires + // std::is_base_of_v, T> + // && std::is_base_of, T>::value + // && std::is_constructible_v + { + + + static_assert( + std::is_base_of, T>::value, + "Can't append emulated variable length array of type with greater alignment than" + " the type to which the VLA is being appended" + ); + + using vla_emulation_base = ObjectWithVLAEmulation; + + auto const allocation_size = vla_emulation_base::required_allocation_size(n_vla_entries); + auto result = _do_pool_allocate(allocation_size); + + KOKKOS_ASSERT(result.success && "Memory allocation failure"); + + auto rv = _do_contruct(result.pointer, allocation_size, std::forward(args)...); + + KOKKOS_ENSURES(intptr_t(rv) % alignof(T) == 0); + + return rv; + } + + template + KOKKOS_INLINE_FUNCTION + void deallocate(PoolAllocatedObjectBase&& obj) + { + m_pool.deallocate((void*)&obj, 1); + Kokkos::atomic_decrement(&m_count_alloc); // memory_order_relaxed + } + + KOKKOS_INLINE_FUNCTION + memory_pool& get_memory_pool() { return m_pool; } + KOKKOS_INLINE_FUNCTION + memory_pool const& get_memory_pool() const { return m_pool; } + + KOKKOS_INLINE_FUNCTION + int allocation_count() const noexcept { return m_count_alloc; } +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//////////////////////////////////////////////////////////////////////////////// +// END OLD CODE +//////////////////////////////////////////////////////////////////////////////// + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUEMEMORYMANAGER_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp new file mode 100644 index 0000000000..17c357ff31 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp @@ -0,0 +1,286 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_HPP +#define KOKKOS_IMPL_TASKQUEUEMULTIPLE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template< typename ExecSpace, typename MemorySpace = typename ExecSpace::memory_space > +class LeagueQueueCollection; + +template +class TaskQueueMultiple : public TaskQueue { +private: + + using base_t = TaskQueue; + using queue_collection_t = LeagueQueueCollection; + + int m_league_rank = static_cast(KOKKOS_INVALID_INDEX); + + // This pointer is owning only if m_league_rank == 0 + queue_collection_t* m_other_queues = nullptr; + + +public: + + struct Destroy { + TaskQueueMultiple* m_queue ; + void destroy_shared_allocation(); + }; + + + using team_queue_type = TaskQueueMultiple; + + TaskQueueMultiple( + int arg_league_rank, + queue_collection_t* arg_other_queues, + typename base_t::memory_pool const& arg_memory_pool + ) + : base_t(arg_memory_pool), + m_league_rank(arg_league_rank), + m_other_queues(arg_other_queues) + { } + + explicit TaskQueueMultiple( + typename base_t::memory_pool const& arg_memory_pool + ) + : base_t(arg_memory_pool), + m_league_rank(0) + { + void* other_queues_buffer = typename base_t::memory_space{}.allocate(sizeof(queue_collection_t)); + m_other_queues = new(other_queues_buffer) queue_collection_t(this); + } + + ~TaskQueueMultiple() { + if(m_league_rank == 0 && m_other_queues != nullptr) { + m_other_queues->~queue_collection_t(); + typename base_t::memory_space{}.deallocate(m_other_queues, sizeof(queue_collection_t)); + } + // rest of destruction is handled in the base class + } + + //---------------------------------------- + + void initialize_team_queues(int arg_league_size) const noexcept { + m_other_queues->initialize_team_queues(arg_league_size, this->m_memory); + } + + KOKKOS_INLINE_FUNCTION + team_queue_type& get_team_queue(int arg_league_rank) noexcept { + if(arg_league_rank == m_league_rank) return *this; + else return m_other_queues->get_team_queue(arg_league_rank); + } + + KOKKOS_INLINE_FUNCTION + typename base_t::task_root_type* + attempt_to_steal_task() noexcept { + TaskBase* rv = nullptr; + auto* const end_tag = reinterpret_cast(TaskBase::EndTag); + + if (m_other_queues == nullptr) { + Kokkos::abort("attempted to steal task before queues were initialized!"); + } + + // Loop by priority and then type, and then team + for ( int i = 0 ; i < base_t::NumQueue; ++i ) { + for ( int j = 0 ; j < 2; ++j ) { + // for now, always start by trying to steal from team zero + for(int iteam = 0; iteam < m_other_queues->size(); ++iteam) { + if(iteam == m_league_rank) continue; + auto& steal_from = get_team_queue(iteam); + if( *((volatile int *) & steal_from.m_ready_count) > 0 ) { + // we've found at least one queue that's not done, so even if we can't + // pop something off of it we shouldn't return a nullptr indicating + // completion. rv will be end_tag when the pop fails + rv = base_t::pop_ready_task(&steal_from.m_ready[i][j]); + if(rv != end_tag) { + // task stolen. + // first increment our ready count, then decrement the ready count + // on the other queue: + Kokkos::atomic_increment(&this->m_ready_count); + Kokkos::atomic_decrement(&steal_from.m_ready_count); + return rv; + } + } + } + } + } + + // at this point, rv will only be nullptr if *all* of the queues had an + // m_ready_count of 0. This indicates quiescence. If at least some of them + // had non-zero, there would have been at least one pop_ready_task that + // was called and returned end_tag if it couldn't pop a task + return rv; + } + + +}; + +template +class LeagueQueueCollection { +private: + + using execution_space = ExecSpace; + using memory_space = MemorySpace; + using device_type = Kokkos::Device; + using memory_pool = Kokkos::MemoryPool; + using team_queue_type = TaskQueueMultiple; + using team_scheduler_type = BasicTaskScheduler; + using specialization = TaskQueueSpecialization; + + enum : long { max_num_queues = 6 }; //specialization::max_league_size }; + + // this is a non-owning pointer + team_queue_type* m_rank_zero_queue = nullptr; + // This really needs to be an optional> + union optional_queue { + KOKKOS_INLINE_FUNCTION + optional_queue() : uninitialized(0) { } + KOKKOS_INLINE_FUNCTION + ~optional_queue() { uninitialized = 0; } + char uninitialized; + team_queue_type initialized; + } m_queues[max_num_queues]; + int m_size = static_cast(KOKKOS_INVALID_INDEX); + +public: + + LeagueQueueCollection() = delete; + LeagueQueueCollection(LeagueQueueCollection const&) = delete; + LeagueQueueCollection(LeagueQueueCollection&&) = delete; + LeagueQueueCollection& operator=(LeagueQueueCollection const&) = delete; + LeagueQueueCollection& operator=(LeagueQueueCollection&&) = delete; + + ~LeagueQueueCollection() { + // destroy only the initialized queues that we own + for(int iteam = 0; iteam < m_size - 1; ++iteam) { + m_queues[iteam].initialized.~team_queue_type(); + m_queues[iteam].uninitialized = 0; + } + } + + KOKKOS_INLINE_FUNCTION + explicit LeagueQueueCollection( + team_queue_type* arg_rank_zero_queue + ) : m_rank_zero_queue(arg_rank_zero_queue), + m_size(1) + { } + + void initialize_team_queues( + int arg_count, memory_pool const& arg_memory_pool + ) noexcept + { + arg_count = std::min((int)max_num_queues, arg_count); + //assert(arg_count <= max_num_queues); + if(arg_count > m_size) { + for(int i = m_size; i < arg_count; ++i) { + new(&m_queues[i-1].initialized) team_queue_type(i, this, arg_memory_pool); + } + m_size = arg_count; + } + } + + KOKKOS_INLINE_FUNCTION + constexpr int size() const noexcept { return m_size; } + + KOKKOS_INLINE_FUNCTION + constexpr bool initialized() const noexcept { return m_size != int(KOKKOS_INVALID_INDEX); } + + KOKKOS_INLINE_FUNCTION + team_queue_type& get_team_queue(int iteam) { + iteam %= max_num_queues; + #if !defined(__HCC_ACCELERATOR__) && !defined(__CUDA_ARCH__) + assert(initialized()); + assert(iteam < m_size); + assert(iteam >= 0); + #endif + if(iteam == 0) return *m_rank_zero_queue; + else return m_queues[iteam-1].initialized; + } + +}; + + +} /* namespace Impl */ +} /* namespace Kokkos */ + + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#include + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp new file mode 100644 index 0000000000..81bcc96831 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp @@ -0,0 +1,72 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_IMPL_HPP +#define KOKKOS_IMPL_TASKQUEUEMULTIPLE_IMPL_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include + +#define KOKKOS_IMPL_DEBUG_TASKDAG_SCHEDULING_MULTIPLE 0 + +namespace Kokkos { +namespace Impl { + +template +void TaskQueueMultiple::Destroy::destroy_shared_allocation() { +// KOKKOS WORKAROUND for CUDA 10.1 with GCC 7.3.0 +#if(KOKKOS_COMPILER_CUDA_VERSION==101) && defined(KOKKOS_COMPILER_NVCC) && (KOKKOS_COMPILER_GNU>=730) + (*m_queue).get_team_queue(0).~TaskQueueMultiple(); +#else + m_queue->get_team_queue(0).~TaskQueueMultiple(); +#endif +} + +} /* namespace Impl */ +} /* namespace Kokkos */ + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_IMPL_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp index 5bcf672ff6..b5f8db0085 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp @@ -41,6 +41,8 @@ //@HEADER */ +#ifndef KOKKOS_IMPL_TASKQUEUE_IMPL_HPP +#define KOKKOS_IMPL_TASKQUEUE_IMPL_HPP #include #if defined( KOKKOS_ENABLE_TASKDAG ) @@ -51,22 +53,22 @@ namespace Impl { //---------------------------------------------------------------------------- -template< typename ExecSpace > -void TaskQueue< ExecSpace >::Destroy::destroy_shared_allocation() +template< typename ExecSpace, typename MemorySpace > +void TaskQueue< ExecSpace, MemorySpace >::Destroy::destroy_shared_allocation() { m_queue->~TaskQueue(); } //---------------------------------------------------------------------------- -template< typename ExecSpace > -TaskQueue< ExecSpace >::TaskQueue - ( typename TaskQueue< ExecSpace >::memory_pool const & arg_memory_pool ) +template< typename ExecSpace, typename MemorySpace> +TaskQueue< ExecSpace, MemorySpace>::TaskQueue + ( typename TaskQueue< ExecSpace, MemorySpace>::memory_pool const & arg_memory_pool ) : m_memory( arg_memory_pool ) , m_ready() - , m_accum_alloc(0) - , m_count_alloc(0) - , m_max_alloc(0) + //, m_accum_alloc(0) + //, m_count_alloc(0) + //, m_max_alloc(0) , m_ready_count(0) { for ( int i = 0 ; i < NumQueue ; ++i ) { @@ -77,8 +79,8 @@ TaskQueue< ExecSpace >::TaskQueue //---------------------------------------------------------------------------- -template< typename ExecSpace > -TaskQueue< ExecSpace >::~TaskQueue() +template< typename ExecSpace, typename MemorySpace> +TaskQueue< ExecSpace, MemorySpace>::~TaskQueue() { // Verify that queues are empty and ready count is zero @@ -97,10 +99,10 @@ TaskQueue< ExecSpace >::~TaskQueue() //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::decrement - ( TaskQueue< ExecSpace >::task_root_type * task ) +void TaskQueue< ExecSpace, MemorySpace>::decrement + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * task ) { task_root_type volatile & t = *task ; @@ -121,8 +123,13 @@ void TaskQueue< ExecSpace >::decrement ( t.m_next == (task_root_type *) task_root_type::LockTag ) ) { // Reference count is zero and task is complete, deallocate. - TaskQueue< ExecSpace > * const queue = - static_cast< TaskQueue< ExecSpace > * >( t.m_queue ); + //TaskQueue< ExecSpace, MemorySpace> * const queue = + // static_cast( t.m_scheduler )->m_queue; + auto* const volatile queue = static_cast(t.m_queue); + + // TODO @tasking @minor DSH this should call the destructor for a non-trivially destructible type (possibly just ignore this in the old version, though?) + // (Can't just do this; it needs to be queued since it's device code + // if(task->m_destroy) task->m_destroy(task); queue->deallocate( task , t.m_alloc_size ); } @@ -133,32 +140,32 @@ void TaskQueue< ExecSpace >::decrement //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -size_t TaskQueue< ExecSpace >::allocate_block_size( size_t n ) +size_t TaskQueue< ExecSpace, MemorySpace>::allocate_block_size( size_t n ) { return m_memory.allocate_block_size( n ); } -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void * TaskQueue< ExecSpace >::allocate( size_t n ) +void * TaskQueue< ExecSpace, MemorySpace>::allocate( size_t n ) { void * const p = m_memory.allocate(n); if ( p ) { - Kokkos::atomic_increment( & m_accum_alloc ); + //Kokkos::atomic_increment( & m_accum_alloc ); Kokkos::atomic_increment( & m_count_alloc ); - if ( m_max_alloc < m_count_alloc ) m_max_alloc = m_count_alloc ; + //if ( m_max_alloc < m_count_alloc ) m_max_alloc = m_count_alloc ; } return p ; } -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::deallocate( void * p , size_t n ) +void TaskQueue< ExecSpace, MemorySpace>::deallocate( void * p , size_t n ) { m_memory.deallocate( p , n ); Kokkos::atomic_decrement( & m_count_alloc ); @@ -166,11 +173,11 @@ void TaskQueue< ExecSpace >::deallocate( void * p , size_t n ) //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -bool TaskQueue< ExecSpace >::push_task - ( TaskQueue< ExecSpace >::task_root_type * volatile * const queue - , TaskQueue< ExecSpace >::task_root_type * const task +bool TaskQueue< ExecSpace, MemorySpace>::push_task + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * volatile * const queue + , TaskQueue< ExecSpace, MemorySpace>::task_root_type * const task ) { // Push task into a concurrently pushed and popped queue. @@ -200,20 +207,29 @@ bool TaskQueue< ExecSpace >::push_task Kokkos::abort("TaskQueue::push_task ERROR: already a member of another queue" ); } - task_root_type * y = *queue ; + // store the head of the queue + task_root_type * old_head = *queue ; - while ( lock != y ) { + while ( old_head != lock ) { - next = y ; + // set task->next to the head of the queue + next = old_head; // Do not proceed until 'next' has been stored. Kokkos::memory_fence(); - task_root_type * const x = y ; + // store the old head + task_root_type * const old_head_tmp = old_head; - y = Kokkos::atomic_compare_exchange(queue,y,task); + // attempt to swap task with the old head of the queue + // as if this were done atomically: + // if(*queue == old_head) { + // *queue = task; + // } + // old_head = *queue; + old_head = Kokkos::atomic_compare_exchange(queue, old_head, task); - if ( x == y ) return true ; + if(old_head_tmp == old_head) return true; } // Failed, replace 'task->m_next' value since 'task' remains @@ -229,11 +245,11 @@ bool TaskQueue< ExecSpace >::push_task //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -typename TaskQueue< ExecSpace >::task_root_type * -TaskQueue< ExecSpace >::pop_ready_task - ( TaskQueue< ExecSpace >::task_root_type * volatile * const queue ) +typename TaskQueue< ExecSpace, MemorySpace>::task_root_type * +TaskQueue< ExecSpace, MemorySpace>::pop_ready_task + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * volatile * const queue ) { // Pop task from a concurrently pushed and popped ready task queue. // The queue is a linked list where 'task->m_next' form the links. @@ -280,6 +296,10 @@ TaskQueue< ExecSpace >::pop_ready_task task_root_type * volatile & next = task->m_next ; + // This algorithm is not lockfree because a adversarial scheduler could + // context switch this thread at this point and the rest of the threads + // calling this method would never make forward progress + *queue = next ; next = lock ; Kokkos::memory_fence(); @@ -304,10 +324,10 @@ TaskQueue< ExecSpace >::pop_ready_task //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::schedule_runnable - ( TaskQueue< ExecSpace >::task_root_type * const task ) +void TaskQueue< ExecSpace, MemorySpace>::schedule_runnable + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * const task ) { // Schedule a runnable task upon construction / spawn // and upon completion of other tasks that 'task' is waiting on. @@ -389,6 +409,8 @@ void TaskQueue< ExecSpace >::schedule_runnable Kokkos::memory_fence(); + // If we don't have a dependency, or if pushing onto the wait queue of that dependency + // failed (since the only time that queue should be locked is when the task is transitioning to complete??!?) const bool is_ready = ( 0 == dep ) || ( ! push_task( & dep->m_wait , task ) ); @@ -431,10 +453,10 @@ void TaskQueue< ExecSpace >::schedule_runnable // from a queue and processed it as appropriate. } -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::schedule_aggregate - ( TaskQueue< ExecSpace >::task_root_type * const task ) +void TaskQueue< ExecSpace, MemorySpace>::schedule_aggregate + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * const task ) { // Schedule an aggregate task upon construction // and upon completion of other tasks that 'task' is waiting on. @@ -556,9 +578,9 @@ void TaskQueue< ExecSpace >::schedule_aggregate //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::reschedule( task_root_type * task ) +void TaskQueue< ExecSpace, MemorySpace>::reschedule( task_root_type * task ) { // Precondition: // task is in Executing state @@ -578,10 +600,10 @@ void TaskQueue< ExecSpace >::reschedule( task_root_type * task ) //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::complete - ( TaskQueue< ExecSpace >::task_root_type * task ) +void TaskQueue< ExecSpace, MemorySpace>::complete + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * task ) { // Complete a runnable task that has finished executing // or a when_all task when all of its dependeneces are complete. @@ -679,4 +701,5 @@ void TaskQueue< ExecSpace >::complete } /* namespace Kokkos */ #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUE_IMPL_HPP */ diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp new file mode 100644 index 0000000000..d45ebff00b --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp @@ -0,0 +1,151 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKRESULT_HPP +#define KOKKOS_IMPL_TASKRESULT_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template< typename ResultType > +struct TaskResult { + + enum : int32_t { size = sizeof(ResultType) }; + + using reference_type = ResultType & ; + + template + KOKKOS_INLINE_FUNCTION static + ResultType * ptr( PoolAllocatedObjectBase* task ) + { + return reinterpret_cast< ResultType * > + ( reinterpret_cast< char * >(task) + task->get_allocation_size() - sizeof(ResultType) ); + } + + KOKKOS_INLINE_FUNCTION static + ResultType * ptr( TaskBase* task ) + { + return reinterpret_cast< ResultType * > + ( reinterpret_cast< char * >(task) + task->m_alloc_size - sizeof(ResultType) ); + } + + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskBase* task ) + { return *ptr( task ); } + + template + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskNode* task ) + { return *ptr( task ); } + + KOKKOS_INLINE_FUNCTION static + void destroy( TaskBase* task ) + { get(task).~ResultType(); } + + + //template + //KOKKOS_INLINE_FUNCTION static + //void destroy( TaskNode* task ) + //{ get(task).~ResultType(); } +}; + +template<> +struct TaskResult< void > { + + enum : int32_t { size = 0 }; + + using reference_type = void ; + + template + KOKKOS_INLINE_FUNCTION static + void* ptr( TaskNode* task ) + { return nullptr; } + + KOKKOS_INLINE_FUNCTION static + void * ptr( TaskBase* ) { return (void*) nullptr ; } + + template + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskNode* task ) + { /* Should never be called */ } + + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskBase* ) {} + + KOKKOS_INLINE_FUNCTION static + void destroy( TaskBase* task ) + { } + + //template + //KOKKOS_INLINE_FUNCTION static + //void destroy( TaskNode* task ) + //{ } +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKRESULT_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp new file mode 100644 index 0000000000..4bf3f4fa94 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp @@ -0,0 +1,135 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TASKTEAMMEMBER_HPP +#define KOKKOS_TASKTEAMMEMBER_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include +//---------------------------------------------------------------------------- + +#include +#include + +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +class TaskTeamMemberAdapter : public TeamMember { +private: + + Scheduler m_scheduler; + +public: + + //---------------------------------------- + + // Forward everything but the Scheduler to the constructor of the TeamMember + // type that we're adapting + template + KOKKOS_INLINE_FUNCTION + explicit TaskTeamMemberAdapter( + typename std::enable_if< + std::is_constructible::value, + Scheduler + >::type arg_scheduler, + Args&&... args + ) // TODO @tasking @minor DSH noexcept specification + : TeamMember(std::forward(args)...), + m_scheduler(std::move(arg_scheduler).get_team_scheduler(this->league_rank())) + { } + + // (rule of 6 constructors) + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter() = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter(TaskTeamMemberAdapter const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter(TaskTeamMemberAdapter&&) = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter& operator=(TaskTeamMemberAdapter const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter& operator=(TaskTeamMemberAdapter&&) = default; + + KOKKOS_INLINE_FUNCTION ~TaskTeamMemberAdapter() = default; + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + Scheduler const& scheduler() const noexcept { return m_scheduler; } + + KOKKOS_INLINE_FUNCTION + Scheduler& scheduler() noexcept { return m_scheduler; } + + //---------------------------------------- + +}; + +} // end namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_TASKTEAMMEMBER_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Traits.hpp b/lib/kokkos/core/src/impl/Kokkos_Traits.hpp index 475a696719..a5af82838f 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Traits.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Traits.hpp @@ -483,6 +483,54 @@ struct is_integral_constant< integral_constant > : public true_ enum { integral_value = v }; }; +//---------------------------------------------------------------------------- + +template +class TypeList; + +//---------------------------------------------------------------------------- + +template +struct ReverseTypeList; + +template +struct ReverseTypeList> { + template + struct impl { + using type = typename ReverseTypeList>::template impl::type; + }; + using type = typename impl<>::type; +}; + +template <> +struct ReverseTypeList> { + template + struct impl { + using type = TypeList; + }; + using type = TypeList<>; +}; + +//---------------------------------------------------------------------------- + +template +struct make_all_extents_into_pointers +{ + using type = T; +}; + +template +struct make_all_extents_into_pointers +{ + using type = typename make_all_extents_into_pointers::type*; +}; + +template +struct make_all_extents_into_pointers +{ + using type = typename make_all_extents_into_pointers::type*; +}; + } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp b/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp new file mode 100644 index 0000000000..48e1851e60 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp @@ -0,0 +1,295 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_VLAEMULATION_HPP +#define KOKKOS_IMPL_VLAEMULATION_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include + +#include // KOKKOS_EXPECTS + +#include // std::is_abstract<>, ... + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template < + class Derived, + class VLAValueType, + class EntryCountType = int32_t +> +struct ObjectWithVLAEmulation; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +/** @brief Attorney to enable private CRTP inheritance from ObjectWithVLAEmulation + */ +struct VLAEmulationAccess { +private: + + template + friend struct ObjectWithVLAEmulation; + + template + KOKKOS_FORCEINLINE_FUNCTION + static constexpr Derived* + _cast_to_derived(ObjectWithVLAEmulation* base) noexcept + { + return static_cast(base); + } + + template + KOKKOS_FORCEINLINE_FUNCTION + static constexpr Derived const* + _cast_to_derived(ObjectWithVLAEmulation const* base) noexcept + { + return static_cast(base); + } + +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +/** \brief A CRTP base class for a type that includes a variable-length array by allocation + * + * The storage for the derived type must be allocated manually and the objects + * (both derived type and VLA objects) must be constructed with placement new. + * Obviously, this can't be done for objects on the stack. + * + * Note: Though most uses of this currently delete the copy and move constructor + * in the `Derived` type, this type is intended to have value semantics. + * + * \todo @documentation elaborate on implications of value semantics for this class template + * + */ +template < + class Derived, + class VLAValueType, + class EntryCountType /* = int32_t */ +> +struct ObjectWithVLAEmulation { +public: + + using object_type = Derived; + using vla_value_type = VLAValueType; + using vla_entry_count_type = EntryCountType; + + using iterator = VLAValueType*; + using const_iterator = typename std::add_const::type*; + + + // TODO @tasking @minor DSH require that Derived be marked final? (note that std::is_final is C++14) + // TODO @tasking @minor DSH delete non-placement operator new for Derived type? + +private: + + vla_entry_count_type m_num_entries; + + // CRTP boilerplate + + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + Derived* _this() noexcept { return VLAEmulationAccess::_cast_to_derived(this); } + + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + Derived const* _this() const noexcept { return VLAEmulationAccess::_cast_to_derived(this); } + + // Note: can't be constexpr because of reinterpret_cast + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + vla_value_type* _vla_pointer() noexcept { + // The data starts right after the aligned storage of Derived + return reinterpret_cast(_this() + 1); + } + + // Note: can't be constexpr because of reinterpret_cast + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + vla_value_type const* _vla_pointer() const noexcept { + // The data starts right after the aligned storage of Derived + return reinterpret_cast(_this() + 1); + } + +public: + + KOKKOS_INLINE_FUNCTION + static /* KOKKOS_CONSTEXPR_14 */ size_t + required_allocation_size(vla_entry_count_type num_vla_entries) { + KOKKOS_EXPECTS(num_vla_entries >= 0); + return sizeof(Derived) + num_vla_entries * sizeof(VLAValueType); + } + + //---------------------------------------------------------------------------- + // {{{2 + + // TODO @tasking @optimization DSH specialization for trivially constructible VLAValueType? + // TODO @tasking @minor DSH SFINAE-out this constructor for non-default contructible vla_value_types + KOKKOS_INLINE_FUNCTION + explicit + ObjectWithVLAEmulation(vla_entry_count_type num_entries) + noexcept(noexcept(vla_value_type())) + : m_num_entries(num_entries) + { + // Note: We can't do this at class scope because it unnecessarily requires + // object_type to be a complete type + static_assert( + alignof(object_type) >= alignof(vla_value_type), + "Can't append emulated variable length array of type with greater alignment than" + " the type to which the VLA is being appended" + ); + + // Note: We can't do this at class scope because it unnecessarily requires + // vla_value_type to be a complete type + static_assert( + not std::is_abstract::value, + "Can't use abstract type with VLA emulation" + ); + + KOKKOS_EXPECTS(num_entries >= 0); + for(vla_entry_count_type i = 0; i < m_num_entries; ++i) { + new (_vla_pointer() + i) vla_value_type(); + } + } + + KOKKOS_INLINE_FUNCTION + ~ObjectWithVLAEmulation() + noexcept(noexcept(std::declval().~vla_value_type())) + { + for(auto&& value : *this) { value.~vla_value_type(); } + } + + // TODO @tasking @new_feature DSH constrained analogs for move and copy ctors and assignment ops + // TODO @tasking @new_feature DSH forwarding in_place constructor + // TODO @tasking @new_feature DSH initializer_list constructor? + + // end Constructors, destructor, and assignment }}}2 + //---------------------------------------------------------------------------- + + + KOKKOS_INLINE_FUNCTION + constexpr EntryCountType n_vla_entries() const noexcept { return m_num_entries; } + + + //---------------------------------------------------------------------------- + // {{{2 + + KOKKOS_INLINE_FUNCTION + object_type& object() & { return static_cast(*this); } + + KOKKOS_INLINE_FUNCTION + object_type const& object() const & { return static_cast(*this); } + + KOKKOS_INLINE_FUNCTION + object_type&& object() && { return static_cast(*this); } + + + KOKKOS_INLINE_FUNCTION + vla_value_type& vla_value_at(vla_entry_count_type n) & + { + KOKKOS_EXPECTS(n < n_vla_entries()); + return _vla_pointer()[n]; + } + + KOKKOS_INLINE_FUNCTION + vla_value_type const& vla_value_at(vla_entry_count_type n) const & + { + KOKKOS_EXPECTS(n < n_vla_entries()); + return _vla_pointer()[n]; + } + + KOKKOS_INLINE_FUNCTION + vla_value_type& vla_value_at(vla_entry_count_type n) && + { + KOKKOS_EXPECTS(n < n_vla_entries()); + return _vla_pointer()[n]; + } + + // end Accessing the object and the VLA values }}}2 + //---------------------------------------------------------------------------- + + + //---------------------------------------------------------------------------- + // {{{2 + + KOKKOS_INLINE_FUNCTION + iterator begin() noexcept { return _vla_pointer(); } + + KOKKOS_INLINE_FUNCTION + const_iterator begin() const noexcept { return _vla_pointer(); } + + KOKKOS_INLINE_FUNCTION + const_iterator cbegin() noexcept { return _vla_pointer(); } + + KOKKOS_INLINE_FUNCTION + iterator end() noexcept { return _vla_pointer() + m_num_entries; } + + KOKKOS_INLINE_FUNCTION + const_iterator end() const noexcept { return _vla_pointer() + m_num_entries; } + + KOKKOS_INLINE_FUNCTION + const_iterator cend() noexcept { return _vla_pointer() + m_num_entries; } + + // end Iterators }}}2 + //---------------------------------------------------------------------------- + +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_VLAEMULATION_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp index e1539d10b0..07774da279 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp @@ -367,6 +367,8 @@ public: // Can only convert to View::array_type + enum { is_assignable_data_type = std::is_same< typename DstTraits::data_type , typename SrcTraits::scalar_array_type >::value && + (DstTraits::rank==SrcTraits::rank+1)}; enum { is_assignable = std::is_same< typename DstTraits::data_type , typename SrcTraits::scalar_array_type >::value && std::is_same< typename DstTraits::array_layout , typename SrcTraits::array_layout >::value }; diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp index 773f336281..b2d8dea20a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -275,7 +276,7 @@ struct ALL_t { constexpr const ALL_t & operator()() const { return *this ; } KOKKOS_INLINE_FUNCTION - constexpr bool operator == ( const ALL_t & right) const { return true;} + constexpr bool operator == ( const ALL_t & ) const { return true;} }; }} // namespace Kokkos::Impl @@ -1548,7 +1549,7 @@ struct ViewOffset< Dimension , Kokkos::LayoutRight template< class DimRHS > KOKKOS_INLINE_FUNCTION constexpr ViewOffset - ( const ViewOffset< DimRHS , Kokkos::LayoutRight , void > & rhs + ( const ViewOffset< DimRHS , Kokkos::LayoutRight , void > & , const SubviewExtents< DimRHS::rank , dimension_type::rank > & sub ) : m_dim( sub.range_extent(0) , 0, 0, 0, 0, 0, 0, 0 ) @@ -2319,7 +2320,7 @@ struct ViewDataHandle< Traits , && std::is_same< typename Traits::specialize , void >::value && - Traits::memory_traits::Atomic + Traits::memory_traits::is_atomic )>::type > { typedef typename Traits::value_type value_type ; @@ -2348,16 +2349,16 @@ struct ViewDataHandle< Traits , typename std::enable_if<( std::is_same< typename Traits::specialize , void >::value && - (!Traits::memory_traits::Aligned) + (!Traits::memory_traits::is_aligned) && - Traits::memory_traits::Restrict + Traits::memory_traits::is_restrict #ifdef KOKKOS_ENABLE_CUDA && (!( std::is_same< typename Traits::memory_space,Kokkos::CudaSpace>::value || std::is_same< typename Traits::memory_space,Kokkos::CudaUVMSpace>::value )) #endif && - (!Traits::memory_traits::Atomic) + (!Traits::memory_traits::is_atomic) )>::type > { typedef typename Traits::value_type value_type ; @@ -2366,17 +2367,17 @@ struct ViewDataHandle< Traits , typedef Kokkos::Impl::SharedAllocationTracker track_type ; KOKKOS_INLINE_FUNCTION - static handle_type assign( value_type * arg_data_ptr + static value_type* assign( value_type * arg_data_ptr , track_type const & /*arg_tracker*/ ) { - return handle_type( arg_data_ptr ); + return (value_type*)( arg_data_ptr ); } KOKKOS_INLINE_FUNCTION - static handle_type assign( handle_type const arg_data_ptr + static value_type* assign( handle_type const arg_data_ptr , size_t offset ) { - return handle_type( arg_data_ptr + offset ); + return (value_type*)( arg_data_ptr + offset ); } }; @@ -2385,16 +2386,16 @@ struct ViewDataHandle< Traits , typename std::enable_if<( std::is_same< typename Traits::specialize , void >::value && - Traits::memory_traits::Aligned + Traits::memory_traits::is_aligned && - (!Traits::memory_traits::Restrict) + (!Traits::memory_traits::is_restrict) #ifdef KOKKOS_ENABLE_CUDA && (!( std::is_same< typename Traits::memory_space,Kokkos::CudaSpace>::value || std::is_same< typename Traits::memory_space,Kokkos::CudaUVMSpace>::value )) #endif && - (!Traits::memory_traits::Atomic) + (!Traits::memory_traits::is_atomic) )>::type > { typedef typename Traits::value_type value_type ; @@ -2428,16 +2429,16 @@ struct ViewDataHandle< Traits , typename std::enable_if<( std::is_same< typename Traits::specialize , void >::value && - Traits::memory_traits::Aligned + Traits::memory_traits::is_aligned && - Traits::memory_traits::Restrict + Traits::memory_traits::is_restrict #ifdef KOKKOS_ENABLE_CUDA && (!( std::is_same< typename Traits::memory_space,Kokkos::CudaSpace>::value || std::is_same< typename Traits::memory_space,Kokkos::CudaUVMSpace>::value )) #endif && - (!Traits::memory_traits::Atomic) + (!Traits::memory_traits::is_atomic) )>::type > { typedef typename Traits::value_type value_type ; @@ -2446,23 +2447,23 @@ struct ViewDataHandle< Traits , typedef Kokkos::Impl::SharedAllocationTracker track_type ; KOKKOS_INLINE_FUNCTION - static handle_type assign( value_type * arg_data_ptr + static value_type* assign( value_type * arg_data_ptr , track_type const & /*arg_tracker*/ ) { if ( reinterpret_cast(arg_data_ptr) % Impl::MEMORY_ALIGNMENT ) { Kokkos::abort("Assigning NonAligned View or Pointer to Kokkos::View with Aligned attribute"); } - return handle_type( arg_data_ptr ); + return (value_type*)( arg_data_ptr ); } KOKKOS_INLINE_FUNCTION - static handle_type assign( handle_type const arg_data_ptr + static value_type* assign( handle_type const arg_data_ptr , size_t offset ) { if ( reinterpret_cast(arg_data_ptr+offset) % Impl::MEMORY_ALIGNMENT ) { Kokkos::abort("Assigning NonAligned View or Pointer to Kokkos::View with Aligned attribute"); } - return handle_type( arg_data_ptr + offset ); + return (value_type*)( arg_data_ptr + offset ); } }; }} // namespace Kokkos::Impl @@ -2955,7 +2956,8 @@ private: }; public: - + enum { is_assignable_data_type = is_assignable_value_type && + is_assignable_dimension }; enum { is_assignable = is_assignable_space && is_assignable_value_type && is_assignable_dimension && @@ -3052,7 +3054,8 @@ private: , typename SrcTraits::dimension >::value }; public: - + enum { is_assignable_data_type = is_assignable_value_type && + is_assignable_dimension }; enum { is_assignable = is_assignable_space && is_assignable_value_type && is_assignable_dimension }; @@ -3062,7 +3065,7 @@ public: typedef ViewMapping< SrcTraits , void > SrcType ; KOKKOS_INLINE_FUNCTION - static bool assignable_layout_check(DstType & dst, const SrcType & src) //Runtime check + static bool assignable_layout_check(DstType &, const SrcType & src) //Runtime check { size_t strides[9]; bool assignable = true; @@ -3134,6 +3137,73 @@ public: // Subview mapping. // Deduce destination view type from source view traits and subview arguments +template +struct SubViewDataTypeImpl; + +/* base case */ +template +struct SubViewDataTypeImpl< + void, + ValueType, + Experimental::Extents<> +> +{ using type = ValueType; }; + +/* for integral args, subview doesn't have that dimension */ +template +struct SubViewDataTypeImpl< + typename std::enable_if::type>::value>::type, + ValueType, + Experimental::Extents, + Integral, Args... +> : SubViewDataTypeImpl< + void, ValueType, + Experimental::Extents, + Args... + > +{ }; + + +/* for ALL slice, subview has the same dimension */ +template +struct SubViewDataTypeImpl< + void, + ValueType, + Experimental::Extents, + ALL_t, Args... +> : SubViewDataTypeImpl< + void, typename ApplyExtent::type, + Experimental::Extents, + Args... + > +{ }; + + +/* for pair-style slice, subview has dynamic dimension, since pair doesn't give static sizes */ +/* Since we don't allow interleaving of dynamic and static extents, make all of the dimensions to the left dynamic */ +template +struct SubViewDataTypeImpl< + typename std::enable_if::value>::type, + ValueType, + Experimental::Extents, + PairLike, Args... +> : SubViewDataTypeImpl< + void, typename make_all_extents_into_pointers::type*, + Experimental::Extents, + Args... + > +{ }; + + +template +struct SubViewDataType + : SubViewDataTypeImpl< + void, ValueType, Exts, Args... + > +{ }; + +//---------------------------------------------------------------------------- + template< class SrcTraits , class ... Args > struct ViewMapping < typename std::enable_if<( @@ -3201,17 +3271,25 @@ private: typedef typename SrcTraits::value_type value_type ; - typedef typename std::conditional< rank == 0 , value_type , - typename std::conditional< rank == 1 , value_type * , - typename std::conditional< rank == 2 , value_type ** , - typename std::conditional< rank == 3 , value_type *** , - typename std::conditional< rank == 4 , value_type **** , - typename std::conditional< rank == 5 , value_type ***** , - typename std::conditional< rank == 6 , value_type ****** , - typename std::conditional< rank == 7 , value_type ******* , - value_type ******** - >::type >::type >::type >::type >::type >::type >::type >::type - data_type ; + using data_type = + typename SubViewDataType< + value_type, + typename Kokkos::Impl::ParseViewExtents< + typename SrcTraits::data_type + >::type, + Args... + >::type; + //typedef typename std::conditional< rank == 0 , value_type , + // typename std::conditional< rank == 1 , value_type * , + // typename std::conditional< rank == 2 , value_type ** , + // typename std::conditional< rank == 3 , value_type *** , + // typename std::conditional< rank == 4 , value_type **** , + // typename std::conditional< rank == 5 , value_type ***** , + // typename std::conditional< rank == 6 , value_type ****** , + // typename std::conditional< rank == 7 , value_type ******* , + // value_type ******** + // >::type >::type >::type >::type >::type >::type >::type >::type + // data_type ; public: diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp index 716b9ceca5..a8645db451 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp @@ -50,6 +50,9 @@ namespace Kokkos { namespace Impl { +// =========================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + // View mapping for rank two tiled array template< class L > @@ -208,11 +211,17 @@ struct ViewMapping } }; +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +// =============================================================================== + } /* namespace Impl */ } /* namespace Kokkos */ namespace Kokkos { +// ============================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + template< typename T , unsigned N0 , unsigned N1 , class ... P > KOKKOS_INLINE_FUNCTION Kokkos::View< T[N0][N1] , LayoutLeft , P... > @@ -229,6 +238,9 @@ tile_subview( const Kokkos::View,P...> & ( src , SrcLayout() , i_tile0 , i_tile1 ); } +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +// =============================================================================== + } /* namespace Kokkos */ //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/unit_test/CMakeLists.txt b/lib/kokkos/core/unit_test/CMakeLists.txt index fad4e1d45e..6a480daa8d 100644 --- a/lib/kokkos/core/unit_test/CMakeLists.txt +++ b/lib/kokkos/core/unit_test/CMakeLists.txt @@ -11,6 +11,7 @@ IF(NOT KOKKOS_HAS_TRILINOS) ENDIF() SET(GTEST_SOURCE_DIR ${${PARENT_PACKAGE_NAME}_SOURCE_DIR}/tpls/gtest) +# TODO get the C++ standard flag from KOKKOS_CXX_STANDARD SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_HAS_PTHREAD=0") INCLUDE_DIRECTORIES(${GTEST_SOURCE_DIR}) @@ -21,6 +22,17 @@ TRIBITS_ADD_LIBRARY( TESTONLY ) +IF(NOT KOKKOS_HAS_TRILINOS) +target_compile_options( + kokkos_gtest + PUBLIC $<$:${KOKKOS_CXX_FLAGS}> +) +target_link_libraries( + kokkos_gtest + PUBLIC ${KOKKOS_LD_FLAGS} +) +ENDIF() + # # Define the tests # @@ -29,69 +41,212 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) IF(Kokkos_ENABLE_Serial) - TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_Serial - SOURCES - UnitTestMainInit.cpp - serial/TestSerial_AtomicOperations_int.cpp - serial/TestSerial_AtomicOperations_unsignedint.cpp - serial/TestSerial_AtomicOperations_longint.cpp - serial/TestSerial_AtomicOperations_unsignedlongint.cpp - serial/TestSerial_AtomicOperations_longlongint.cpp - serial/TestSerial_AtomicOperations_double.cpp - serial/TestSerial_AtomicOperations_float.cpp - serial/TestSerial_AtomicViews.cpp - serial/TestSerial_Atomics.cpp - serial/TestSerial_Complex.cpp - serial/TestSerial_Init.cpp - serial/TestSerial_MDRange_a.cpp - serial/TestSerial_MDRange_b.cpp - serial/TestSerial_MDRange_c.cpp - serial/TestSerial_MDRange_d.cpp - serial/TestSerial_MDRange_e.cpp - serial/TestSerial_Other.cpp - serial/TestSerial_RangePolicy.cpp - serial/TestSerial_Reductions.cpp - serial/TestSerial_Reducers_a.cpp - serial/TestSerial_Reducers_b.cpp - serial/TestSerial_Reducers_c.cpp - serial/TestSerial_Reducers_d.cpp - serial/TestSerial_Scan.cpp - serial/TestSerial_SharedAlloc.cpp - serial/TestSerial_SubView_a.cpp - serial/TestSerial_SubView_b.cpp - serial/TestSerial_SubView_c01.cpp - serial/TestSerial_SubView_c02.cpp - serial/TestSerial_SubView_c03.cpp - serial/TestSerial_SubView_c04.cpp - serial/TestSerial_SubView_c05.cpp - serial/TestSerial_SubView_c06.cpp - serial/TestSerial_SubView_c07.cpp - serial/TestSerial_SubView_c08.cpp - serial/TestSerial_SubView_c09.cpp - serial/TestSerial_SubView_c10.cpp - serial/TestSerial_SubView_c11.cpp - serial/TestSerial_SubView_c12.cpp - serial/TestSerial_SubView_c13.cpp - serial/TestSerial_Team.cpp - serial/TestSerial_TeamReductionScan.cpp - serial/TestSerial_TeamScratch.cpp - serial/TestSerial_ViewAPI_a.cpp - serial/TestSerial_ViewAPI_b.cpp - serial/TestSerial_ViewAPI_c.cpp - serial/TestSerial_ViewAPI_d.cpp - serial/TestSerial_ViewAPI_e.cpp - serial/TestSerial_ViewMapping_a.cpp - serial/TestSerial_ViewMapping_b.cpp - serial/TestSerial_ViewMapping_subview.cpp - serial/TestSerial_ViewOfClass.cpp - serial/TestSerial_Crs.cpp - serial/TestSerial_WorkGraph.cpp - COMM serial mpi - NUM_MPI_PROCS 1 - FAIL_REGULAR_EXPRESSION " FAILED " - TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} - ) + IF(KOKKOS_SEPARATE_TESTS) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Atomics + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_AtomicOperations_int.cpp + serial/TestSerial_AtomicOperations_unsignedint.cpp + serial/TestSerial_AtomicOperations_longint.cpp + serial/TestSerial_AtomicOperations_unsignedlongint.cpp + serial/TestSerial_AtomicOperations_longlongint.cpp + serial/TestSerial_AtomicOperations_double.cpp + serial/TestSerial_AtomicOperations_float.cpp + serial/TestSerial_AtomicOperations_complexdouble.cpp + serial/TestSerial_AtomicOperations_complexfloat.cpp + serial/TestSerial_AtomicViews.cpp + serial/TestSerial_Atomics.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_SubView + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_SubView_a.cpp + serial/TestSerial_SubView_b.cpp + serial/TestSerial_SubView_c01.cpp + serial/TestSerial_SubView_c02.cpp + serial/TestSerial_SubView_c03.cpp + serial/TestSerial_SubView_c04.cpp + serial/TestSerial_SubView_c05.cpp + serial/TestSerial_SubView_c06.cpp + serial/TestSerial_SubView_c07.cpp + serial/TestSerial_SubView_c08.cpp + serial/TestSerial_SubView_c09.cpp + serial/TestSerial_SubView_c10.cpp + serial/TestSerial_SubView_c11.cpp + serial/TestSerial_SubView_c12.cpp + serial/TestSerial_SubView_c13.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_ViewAPI + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_ViewAPI_a.cpp + serial/TestSerial_ViewAPI_b.cpp + serial/TestSerial_ViewAPI_c.cpp + serial/TestSerial_ViewAPI_d.cpp + serial/TestSerial_ViewAPI_e.cpp + serial/TestSerial_ViewOfClass.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_ViewMapping + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_ViewMapping_a.cpp + serial/TestSerial_ViewMapping_b.cpp + serial/TestSerial_ViewMapping_subview.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Reducers + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Reductions.cpp + serial/TestSerial_Reducers_a.cpp + serial/TestSerial_Reducers_b.cpp + serial/TestSerial_Reducers_c.cpp + serial/TestSerial_Reducers_d.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_MDRange + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_MDRange_a.cpp + serial/TestSerial_MDRange_b.cpp + serial/TestSerial_MDRange_c.cpp + serial/TestSerial_MDRange_d.cpp + serial/TestSerial_MDRange_e.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Team + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Team.cpp + serial/TestSerial_TeamReductionScan.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Tasking + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Task.cpp + serial/TestSerial_WorkGraph.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Misc + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Complex.cpp + serial/TestSerial_Init.cpp + serial/TestSerial_Other.cpp + serial/TestSerial_RangePolicy.cpp + serial/TestSerial_Scan.cpp + serial/TestSerial_SharedAlloc.cpp + serial/TestSerial_Crs.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ELSE() + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_AtomicOperations_int.cpp + serial/TestSerial_AtomicOperations_unsignedint.cpp + serial/TestSerial_AtomicOperations_longint.cpp + serial/TestSerial_AtomicOperations_unsignedlongint.cpp + serial/TestSerial_AtomicOperations_longlongint.cpp + serial/TestSerial_AtomicOperations_double.cpp + serial/TestSerial_AtomicOperations_float.cpp + serial/TestSerial_AtomicOperations_complexdouble.cpp + serial/TestSerial_AtomicOperations_complexfloat.cpp + serial/TestSerial_AtomicViews.cpp + serial/TestSerial_Atomics.cpp + serial/TestSerial_Complex.cpp + serial/TestSerial_Init.cpp + serial/TestSerial_MDRange_a.cpp + serial/TestSerial_MDRange_b.cpp + serial/TestSerial_MDRange_c.cpp + serial/TestSerial_MDRange_d.cpp + serial/TestSerial_MDRange_e.cpp + serial/TestSerial_Other.cpp + serial/TestSerial_RangePolicy.cpp + serial/TestSerial_Reductions.cpp + serial/TestSerial_Reducers_a.cpp + serial/TestSerial_Reducers_b.cpp + serial/TestSerial_Reducers_c.cpp + serial/TestSerial_Reducers_d.cpp + serial/TestSerial_Scan.cpp + serial/TestSerial_SharedAlloc.cpp + serial/TestSerial_SubView_a.cpp + serial/TestSerial_SubView_b.cpp + serial/TestSerial_SubView_c01.cpp + serial/TestSerial_SubView_c02.cpp + serial/TestSerial_SubView_c03.cpp + serial/TestSerial_SubView_c04.cpp + serial/TestSerial_SubView_c05.cpp + serial/TestSerial_SubView_c06.cpp + serial/TestSerial_SubView_c07.cpp + serial/TestSerial_SubView_c08.cpp + serial/TestSerial_SubView_c09.cpp + serial/TestSerial_SubView_c10.cpp + serial/TestSerial_SubView_c11.cpp + serial/TestSerial_SubView_c12.cpp + serial/TestSerial_SubView_c13.cpp + serial/TestSerial_Task.cpp + serial/TestSerial_Team.cpp + serial/TestSerial_TeamReductionScan.cpp + serial/TestSerial_TeamScratch.cpp + serial/TestSerial_ViewAPI_a.cpp + serial/TestSerial_ViewAPI_b.cpp + serial/TestSerial_ViewAPI_c.cpp + serial/TestSerial_ViewAPI_d.cpp + serial/TestSerial_ViewAPI_e.cpp + serial/TestSerial_ViewMapping_a.cpp + serial/TestSerial_ViewMapping_b.cpp + serial/TestSerial_ViewMapping_subview.cpp + serial/TestSerial_ViewOfClass.cpp + serial/TestSerial_Crs.cpp + serial/TestSerial_WorkGraph.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ENDIF() ENDIF() IF(Kokkos_ENABLE_Pthread) @@ -106,6 +261,8 @@ IF(Kokkos_ENABLE_Pthread) threads/TestThreads_AtomicOperations_longlongint.cpp threads/TestThreads_AtomicOperations_double.cpp threads/TestThreads_AtomicOperations_float.cpp + threads/TestThreads_AtomicOperations_complexdouble.cpp + threads/TestThreads_AtomicOperations_complexfloat.cpp threads/TestThreads_AtomicViews.cpp threads/TestThreads_Atomics.cpp threads/TestThreads_Complex.cpp @@ -161,75 +318,305 @@ IF(Kokkos_ENABLE_Pthread) ENDIF() IF(Kokkos_ENABLE_OpenMP) + IF(KOKKOS_SEPARATE_TESTS) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Atomics + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_AtomicOperations_int.cpp + openmp/TestOpenMP_AtomicOperations_unsignedint.cpp + openmp/TestOpenMP_AtomicOperations_longint.cpp + openmp/TestOpenMP_AtomicOperations_unsignedlongint.cpp + openmp/TestOpenMP_AtomicOperations_longlongint.cpp + openmp/TestOpenMP_AtomicOperations_double.cpp + openmp/TestOpenMP_AtomicOperations_float.cpp + openmp/TestOpenMP_AtomicOperations_complexdouble.cpp + openmp/TestOpenMP_AtomicOperations_complexfloat.cpp + openmp/TestOpenMP_AtomicViews.cpp + openmp/TestOpenMP_Atomics.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_SubView + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_SubView_a.cpp + openmp/TestOpenMP_SubView_b.cpp + openmp/TestOpenMP_SubView_c01.cpp + openmp/TestOpenMP_SubView_c02.cpp + openmp/TestOpenMP_SubView_c03.cpp + openmp/TestOpenMP_SubView_c04.cpp + openmp/TestOpenMP_SubView_c05.cpp + openmp/TestOpenMP_SubView_c06.cpp + openmp/TestOpenMP_SubView_c07.cpp + openmp/TestOpenMP_SubView_c08.cpp + openmp/TestOpenMP_SubView_c09.cpp + openmp/TestOpenMP_SubView_c10.cpp + openmp/TestOpenMP_SubView_c11.cpp + openmp/TestOpenMP_SubView_c12.cpp + openmp/TestOpenMP_SubView_c13.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_ViewAPI + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_ViewAPI_a.cpp + openmp/TestOpenMP_ViewAPI_b.cpp + openmp/TestOpenMP_ViewAPI_c.cpp + openmp/TestOpenMP_ViewAPI_d.cpp + openmp/TestOpenMP_ViewAPI_e.cpp + openmp/TestOpenMP_ViewOfClass.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_ViewMapping + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_ViewMapping_a.cpp + openmp/TestOpenMP_ViewMapping_b.cpp + openmp/TestOpenMP_ViewMapping_subview.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Reducers + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Reductions.cpp + openmp/TestOpenMP_Reducers_a.cpp + openmp/TestOpenMP_Reducers_b.cpp + openmp/TestOpenMP_Reducers_c.cpp + openmp/TestOpenMP_Reducers_d.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_MDRange + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_MDRange_a.cpp + openmp/TestOpenMP_MDRange_b.cpp + openmp/TestOpenMP_MDRange_c.cpp + openmp/TestOpenMP_MDRange_d.cpp + openmp/TestOpenMP_MDRange_e.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Team + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Team.cpp + openmp/TestOpenMP_TeamReductionScan.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Tasking + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Task.cpp + openmp/TestOpenMP_WorkGraph.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Misc + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Complex.cpp + openmp/TestOpenMP_Init.cpp + openmp/TestOpenMP_Other.cpp + openmp/TestOpenMP_RangePolicy.cpp + openmp/TestOpenMP_Scan.cpp + openmp/TestOpenMP_SharedAlloc.cpp + openmp/TestOpenMP_Crs.cpp + openmp/TestOpenMP_UniqueToken.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMPInterOp + SOURCES + UnitTestMain.cpp + openmp/TestOpenMP_InterOp.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ELSE() + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_AtomicOperations_int.cpp + openmp/TestOpenMP_AtomicOperations_unsignedint.cpp + openmp/TestOpenMP_AtomicOperations_longint.cpp + openmp/TestOpenMP_AtomicOperations_unsignedlongint.cpp + openmp/TestOpenMP_AtomicOperations_longlongint.cpp + openmp/TestOpenMP_AtomicOperations_double.cpp + openmp/TestOpenMP_AtomicOperations_float.cpp + openmp/TestOpenMP_AtomicOperations_complexdouble.cpp + openmp/TestOpenMP_AtomicOperations_complexfloat.cpp + openmp/TestOpenMP_AtomicViews.cpp + openmp/TestOpenMP_Atomics.cpp + openmp/TestOpenMP_Complex.cpp + openmp/TestOpenMP_Init.cpp + openmp/TestOpenMP_MDRange_a.cpp + openmp/TestOpenMP_MDRange_b.cpp + openmp/TestOpenMP_MDRange_c.cpp + openmp/TestOpenMP_MDRange_d.cpp + openmp/TestOpenMP_MDRange_e.cpp + openmp/TestOpenMP_Other.cpp + openmp/TestOpenMP_RangePolicy.cpp + openmp/TestOpenMP_Reductions.cpp + openmp/TestOpenMP_Reducers_a.cpp + openmp/TestOpenMP_Reducers_b.cpp + openmp/TestOpenMP_Reducers_c.cpp + openmp/TestOpenMP_Reducers_d.cpp + openmp/TestOpenMP_Scan.cpp + openmp/TestOpenMP_SharedAlloc.cpp + openmp/TestOpenMP_SubView_a.cpp + openmp/TestOpenMP_SubView_b.cpp + openmp/TestOpenMP_SubView_c01.cpp + openmp/TestOpenMP_SubView_c02.cpp + openmp/TestOpenMP_SubView_c03.cpp + openmp/TestOpenMP_SubView_c04.cpp + openmp/TestOpenMP_SubView_c05.cpp + openmp/TestOpenMP_SubView_c06.cpp + openmp/TestOpenMP_SubView_c07.cpp + openmp/TestOpenMP_SubView_c08.cpp + openmp/TestOpenMP_SubView_c09.cpp + openmp/TestOpenMP_SubView_c10.cpp + openmp/TestOpenMP_SubView_c11.cpp + openmp/TestOpenMP_SubView_c12.cpp + openmp/TestOpenMP_SubView_c13.cpp + openmp/TestOpenMP_Task.cpp + openmp/TestOpenMP_Team.cpp + openmp/TestOpenMP_TeamReductionScan.cpp + openmp/TestOpenMP_ViewAPI_a.cpp + openmp/TestOpenMP_ViewAPI_b.cpp + openmp/TestOpenMP_ViewAPI_c.cpp + openmp/TestOpenMP_ViewAPI_d.cpp + openmp/TestOpenMP_ViewAPI_e.cpp + openmp/TestOpenMP_ViewMapping_a.cpp + openmp/TestOpenMP_ViewMapping_b.cpp + openmp/TestOpenMP_ViewMapping_subview.cpp + openmp/TestOpenMP_ViewOfClass.cpp + openmp/TestOpenMP_Crs.cpp + openmp/TestOpenMP_WorkGraph.cpp + openmp/TestOpenMP_UniqueToken.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMPInterOp + SOURCES + UnitTestMain.cpp + openmp/TestOpenMP_InterOp.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ENDIF() +ENDIF() + +IF(Kokkos_ENABLE_HPX) TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_OpenMP + UnitTest_HPX SOURCES UnitTestMainInit.cpp - openmp/TestOpenMP_AtomicOperations_int.cpp - openmp/TestOpenMP_AtomicOperations_unsignedint.cpp - openmp/TestOpenMP_AtomicOperations_longint.cpp - openmp/TestOpenMP_AtomicOperations_unsignedlongint.cpp - openmp/TestOpenMP_AtomicOperations_longlongint.cpp - openmp/TestOpenMP_AtomicOperations_double.cpp - openmp/TestOpenMP_AtomicOperations_float.cpp - openmp/TestOpenMP_AtomicViews.cpp - openmp/TestOpenMP_Atomics.cpp - openmp/TestOpenMP_Complex.cpp - openmp/TestOpenMP_Init.cpp - openmp/TestOpenMP_MDRange_a.cpp - openmp/TestOpenMP_MDRange_b.cpp - openmp/TestOpenMP_MDRange_c.cpp - openmp/TestOpenMP_MDRange_d.cpp - openmp/TestOpenMP_MDRange_e.cpp - openmp/TestOpenMP_Other.cpp - openmp/TestOpenMP_RangePolicy.cpp - openmp/TestOpenMP_Reductions.cpp - openmp/TestOpenMP_Reducers_a.cpp - openmp/TestOpenMP_Reducers_b.cpp - openmp/TestOpenMP_Reducers_c.cpp - openmp/TestOpenMP_Reducers_d.cpp - openmp/TestOpenMP_Scan.cpp - openmp/TestOpenMP_SharedAlloc.cpp - openmp/TestOpenMP_SubView_a.cpp - openmp/TestOpenMP_SubView_b.cpp - openmp/TestOpenMP_SubView_c01.cpp - openmp/TestOpenMP_SubView_c02.cpp - openmp/TestOpenMP_SubView_c03.cpp - openmp/TestOpenMP_SubView_c04.cpp - openmp/TestOpenMP_SubView_c05.cpp - openmp/TestOpenMP_SubView_c06.cpp - openmp/TestOpenMP_SubView_c07.cpp - openmp/TestOpenMP_SubView_c08.cpp - openmp/TestOpenMP_SubView_c09.cpp - openmp/TestOpenMP_SubView_c10.cpp - openmp/TestOpenMP_SubView_c11.cpp - openmp/TestOpenMP_SubView_c12.cpp - openmp/TestOpenMP_SubView_c13.cpp - openmp/TestOpenMP_Task.cpp - openmp/TestOpenMP_Team.cpp - openmp/TestOpenMP_TeamReductionScan.cpp - openmp/TestOpenMP_ViewAPI_a.cpp - openmp/TestOpenMP_ViewAPI_b.cpp - openmp/TestOpenMP_ViewAPI_c.cpp - openmp/TestOpenMP_ViewAPI_d.cpp - openmp/TestOpenMP_ViewAPI_e.cpp - openmp/TestOpenMP_ViewMapping_a.cpp - openmp/TestOpenMP_ViewMapping_b.cpp - openmp/TestOpenMP_ViewMapping_subview.cpp - openmp/TestOpenMP_ViewOfClass.cpp - openmp/TestOpenMP_Crs.cpp - openmp/TestOpenMP_WorkGraph.cpp - openmp/TestOpenMP_UniqueToken.cpp + hpx/TestHPX_AtomicOperations_int.cpp + hpx/TestHPX_AtomicOperations_unsignedint.cpp + hpx/TestHPX_AtomicOperations_longint.cpp + hpx/TestHPX_AtomicOperations_unsignedlongint.cpp + hpx/TestHPX_AtomicOperations_longlongint.cpp + hpx/TestHPX_AtomicOperations_double.cpp + hpx/TestHPX_AtomicOperations_float.cpp + hpx/TestHPX_AtomicViews.cpp + hpx/TestHPX_Atomics.cpp + hpx/TestHPX_Complex.cpp + hpx/TestHPX_Init.cpp + hpx/TestHPX_MDRange_a.cpp + hpx/TestHPX_MDRange_b.cpp + hpx/TestHPX_MDRange_c.cpp + hpx/TestHPX_MDRange_d.cpp + hpx/TestHPX_MDRange_e.cpp + hpx/TestHPX_Other.cpp + hpx/TestHPX_RangePolicy.cpp + hpx/TestHPX_Reductions.cpp + hpx/TestHPX_Reducers_a.cpp + hpx/TestHPX_Reducers_b.cpp + hpx/TestHPX_Reducers_c.cpp + hpx/TestHPX_Reducers_d.cpp + hpx/TestHPX_Scan.cpp + hpx/TestHPX_SharedAlloc.cpp + hpx/TestHPX_SubView_a.cpp + hpx/TestHPX_SubView_b.cpp + hpx/TestHPX_SubView_c01.cpp + hpx/TestHPX_SubView_c02.cpp + hpx/TestHPX_SubView_c03.cpp + hpx/TestHPX_SubView_c04.cpp + hpx/TestHPX_SubView_c05.cpp + hpx/TestHPX_SubView_c06.cpp + hpx/TestHPX_SubView_c07.cpp + hpx/TestHPX_SubView_c08.cpp + hpx/TestHPX_SubView_c09.cpp + hpx/TestHPX_SubView_c10.cpp + hpx/TestHPX_SubView_c11.cpp + hpx/TestHPX_SubView_c12.cpp + hpx/TestHPX_SubView_c13.cpp + hpx/TestHPX_Task.cpp + hpx/TestHPX_Team.cpp + hpx/TestHPX_TeamReductionScan.cpp + hpx/TestHPX_ViewAPI_a.cpp + hpx/TestHPX_ViewAPI_b.cpp + hpx/TestHPX_ViewAPI_c.cpp + hpx/TestHPX_ViewAPI_d.cpp + hpx/TestHPX_ViewAPI_e.cpp + hpx/TestHPX_ViewMapping_a.cpp + hpx/TestHPX_ViewMapping_b.cpp + hpx/TestHPX_ViewMapping_subview.cpp + hpx/TestHPX_ViewOfClass.cpp + hpx/TestHPX_Crs.cpp + hpx/TestHPX_WorkGraph.cpp + hpx/TestHPX_UniqueToken.cpp COMM serial mpi NUM_MPI_PROCS 1 FAIL_REGULAR_EXPRESSION " FAILED " TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_OpenMPInterOp + UnitTest_HPXInterOp SOURCES UnitTestMain.cpp - openmp/TestOpenMP_InterOp.cpp + hpx/TestHPX_InterOp.cpp COMM serial mpi NUM_MPI_PROCS 1 FAIL_REGULAR_EXPRESSION " FAILED " @@ -310,6 +697,8 @@ IF(Kokkos_ENABLE_Cuda) cuda/TestCuda_AtomicOperations_longlongint.cpp cuda/TestCuda_AtomicOperations_double.cpp cuda/TestCuda_AtomicOperations_float.cpp + cuda/TestCuda_AtomicOperations_complexdouble.cpp + cuda/TestCuda_AtomicOperations_complexfloat.cpp cuda/TestCuda_AtomicViews.cpp cuda/TestCuda_Atomics.cpp cuda/TestCuda_Complex.cpp @@ -366,10 +755,20 @@ IF(Kokkos_ENABLE_Cuda) TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_CudaInterOp + UnitTest_CudaInterOpInit SOURCES UnitTestMain.cpp - cuda/TestCuda_InterOp.cpp + cuda/TestCuda_InterOp_Init.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_CudaInterOpStreams + SOURCES + UnitTestMain.cpp + cuda/TestCuda_InterOp_Streams.cpp COMM serial mpi NUM_MPI_PROCS 1 FAIL_REGULAR_EXPRESSION " FAILED " @@ -456,3 +855,40 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( FAIL_REGULAR_EXPRESSION " FAILED " TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) + +# +# Compile-only tests +# +FUNCTION(KOKKOS_ADD_COMPILE_TEST TEST_NAME) + + SET(options LINK_KOKKOS) + SET(oneValueArgs) + SET(multiValueArgs) + + CMAKE_PARSE_ARGUMENTS(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + IF(PARSE_LINK_KOKKOS) + SET(libs ${TEST_LINK_TARGETS}) + ELSE() + SET(libs) + ENDIF() + + TRIBITS_ADD_EXECUTABLE( + ${TEST_NAME} + TESTONLY + COMM serial + TESTONLYLIBS ${libs} + ${PARSE_UNPARSED_ARGUMENTS} + ) + + target_compile_options( + ${PACKAGE_NAME}_${TEST_NAME} + PUBLIC $<$:${KOKKOS_CXX_FLAGS}> + ) + target_link_libraries( + ${PACKAGE_NAME}_${TEST_NAME} + PUBLIC ${KOKKOS_LD_FLAGS} + ) + +ENDFUNCTION() + diff --git a/lib/kokkos/core/unit_test/Makefile b/lib/kokkos/core/unit_test/Makefile index 72832271c8..5a69213108 100644 --- a/lib/kokkos/core/unit_test/Makefile +++ b/lib/kokkos/core/unit_test/Makefile @@ -9,6 +9,7 @@ vpath %.cpp ${KOKKOS_PATH}/core/unit_test/threads vpath %.cpp ${KOKKOS_PATH}/core/unit_test/openmp vpath %.cpp ${KOKKOS_PATH}/core/unit_test/openmptarget vpath %.cpp ${KOKKOS_PATH}/core/unit_test/qthreads +vpath %.cpp ${KOKKOS_PATH}/core/unit_test/hpx vpath %.cpp ${KOKKOS_PATH}/core/unit_test/cuda vpath %.cpp ${KOKKOS_PATH}/core/unit_test/rocm @@ -38,253 +39,310 @@ TEST_TARGETS = TARGETS = ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) - OBJ_CUDA = UnitTestMainInit.o gtest-all.o - OBJ_CUDA += TestCuda_Init.o - OBJ_CUDA += TestCuda_SharedAlloc.o TestCudaUVM_SharedAlloc.o TestCudaHostPinned_SharedAlloc.o - OBJ_CUDA += TestCuda_RangePolicy.o - OBJ_CUDA += TestCuda_ViewAPI_a.o TestCuda_ViewAPI_b.o TestCuda_ViewAPI_c.o TestCuda_ViewAPI_d.o TestCuda_ViewAPI_e.o - OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o TestCuda_ViewLayoutStrideAssignment.o - OBJ_CUDA += TestCudaUVM_ViewCopy.o TestCudaUVM_ViewAPI_a.o TestCudaUVM_ViewAPI_b.o TestCudaUVM_ViewAPI_c.o TestCudaUVM_ViewAPI_d.o TestCudaUVM_ViewAPI_e.o - OBJ_CUDA += TestCudaUVM_ViewMapping_a.o TestCudaUVM_ViewMapping_b.o TestCudaUVM_ViewMapping_subview.o - OBJ_CUDA += TestCudaHostPinned_ViewCopy.o TestCudaHostPinned_ViewAPI_a.o TestCudaHostPinned_ViewAPI_b.o TestCudaHostPinned_ViewAPI_c.o TestCudaHostPinned_ViewAPI_d.o TestCudaHostPinned_ViewAPI_e.o - OBJ_CUDA += TestCudaHostPinned_ViewMapping_a.o TestCudaHostPinned_ViewMapping_b.o TestCudaHostPinned_ViewMapping_subview.o - OBJ_CUDA += TestCuda_View_64bit.o - OBJ_CUDA += TestCuda_ViewOfClass.o - OBJ_CUDA += TestCuda_SubView_a.o TestCuda_SubView_b.o - OBJ_CUDA += TestCuda_SubView_c01.o TestCuda_SubView_c02.o TestCuda_SubView_c03.o - OBJ_CUDA += TestCuda_SubView_c04.o TestCuda_SubView_c05.o TestCuda_SubView_c06.o - OBJ_CUDA += TestCuda_SubView_c07.o TestCuda_SubView_c08.o TestCuda_SubView_c09.o - OBJ_CUDA += TestCuda_SubView_c10.o TestCuda_SubView_c11.o TestCuda_SubView_c12.o - OBJ_CUDA += TestCuda_SubView_c13.o - OBJ_CUDA += TestCuda_Reductions.o TestCuda_Scan.o - OBJ_CUDA += TestCuda_Reductions_DeviceView.o - OBJ_CUDA += TestCuda_Reducers_a.o TestCuda_Reducers_b.o TestCuda_Reducers_c.o TestCuda_Reducers_d.o - OBJ_CUDA += TestCuda_Complex.o - OBJ_CUDA += TestCuda_AtomicOperations_int.o TestCuda_AtomicOperations_unsignedint.o TestCuda_AtomicOperations_longint.o - OBJ_CUDA += TestCuda_AtomicOperations_unsignedlongint.o TestCuda_AtomicOperations_longlongint.o TestCuda_AtomicOperations_double.o TestCuda_AtomicOperations_float.o - OBJ_CUDA += TestCuda_AtomicViews.o TestCuda_Atomics.o - OBJ_CUDA += TestCuda_Team.o TestCuda_TeamScratch.o - OBJ_CUDA += TestCuda_TeamReductionScan.o TestCuda_TeamTeamSize.o - OBJ_CUDA += TestCuda_Other.o - OBJ_CUDA += TestCuda_MDRange_a.o TestCuda_MDRange_b.o TestCuda_MDRange_c.o TestCuda_MDRange_d.o TestCuda_MDRange_e.o - OBJ_CUDA += TestCuda_Crs.o - OBJ_CUDA += TestCuda_Task.o TestCuda_WorkGraph.o - OBJ_CUDA += TestCuda_Spaces.o - OBJ_CUDA += TestCuda_UniqueToken.o - - TARGETS += KokkosCore_UnitTest_Cuda - TARGETS += KokkosCore_UnitTest_CudaInterOp - TEST_TARGETS += test-cuda + OBJ_CUDA = UnitTestMainInit.o gtest-all.o + OBJ_CUDA += TestCuda_Init.o + OBJ_CUDA += TestCuda_SharedAlloc.o TestCudaUVM_SharedAlloc.o TestCudaHostPinned_SharedAlloc.o + OBJ_CUDA += TestCuda_RangePolicy.o + OBJ_CUDA += TestCuda_ViewAPI_a.o TestCuda_ViewAPI_b.o TestCuda_ViewAPI_c.o TestCuda_ViewAPI_d.o TestCuda_ViewAPI_e.o + OBJ_CUDA += TestCuda_DeepCopyAlignment.o + OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o TestCuda_ViewLayoutStrideAssignment.o + OBJ_CUDA += TestCudaUVM_ViewCopy.o TestCudaUVM_ViewAPI_a.o TestCudaUVM_ViewAPI_b.o TestCudaUVM_ViewAPI_c.o TestCudaUVM_ViewAPI_d.o TestCudaUVM_ViewAPI_e.o + OBJ_CUDA += TestCudaUVM_ViewMapping_a.o TestCudaUVM_ViewMapping_b.o TestCudaUVM_ViewMapping_subview.o + OBJ_CUDA += TestCudaHostPinned_ViewCopy.o TestCudaHostPinned_ViewAPI_a.o TestCudaHostPinned_ViewAPI_b.o TestCudaHostPinned_ViewAPI_c.o TestCudaHostPinned_ViewAPI_d.o TestCudaHostPinned_ViewAPI_e.o + OBJ_CUDA += TestCudaHostPinned_ViewMapping_a.o TestCudaHostPinned_ViewMapping_b.o TestCudaHostPinned_ViewMapping_subview.o + OBJ_CUDA += TestCuda_View_64bit.o + OBJ_CUDA += TestCuda_ViewOfClass.o + OBJ_CUDA += TestCuda_SubView_a.o TestCuda_SubView_b.o + OBJ_CUDA += TestCuda_SubView_c01.o TestCuda_SubView_c02.o TestCuda_SubView_c03.o + OBJ_CUDA += TestCuda_SubView_c04.o TestCuda_SubView_c05.o TestCuda_SubView_c06.o + OBJ_CUDA += TestCuda_SubView_c07.o TestCuda_SubView_c08.o TestCuda_SubView_c09.o + OBJ_CUDA += TestCuda_SubView_c10.o TestCuda_SubView_c11.o TestCuda_SubView_c12.o + OBJ_CUDA += TestCuda_SubView_c13.o + OBJ_CUDA += TestCuda_Reductions.o TestCuda_Scan.o + OBJ_CUDA += TestCuda_Reductions_DeviceView.o + OBJ_CUDA += TestCuda_Reducers_a.o TestCuda_Reducers_b.o TestCuda_Reducers_c.o TestCuda_Reducers_d.o + OBJ_CUDA += TestCuda_Complex.o + OBJ_CUDA += TestCuda_AtomicOperations_int.o TestCuda_AtomicOperations_unsignedint.o TestCuda_AtomicOperations_longint.o + OBJ_CUDA += TestCuda_AtomicOperations_unsignedlongint.o TestCuda_AtomicOperations_longlongint.o TestCuda_AtomicOperations_double.o TestCuda_AtomicOperations_float.o + OBJ_CUDA += TestCuda_AtomicOperations_complexfloat.o TestCuda_AtomicOperations_complexdouble.o + OBJ_CUDA += TestCuda_AtomicViews.o TestCuda_Atomics.o + OBJ_CUDA += TestCuda_Team.o TestCuda_TeamScratch.o + OBJ_CUDA += TestCuda_TeamReductionScan.o TestCuda_TeamTeamSize.o + OBJ_CUDA += TestCuda_TeamVectorRange.o + OBJ_CUDA += TestCuda_Other.o + OBJ_CUDA += TestCuda_MDRange_a.o TestCuda_MDRange_b.o TestCuda_MDRange_c.o TestCuda_MDRange_d.o TestCuda_MDRange_e.o + OBJ_CUDA += TestCuda_Crs.o + OBJ_CUDA += TestCuda_Task.o TestCuda_WorkGraph.o + OBJ_CUDA += TestCuda_Spaces.o + OBJ_CUDA += TestCuda_UniqueToken.o + OBJ_CUDA += TestCuda_LocalDeepCopy.o + + TARGETS += KokkosCore_UnitTest_Cuda + TARGETS += KokkosCore_UnitTest_CudaInterOpInit + TARGETS += KokkosCore_UnitTest_CudaInterOpStreams + TEST_TARGETS += test-cuda endif ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) - OBJ_ROCM = UnitTestMainInit.o gtest-all.o - OBJ_ROCM += TestROCm_Init.o - OBJ_ROCM += TestROCm_Complex.o - OBJ_ROCM += TestROCm_RangePolicy.o - OBJ_ROCM += TestROCm_AtomicOperations_int.o TestROCm_AtomicOperations_unsignedint.o TestROCm_AtomicOperations_longint.o - OBJ_ROCM += TestROCm_AtomicOperations_unsignedlongint.o TestROCm_AtomicOperations_longlongint.o TestROCm_AtomicOperations_double.o TestROCm_AtomicOperations_float.o - OBJ_ROCM += TestROCm_Atomics.o - OBJ_ROCM += TestROCm_AtomicViews.o - OBJ_ROCM += TestROCm_Other.o - OBJ_ROCM += TestROCm_MDRange_a.o TestROCm_MDRange_b.o TestROCm_MDRange_c.o TestROCm_MDRange_d.o TestROCm_MDRange_e.o - OBJ_ROCM += TestROCm_MDRangeReduce_a.o TestROCm_MDRangeReduce_b.o TestROCm_MDRangeReduce_c.o TestROCm_MDRangeReduce_d.o TestROCm_MDRangeReduce_e.o - OBJ_ROCM += TestROCm_Reductions.o - OBJ_ROCM += TestROCm_Reducers_a.o TestROCm_Reducers_b.o TestROCm_Reducers_c.o TestROCm_Reducers_d.o - OBJ_ROCM += TestROCm_Scan.o - OBJ_ROCM += TestROCm_SharedAlloc.o - OBJ_ROCM += TestROCm_SubView_a.o - OBJ_ROCM += TestROCm_SubView_b.o - OBJ_ROCM += TestROCm_SubView_c01.o - OBJ_ROCM += TestROCm_SubView_c02.o - OBJ_ROCM += TestROCm_SubView_c03.o - OBJ_ROCM += TestROCm_SubView_c04.o - OBJ_ROCM += TestROCm_SubView_c05.o - OBJ_ROCM += TestROCm_SubView_c06.o - OBJ_ROCM += TestROCm_SubView_c07.o - OBJ_ROCM += TestROCm_SubView_c08.o - OBJ_ROCM += TestROCm_SubView_c09.o - OBJ_ROCM += TestROCm_SubView_c10.o - OBJ_ROCM += TestROCm_SubView_c11.o - OBJ_ROCM += TestROCm_SubView_c12.o - OBJ_ROCM += TestROCm_SubView_c13.o - OBJ_ROCM += TestROCm_Team.o - OBJ_ROCM += TestROCm_TeamReductionScan.o - OBJ_ROCM += TestROCm_TeamScratch.o TestROCm_TeamTeamSize.o - OBJ_ROCM += TestROCm_ViewAPI_a.o TestROCm_ViewAPI_b.o TestROCm_ViewAPI_c.o TestROCm_ViewAPI_d.o TestROCm_ViewAPI_e.o - OBJ_ROCM += TestROCm_ViewMapping_a.o - OBJ_ROCM += TestROCm_ViewMapping_b.o - OBJ_ROCM += TestROCm_ViewMapping_subview.o - OBJ_ROCM += TestROCmHostPinned_ViewCopy.o TestROCmHostPinned_ViewAPI_a.o TestROCmHostPinned_ViewAPI_b.o TestROCmHostPinned_ViewAPI_c.o TestROCmHostPinned_ViewAPI_d.o TestROCmHostPinned_ViewAPI_e.o - OBJ_ROCM += TestROCmHostPinned_View_64bit.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_a.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_b.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_subview.o - OBJ_ROCM += TestROCm_ViewOfClass.o - OBJ_ROCM += TestROCm_Spaces.o - OBJ_ROCM += TestROCm_Crs.o - - TARGETS += KokkosCore_UnitTest_ROCm - TEST_TARGETS += test-rocm + OBJ_ROCM = UnitTestMainInit.o gtest-all.o + OBJ_ROCM += TestROCm_Init.o + OBJ_ROCM += TestROCm_Complex.o + OBJ_ROCM += TestROCm_RangePolicy.o + OBJ_ROCM += TestROCm_AtomicOperations_int.o TestROCm_AtomicOperations_unsignedint.o TestROCm_AtomicOperations_longint.o + OBJ_ROCM += TestROCm_AtomicOperations_unsignedlongint.o TestROCm_AtomicOperations_longlongint.o TestROCm_AtomicOperations_double.o TestROCm_AtomicOperations_float.o + OBJ_ROCM += TestROCm_Atomics.o + OBJ_ROCM += TestROCm_AtomicViews.o + OBJ_ROCM += TestROCm_Other.o + OBJ_ROCM += TestROCm_MDRange_a.o TestROCm_MDRange_b.o TestROCm_MDRange_c.o TestROCm_MDRange_d.o TestROCm_MDRange_e.o + OBJ_ROCM += TestROCm_MDRangeReduce_a.o TestROCm_MDRangeReduce_b.o TestROCm_MDRangeReduce_c.o TestROCm_MDRangeReduce_d.o TestROCm_MDRangeReduce_e.o + OBJ_ROCM += TestROCm_Reductions.o + OBJ_ROCM += TestROCm_Reducers_a.o TestROCm_Reducers_b.o TestROCm_Reducers_c.o TestROCm_Reducers_d.o + OBJ_ROCM += TestROCm_Scan.o + OBJ_ROCM += TestROCm_SharedAlloc.o + OBJ_ROCM += TestROCm_SubView_a.o + OBJ_ROCM += TestROCm_SubView_b.o + OBJ_ROCM += TestROCm_SubView_c01.o + OBJ_ROCM += TestROCm_SubView_c02.o + OBJ_ROCM += TestROCm_SubView_c03.o + OBJ_ROCM += TestROCm_SubView_c04.o + OBJ_ROCM += TestROCm_SubView_c05.o + OBJ_ROCM += TestROCm_SubView_c06.o + OBJ_ROCM += TestROCm_SubView_c07.o + OBJ_ROCM += TestROCm_SubView_c08.o + OBJ_ROCM += TestROCm_SubView_c09.o + OBJ_ROCM += TestROCm_SubView_c10.o + OBJ_ROCM += TestROCm_SubView_c11.o + OBJ_ROCM += TestROCm_SubView_c12.o + OBJ_ROCM += TestROCm_SubView_c13.o + OBJ_ROCM += TestROCm_Team.o + OBJ_ROCM += TestROCm_TeamReductionScan.o + OBJ_ROCM += TestROCm_TeamScratch.o TestROCm_TeamTeamSize.o + OBJ_ROCM += TestROCm_ViewAPI_a.o TestROCm_ViewAPI_b.o TestROCm_ViewAPI_c.o TestROCm_ViewAPI_d.o TestROCm_ViewAPI_e.o + OBJ_ROCM += TestROCm_DeepCopyAlignment.o + OBJ_ROCM += TestROCm_ViewMapping_a.o + OBJ_ROCM += TestROCm_ViewMapping_b.o + OBJ_ROCM += TestROCm_ViewMapping_subview.o + OBJ_ROCM += TestROCmHostPinned_ViewCopy.o TestROCmHostPinned_ViewAPI_a.o TestROCmHostPinned_ViewAPI_b.o TestROCmHostPinned_ViewAPI_c.o TestROCmHostPinned_ViewAPI_d.o TestROCmHostPinned_ViewAPI_e.o + OBJ_ROCM += TestROCmHostPinned_View_64bit.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_a.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_b.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_subview.o + OBJ_ROCM += TestROCm_ViewOfClass.o + OBJ_ROCM += TestROCm_Spaces.o + OBJ_ROCM += TestROCm_Crs.o + + TARGETS += KokkosCore_UnitTest_ROCm + TEST_TARGETS += test-rocm endif ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) - - OBJ_THREADS = UnitTestMainInit.o gtest-all.o - OBJ_THREADS += TestThreads_Init.o - OBJ_THREADS += TestThreads_SharedAlloc.o - OBJ_THREADS += TestThreads_RangePolicy.o + OBJ_THREADS = UnitTestMainInit.o gtest-all.o + OBJ_THREADS += TestThreads_Init.o + OBJ_THREADS += TestThreads_SharedAlloc.o + OBJ_THREADS += TestThreads_RangePolicy.o OBJ_THREADS += TestThreads_View_64bit.o - OBJ_THREADS += TestThreads_ViewAPI_a.o TestThreads_ViewAPI_b.o TestThreads_ViewAPI_c.o TestThreads_ViewAPI_d.o TestThreads_ViewAPI_e.o - OBJ_THREADS += TestThreads_ViewMapping_a.o TestThreads_ViewMapping_b.o TestThreads_ViewMapping_subview.o TestThreads_ViewLayoutStrideAssignment.o - OBJ_THREADS += TestThreads_ViewOfClass.o - OBJ_THREADS += TestThreads_SubView_a.o TestThreads_SubView_b.o - OBJ_THREADS += TestThreads_SubView_c01.o TestThreads_SubView_c02.o TestThreads_SubView_c03.o - OBJ_THREADS += TestThreads_SubView_c04.o TestThreads_SubView_c05.o TestThreads_SubView_c06.o - OBJ_THREADS += TestThreads_SubView_c07.o TestThreads_SubView_c08.o TestThreads_SubView_c09.o - OBJ_THREADS += TestThreads_SubView_c10.o TestThreads_SubView_c11.o TestThreads_SubView_c12.o - OBJ_THREADS += TestThreads_Reductions.o TestThreads_Scan.o - OBJ_THREADS += TestThreads_Reductions_DeviceView.o - OBJ_THREADS += TestThreads_Reducers_a.o TestThreads_Reducers_b.o TestThreads_Reducers_c.o TestThreads_Reducers_d.o - OBJ_THREADS += TestThreads_Complex.o - OBJ_THREADS += TestThreads_AtomicOperations_int.o TestThreads_AtomicOperations_unsignedint.o TestThreads_AtomicOperations_longint.o - OBJ_THREADS += TestThreads_AtomicOperations_unsignedlongint.o TestThreads_AtomicOperations_longlongint.o TestThreads_AtomicOperations_double.o TestThreads_AtomicOperations_float.o - OBJ_THREADS += TestThreads_AtomicViews.o TestThreads_Atomics.o - OBJ_THREADS += TestThreads_Team.o TestThreads_TeamScratch.o TestThreads_TeamTeamSize.o - OBJ_THREADS += TestThreads_TeamReductionScan.o - OBJ_THREADS += TestThreads_Other.o - OBJ_THREADS += TestThreads_MDRange_a.o TestThreads_MDRange_b.o TestThreads_MDRange_c.o TestThreads_MDRange_d.o TestThreads_MDRange_e.o + OBJ_THREADS += TestThreads_ViewAPI_a.o TestThreads_ViewAPI_b.o TestThreads_ViewAPI_c.o TestThreads_ViewAPI_d.o TestThreads_ViewAPI_e.o + OBJ_THREADS += TestThreads_DeepCopyAlignment.o + OBJ_THREADS += TestThreads_ViewMapping_a.o TestThreads_ViewMapping_b.o TestThreads_ViewMapping_subview.o TestThreads_ViewLayoutStrideAssignment.o + OBJ_THREADS += TestThreads_ViewOfClass.o + OBJ_THREADS += TestThreads_SubView_a.o TestThreads_SubView_b.o + OBJ_THREADS += TestThreads_SubView_c01.o TestThreads_SubView_c02.o TestThreads_SubView_c03.o + OBJ_THREADS += TestThreads_SubView_c04.o TestThreads_SubView_c05.o TestThreads_SubView_c06.o + OBJ_THREADS += TestThreads_SubView_c07.o TestThreads_SubView_c08.o TestThreads_SubView_c09.o + OBJ_THREADS += TestThreads_SubView_c10.o TestThreads_SubView_c11.o TestThreads_SubView_c12.o + OBJ_THREADS += TestThreads_Reductions.o TestThreads_Scan.o + OBJ_THREADS += TestThreads_Reductions_DeviceView.o + OBJ_THREADS += TestThreads_Reducers_a.o TestThreads_Reducers_b.o TestThreads_Reducers_c.o TestThreads_Reducers_d.o + OBJ_THREADS += TestThreads_Complex.o + OBJ_THREADS += TestThreads_AtomicOperations_int.o TestThreads_AtomicOperations_unsignedint.o TestThreads_AtomicOperations_longint.o + OBJ_THREADS += TestThreads_AtomicOperations_unsignedlongint.o TestThreads_AtomicOperations_longlongint.o TestThreads_AtomicOperations_double.o TestThreads_AtomicOperations_float.o + OBJ_THREADS += TestThreads_AtomicOperations_complexfloat.o TestThreads_AtomicOperations_complexdouble.o + OBJ_THREADS += TestThreads_AtomicViews.o TestThreads_Atomics.o + OBJ_THREADS += TestThreads_Team.o TestThreads_TeamScratch.o TestThreads_TeamTeamSize.o + OBJ_THREADS += TestThreads_TeamReductionScan.o + OBJ_THREADS += TestThreads_TeamVectorRange.o + OBJ_THREADS += TestThreads_Other.o + OBJ_THREADS += TestThreads_MDRange_a.o TestThreads_MDRange_b.o TestThreads_MDRange_c.o TestThreads_MDRange_d.o TestThreads_MDRange_e.o + OBJ_THREADS += TestThreads_LocalDeepCopy.o - TARGETS += KokkosCore_UnitTest_Threads + TARGETS += KokkosCore_UnitTest_Threads - TEST_TARGETS += test-threads + TEST_TARGETS += test-threads endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) - OBJ_OPENMP = UnitTestMainInit.o gtest-all.o - OBJ_OPENMP += TestOpenMP_Init.o - OBJ_OPENMP += TestOpenMP_SharedAlloc.o - OBJ_OPENMP += TestOpenMP_RangePolicy.o + OBJ_OPENMP = UnitTestMainInit.o gtest-all.o + OBJ_OPENMP += TestOpenMP_Init.o + OBJ_OPENMP += TestOpenMP_SharedAlloc.o + OBJ_OPENMP += TestOpenMP_RangePolicy.o OBJ_OPENMP += TestOpenMP_View_64bit.o - OBJ_OPENMP += TestOpenMP_ViewAPI_a.o TestOpenMP_ViewAPI_b.o TestOpenMP_ViewAPI_c.o TestOpenMP_ViewAPI_d.o TestOpenMP_ViewAPI_e.o - OBJ_OPENMP += TestOpenMP_ViewMapping_a.o TestOpenMP_ViewMapping_b.o TestOpenMP_ViewMapping_subview.o TestOpenMP_ViewLayoutStrideAssignment.o - OBJ_OPENMP += TestOpenMP_ViewOfClass.o - OBJ_OPENMP += TestOpenMP_SubView_a.o TestOpenMP_SubView_b.o - OBJ_OPENMP += TestOpenMP_SubView_c01.o TestOpenMP_SubView_c02.o TestOpenMP_SubView_c03.o - OBJ_OPENMP += TestOpenMP_SubView_c04.o TestOpenMP_SubView_c05.o TestOpenMP_SubView_c06.o - OBJ_OPENMP += TestOpenMP_SubView_c07.o TestOpenMP_SubView_c08.o TestOpenMP_SubView_c09.o - OBJ_OPENMP += TestOpenMP_SubView_c10.o TestOpenMP_SubView_c11.o TestOpenMP_SubView_c12.o - OBJ_OPENMP += TestOpenMP_SubView_c13.o - OBJ_OPENMP += TestOpenMP_Reductions.o TestOpenMP_Scan.o - OBJ_OPENMP += TestOpenMP_Reductions_DeviceView.o - OBJ_OPENMP += TestOpenMP_Reducers_a.o TestOpenMP_Reducers_b.o TestOpenMP_Reducers_c.o TestOpenMP_Reducers_d.o - OBJ_OPENMP += TestOpenMP_Complex.o - OBJ_OPENMP += TestOpenMP_AtomicOperations_int.o TestOpenMP_AtomicOperations_unsignedint.o TestOpenMP_AtomicOperations_longint.o - OBJ_OPENMP += TestOpenMP_AtomicOperations_unsignedlongint.o TestOpenMP_AtomicOperations_longlongint.o TestOpenMP_AtomicOperations_double.o TestOpenMP_AtomicOperations_float.o - OBJ_OPENMP += TestOpenMP_AtomicViews.o TestOpenMP_Atomics.o - OBJ_OPENMP += TestOpenMP_Team.o TestOpenMP_TeamScratch.o - OBJ_OPENMP += TestOpenMP_TeamReductionScan.o TestOpenMP_TeamTeamSize.o - OBJ_OPENMP += TestOpenMP_Other.o - OBJ_OPENMP += TestOpenMP_MDRange_a.o TestOpenMP_MDRange_b.o TestOpenMP_MDRange_c.o TestOpenMP_MDRange_d.o TestOpenMP_MDRange_e.o - OBJ_OPENMP += TestOpenMP_Crs.o - OBJ_OPENMP += TestOpenMP_Task.o TestOpenMP_WorkGraph.o - OBJ_OPENMP += TestOpenMP_UniqueToken.o - - TARGETS += KokkosCore_UnitTest_OpenMP + OBJ_OPENMP += TestOpenMP_ViewAPI_a.o TestOpenMP_ViewAPI_b.o TestOpenMP_ViewAPI_c.o TestOpenMP_ViewAPI_d.o TestOpenMP_ViewAPI_e.o + OBJ_OPENMP += TestOpenMP_DeepCopyAlignment.o + OBJ_OPENMP += TestOpenMP_ViewMapping_a.o TestOpenMP_ViewMapping_b.o TestOpenMP_ViewMapping_subview.o TestOpenMP_ViewLayoutStrideAssignment.o + OBJ_OPENMP += TestOpenMP_ViewOfClass.o + OBJ_OPENMP += TestOpenMP_SubView_a.o TestOpenMP_SubView_b.o + OBJ_OPENMP += TestOpenMP_SubView_c01.o TestOpenMP_SubView_c02.o TestOpenMP_SubView_c03.o + OBJ_OPENMP += TestOpenMP_SubView_c04.o TestOpenMP_SubView_c05.o TestOpenMP_SubView_c06.o + OBJ_OPENMP += TestOpenMP_SubView_c07.o TestOpenMP_SubView_c08.o TestOpenMP_SubView_c09.o + OBJ_OPENMP += TestOpenMP_SubView_c10.o TestOpenMP_SubView_c11.o TestOpenMP_SubView_c12.o + OBJ_OPENMP += TestOpenMP_SubView_c13.o + OBJ_OPENMP += TestOpenMP_Reductions.o TestOpenMP_Scan.o + OBJ_OPENMP += TestOpenMP_Reductions_DeviceView.o + OBJ_OPENMP += TestOpenMP_Reducers_a.o TestOpenMP_Reducers_b.o TestOpenMP_Reducers_c.o TestOpenMP_Reducers_d.o + OBJ_OPENMP += TestOpenMP_Complex.o + OBJ_OPENMP += TestOpenMP_AtomicOperations_int.o TestOpenMP_AtomicOperations_unsignedint.o TestOpenMP_AtomicOperations_longint.o + OBJ_OPENMP += TestOpenMP_AtomicOperations_unsignedlongint.o TestOpenMP_AtomicOperations_longlongint.o TestOpenMP_AtomicOperations_double.o TestOpenMP_AtomicOperations_float.o + OBJ_OPENMP += TestOpenMP_AtomicOperations_complexfloat.o TestOpenMP_AtomicOperations_complexdouble.o + OBJ_OPENMP += TestOpenMP_AtomicViews.o TestOpenMP_Atomics.o + OBJ_OPENMP += TestOpenMP_Team.o TestOpenMP_TeamScratch.o + OBJ_OPENMP += TestOpenMP_TeamReductionScan.o TestOpenMP_TeamTeamSize.o + OBJ_OPENMP += TestOpenMP_TeamVectorRange.o + OBJ_OPENMP += TestOpenMP_Other.o + OBJ_OPENMP += TestOpenMP_MDRange_a.o TestOpenMP_MDRange_b.o TestOpenMP_MDRange_c.o TestOpenMP_MDRange_d.o TestOpenMP_MDRange_e.o + OBJ_OPENMP += TestOpenMP_Crs.o + OBJ_OPENMP += TestOpenMP_Task.o TestOpenMP_WorkGraph.o + OBJ_OPENMP += TestOpenMP_UniqueToken.o + OBJ_OPENMP += TestOpenMP_LocalDeepCopy.o + + TARGETS += KokkosCore_UnitTest_OpenMP TARGETS += KokkosCore_UnitTest_OpenMPInterOp - TEST_TARGETS += test-openmp + TEST_TARGETS += test-openmp endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) - OBJ_OPENMPTARGET = UnitTestMainInit.o gtest-all.o - OBJ_OPENMPTARGET += TestOpenMPTarget_Init.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SharedAlloc.o - OBJ_OPENMPTARGET += TestOpenMPTarget_RangePolicy.o - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_a.o TestOpenMPTarget_ViewAPI_b.o TestOpenMPTarget_ViewAPI_c.o TestOpenMPTarget_ViewAPI_d.o TestOpenMPTarget_ViewAPI_e.o #Some commented out code - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_a.o - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_b.o + OBJ_OPENMPTARGET = UnitTestMainInit.o gtest-all.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Init.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SharedAlloc.o + OBJ_OPENMPTARGET += TestOpenMPTarget_RangePolicy.o + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_a.o TestOpenMPTarget_ViewAPI_b.o TestOpenMPTarget_ViewAPI_c.o TestOpenMPTarget_ViewAPI_d.o TestOpenMPTarget_ViewAPI_e.o #Some commented out code + OBJ_OPENMPTARGET += TestOpenMPTarget_DeepCopyAlignment.o + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_a.o + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_b.o OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_subview.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewOfClass.o - OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_a.o TestOpenMPTarget_SubView_b.o - #The following subview tests need something like UVM: - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c01.o TestOpenMPTarget_SubView_c02.o TestOpenMPTarget_SubView_c03.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c04.o TestOpenMPTarget_SubView_c05.o TestOpenMPTarget_SubView_c06.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c07.o TestOpenMPTarget_SubView_c08.o TestOpenMPTarget_SubView_c09.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c10.o TestOpenMPTarget_SubView_c11.o TestOpenMPTarget_SubView_c12.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_Reductions.o # Need custom reductions - #OBJ_OPENMPTARGET += TestOpenMPTarget_Reducers_a.o TestOpenMPTarget_Reducers_b.o TestOpenMPTarget_Reducers_c.o TestOpenMPTarget_Reducers_d.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_Scan.o - OBJ_OPENMPTARGET += TestOpenMPTarget_Complex.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_int.o TestOpenMPTarget_AtomicOperations_unsignedint.o TestOpenMPTarget_AtomicOperations_longint.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_unsignedlongint.o TestOpenMPTarget_AtomicOperations_longlongint.o TestOpenMPTarget_AtomicOperations_double.o TestOpenMPTarget_AtomicOperations_float.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicViews.o - OBJ_OPENMPTARGET += TestOpenMPTarget_Atomics.o # Commented Out Arbitrary Type Atomics - #OBJ_OPENMPTARGET += TestOpenMPTarget_Team.o # There is still a static function in this - #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamScratch.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamReductionScan.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_Other.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_MDRange_a.o TestOpenMPTarget_MDRange_b.o TestOpenMPTarget_MDRange_c.o TestOpenMPTarget_MDRange_d.o TestOpenMPTarget_MDRange_d.e - #OBJ_OPENMPTARGET += TestOpenMPTarget_Task.o - - TARGETS += KokkosCore_UnitTest_OpenMPTarget + #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewOfClass.o + OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_a.o TestOpenMPTarget_SubView_b.o + #The following subview tests need something like UVM: + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c01.o TestOpenMPTarget_SubView_c02.o TestOpenMPTarget_SubView_c03.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c04.o TestOpenMPTarget_SubView_c05.o TestOpenMPTarget_SubView_c06.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c07.o TestOpenMPTarget_SubView_c08.o TestOpenMPTarget_SubView_c09.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c10.o TestOpenMPTarget_SubView_c11.o TestOpenMPTarget_SubView_c12.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_Reductions.o # Need custom reductions + #OBJ_OPENMPTARGET += TestOpenMPTarget_Reducers_a.o TestOpenMPTarget_Reducers_b.o TestOpenMPTarget_Reducers_c.o TestOpenMPTarget_Reducers_d.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_Scan.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Complex.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_int.o TestOpenMPTarget_AtomicOperations_unsignedint.o TestOpenMPTarget_AtomicOperations_longint.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_unsignedlongint.o TestOpenMPTarget_AtomicOperations_longlongint.o TestOpenMPTarget_AtomicOperations_double.o TestOpenMPTarget_AtomicOperations_float.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_complexfloat.o TestOpenMPTarget_AtomicOperations_complexdouble.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicViews.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Atomics.o # Commented Out Arbitrary Type Atomics + #OBJ_OPENMPTARGET += TestOpenMPTarget_Team.o # There is still a static function in this + #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamScratch.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamReductionScan.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_Other.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_MDRange_a.o TestOpenMPTarget_MDRange_b.o TestOpenMPTarget_MDRange_c.o TestOpenMPTarget_MDRange_d.o TestOpenMPTarget_MDRange_d.e + #OBJ_OPENMPTARGET += TestOpenMPTarget_Task.o - TEST_TARGETS += test-openmptarget + TARGETS += KokkosCore_UnitTest_OpenMPTarget + TEST_TARGETS += test-openmptarget endif ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) - OBJ_QTHREADS = TestQthreads_Other.o TestQthreads_Reductions.o TestQthreads_Atomics.o TestQthreads_Team.o - OBJ_QTHREADS += TestQthreads_SubView_a.o TestQthreads_SubView_b.o - OBJ_QTHREADS += TestQthreads_SubView_c01.o TestQthreads_SubView_c02.o TestQthreads_SubView_c03.o - OBJ_QTHREADS += TestQthreads_SubView_c04.o TestQthreads_SubView_c05.o TestQthreads_SubView_c06.o - OBJ_QTHREADS += TestQthreads_SubView_c07.o TestQthreads_SubView_c08.o TestQthreads_SubView_c09.o - OBJ_QTHREADS += TestQthreads_SubView_c10.o TestQthreads_SubView_c11.o TestQthreads_SubView_c12.o - OBJ_QTHREADS += TestQthreads_ViewAPI_a.o TestQthreads_ViewAPI_b.o TestQthreads_ViewAPI_c.o TestQthreads_ViewAPI_d.o TestQthreads_ViewAPI_e.o UnitTestMain.o gtest-all.o - TARGETS += KokkosCore_UnitTest_Qthreads + OBJ_QTHREADS = TestQthreads_Other.o TestQthreads_Reductions.o TestQthreads_Atomics.o TestQthreads_Team.o + OBJ_QTHREADS += TestQthreads_SubView_a.o TestQthreads_SubView_b.o + OBJ_QTHREADS += TestQthreads_SubView_c01.o TestQthreads_SubView_c02.o TestQthreads_SubView_c03.o + OBJ_QTHREADS += TestQthreads_SubView_c04.o TestQthreads_SubView_c05.o TestQthreads_SubView_c06.o + OBJ_QTHREADS += TestQthreads_SubView_c07.o TestQthreads_SubView_c08.o TestQthreads_SubView_c09.o + OBJ_QTHREADS += TestQthreads_SubView_c10.o TestQthreads_SubView_c11.o TestQthreads_SubView_c12.o + OBJ_QTHREADS += TestQthreads_ViewAPI_a.o TestQthreads_ViewAPI_b.o TestQthreads_ViewAPI_c.o TestQthreads_ViewAPI_d.o TestQthreads_ViewAPI_e.o UnitTestMain.o gtest-all.o + TARGETS += KokkosCore_UnitTest_Qthreads - OBJ_QTHREADS2 = UnitTestMainInit.o gtest-all.o - OBJ_QTHREADS2 += TestQthreads_Complex.o - TARGETS += KokkosCore_UnitTest_Qthreads2 + OBJ_QTHREADS2 = UnitTestMainInit.o gtest-all.o + OBJ_QTHREADS2 += TestQthreads_Complex.o + TARGETS += KokkosCore_UnitTest_Qthreads2 - TEST_TARGETS += test-qthreads + TEST_TARGETS += test-qthreads +endif + +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = UnitTestMainInit.o gtest-all.o + OBJ_HPX += TestHPX_Init.o + OBJ_HPX += TestHPX_SharedAlloc.o + OBJ_HPX += TestHPX_RangePolicy.o + OBJ_HPX += TestHPX_View_64bit.o + OBJ_HPX += TestHPX_ViewAPI_a.o TestHPX_ViewAPI_b.o TestHPX_ViewAPI_c.o TestHPX_ViewAPI_d.o TestHPX_ViewAPI_e.o + OBJ_HPX += TestHPX_ViewMapping_a.o TestHPX_ViewMapping_b.o TestHPX_ViewMapping_subview.o + OBJ_HPX += TestHPX_ViewOfClass.o + OBJ_HPX += TestHPX_SubView_a.o TestHPX_SubView_b.o + OBJ_HPX += TestHPX_SubView_c01.o TestHPX_SubView_c02.o TestHPX_SubView_c03.o + OBJ_HPX += TestHPX_SubView_c04.o TestHPX_SubView_c05.o TestHPX_SubView_c06.o + OBJ_HPX += TestHPX_SubView_c07.o TestHPX_SubView_c08.o TestHPX_SubView_c09.o + OBJ_HPX += TestHPX_SubView_c10.o TestHPX_SubView_c11.o TestHPX_SubView_c12.o + OBJ_HPX += TestHPX_SubView_c13.o + OBJ_HPX += TestHPX_Reductions.o + OBJ_HPX += TestHPX_Scan.o + OBJ_HPX += TestHPX_Reducers_a.o TestHPX_Reducers_b.o TestHPX_Reducers_c.o TestHPX_Reducers_d.o + OBJ_HPX += TestHPX_Complex.o + OBJ_HPX += TestHPX_AtomicOperations_int.o TestHPX_AtomicOperations_unsignedint.o TestHPX_AtomicOperations_longint.o + OBJ_HPX += TestHPX_AtomicOperations_unsignedlongint.o TestHPX_AtomicOperations_longlongint.o TestHPX_AtomicOperations_double.o TestHPX_AtomicOperations_float.o + OBJ_HPX += TestHPX_AtomicViews.o TestHPX_Atomics.o + OBJ_HPX += TestHPX_Team.o + OBJ_HPX += TestHPX_TeamVectorRange.o + OBJ_HPX += TestHPX_TeamScratch.o + OBJ_HPX += TestHPX_TeamReductionScan.o + OBJ_HPX += TestHPX_Other.o + OBJ_HPX += TestHPX_MDRange_a.o TestHPX_MDRange_b.o TestHPX_MDRange_c.o TestHPX_MDRange_d.o TestHPX_MDRange_e.o + OBJ_HPX += TestHPX_Crs.o + OBJ_HPX += TestHPX_Task.o + OBJ_HPX += TestHPX_WorkGraph.o + OBJ_HPX += TestHPX_UniqueToken.o + + TARGETS += KokkosCore_UnitTest_HPX + TARGETS += KokkosCore_UnitTest_HPXInterOp + + TEST_TARGETS += test-hpx endif ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) - OBJ_SERIAL = UnitTestMainInit.o gtest-all.o - OBJ_SERIAL += TestSerial_Init.o - OBJ_SERIAL += TestSerial_SharedAlloc.o - OBJ_SERIAL += TestSerial_RangePolicy.o - OBJ_SERIAL += TestSerial_View_64bit.o - OBJ_SERIAL += TestSerial_ViewAPI_a.o TestSerial_ViewAPI_b.o TestSerial_ViewAPI_c.o TestSerial_ViewAPI_d.o TestSerial_ViewAPI_e.o - OBJ_SERIAL += TestSerial_ViewMapping_a.o TestSerial_ViewMapping_b.o TestSerial_ViewMapping_subview.o TestSerial_ViewLayoutStrideAssignment.o - OBJ_SERIAL += TestSerial_ViewOfClass.o - OBJ_SERIAL += TestSerial_SubView_a.o TestSerial_SubView_b.o - OBJ_SERIAL += TestSerial_SubView_c01.o TestSerial_SubView_c02.o TestSerial_SubView_c03.o - OBJ_SERIAL += TestSerial_SubView_c04.o TestSerial_SubView_c05.o TestSerial_SubView_c06.o - OBJ_SERIAL += TestSerial_SubView_c07.o TestSerial_SubView_c08.o TestSerial_SubView_c09.o - OBJ_SERIAL += TestSerial_SubView_c10.o TestSerial_SubView_c11.o TestSerial_SubView_c12.o - OBJ_SERIAL += TestSerial_SubView_c13.o - OBJ_SERIAL += TestSerial_Reductions.o TestSerial_Scan.o - OBJ_SERIAL += TestSerial_Reductions_DeviceView.o - OBJ_SERIAL += TestSerial_Reducers_a.o TestSerial_Reducers_b.o TestSerial_Reducers_c.o TestSerial_Reducers_d.o - OBJ_SERIAL += TestSerial_Complex.o - OBJ_SERIAL += TestSerial_AtomicOperations_int.o TestSerial_AtomicOperations_unsignedint.o TestSerial_AtomicOperations_longint.o - OBJ_SERIAL += TestSerial_AtomicOperations_unsignedlongint.o TestSerial_AtomicOperations_longlongint.o TestSerial_AtomicOperations_double.o TestSerial_AtomicOperations_float.o - OBJ_SERIAL += TestSerial_AtomicViews.o TestSerial_Atomics.o - OBJ_SERIAL += TestSerial_Team.o TestSerial_TeamScratch.o - OBJ_SERIAL += TestSerial_TeamReductionScan.o TestSerial_TeamTeamSize.o - OBJ_SERIAL += TestSerial_Other.o - #HCC_WORKAROUND - ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) + OBJ_SERIAL = UnitTestMainInit.o gtest-all.o + OBJ_SERIAL += TestSerial_Init.o + OBJ_SERIAL += TestSerial_SharedAlloc.o + OBJ_SERIAL += TestSerial_RangePolicy.o + OBJ_SERIAL += TestSerial_View_64bit.o + OBJ_SERIAL += TestSerial_ViewAPI_a.o TestSerial_ViewAPI_b.o TestSerial_ViewAPI_c.o TestSerial_ViewAPI_d.o TestSerial_ViewAPI_e.o + OBJ_SERIAL += TestSerial_DeepCopyAlignment.o + OBJ_SERIAL += TestSerial_ViewMapping_a.o TestSerial_ViewMapping_b.o TestSerial_ViewMapping_subview.o TestSerial_ViewLayoutStrideAssignment.o + OBJ_SERIAL += TestSerial_ViewOfClass.o + OBJ_SERIAL += TestSerial_SubView_a.o TestSerial_SubView_b.o + OBJ_SERIAL += TestSerial_SubView_c01.o TestSerial_SubView_c02.o TestSerial_SubView_c03.o + OBJ_SERIAL += TestSerial_SubView_c04.o TestSerial_SubView_c05.o TestSerial_SubView_c06.o + OBJ_SERIAL += TestSerial_SubView_c07.o TestSerial_SubView_c08.o TestSerial_SubView_c09.o + OBJ_SERIAL += TestSerial_SubView_c10.o TestSerial_SubView_c11.o TestSerial_SubView_c12.o + OBJ_SERIAL += TestSerial_SubView_c13.o + OBJ_SERIAL += TestSerial_Reductions.o TestSerial_Scan.o + OBJ_SERIAL += TestSerial_Reductions_DeviceView.o + OBJ_SERIAL += TestSerial_Reducers_a.o TestSerial_Reducers_b.o TestSerial_Reducers_c.o TestSerial_Reducers_d.o + OBJ_SERIAL += TestSerial_Complex.o + OBJ_SERIAL += TestSerial_AtomicOperations_int.o TestSerial_AtomicOperations_unsignedint.o TestSerial_AtomicOperations_longint.o + OBJ_SERIAL += TestSerial_AtomicOperations_unsignedlongint.o TestSerial_AtomicOperations_longlongint.o TestSerial_AtomicOperations_double.o TestSerial_AtomicOperations_float.o + OBJ_SERIAL += TestSerial_AtomicOperations_complexfloat.o TestSerial_AtomicOperations_complexdouble.o + OBJ_SERIAL += TestSerial_AtomicViews.o TestSerial_Atomics.o + OBJ_SERIAL += TestSerial_Team.o TestSerial_TeamScratch.o + OBJ_SERIAL += TestSerial_TeamVectorRange.o + OBJ_SERIAL += TestSerial_TeamReductionScan.o TestSerial_TeamTeamSize.o + OBJ_SERIAL += TestSerial_Other.o + #HCC_WORKAROUND + ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) OBJ_SERIAL += TestSerial_MDRange_a.o TestSerial_MDRange_b.o TestSerial_MDRange_c.o TestSerial_MDRange_d.o TestSerial_MDRange_e.o - endif - OBJ_SERIAL += TestSerial_Crs.o - OBJ_SERIAL += TestSerial_Task.o TestSerial_WorkGraph.o - - TARGETS += KokkosCore_UnitTest_Serial + endif + OBJ_SERIAL += TestSerial_Crs.o + OBJ_SERIAL += TestSerial_Task.o TestSerial_WorkGraph.o + OBJ_SERIAL += TestSerial_LocalDeepCopy.o - TEST_TARGETS += test-serial + TARGETS += KokkosCore_UnitTest_Serial + + TEST_TARGETS += test-serial endif OBJ_HWLOC = TestHWLOC.o UnitTestMain.o gtest-all.o @@ -298,10 +356,10 @@ TEST_TARGETS += test-host-barrier OBJ_DEFAULT = UnitTestMainInit.o gtest-all.o ifneq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) - OBJ_DEFAULT += TestDefaultDeviceType.o - OBJ_DEFAULT += TestDefaultDeviceType_a1.o TestDefaultDeviceType_b1.o TestDefaultDeviceType_c1.o - OBJ_DEFAULT += TestDefaultDeviceType_a2.o TestDefaultDeviceType_b2.o TestDefaultDeviceType_c2.o - OBJ_DEFAULT += TestDefaultDeviceType_a3.o TestDefaultDeviceType_b3.o TestDefaultDeviceType_c3.o + OBJ_DEFAULT += TestDefaultDeviceType.o + OBJ_DEFAULT += TestDefaultDeviceType_a1.o TestDefaultDeviceType_b1.o TestDefaultDeviceType_c1.o + OBJ_DEFAULT += TestDefaultDeviceType_a2.o TestDefaultDeviceType_b2.o TestDefaultDeviceType_c2.o + OBJ_DEFAULT += TestDefaultDeviceType_a3.o TestDefaultDeviceType_b3.o TestDefaultDeviceType_c3.o OBJ_DEFAULT += TestDefaultDeviceType_d.o endif endif @@ -325,9 +383,11 @@ TEST_TARGETS += ${INITTESTS_TEST_TARGETS} KokkosCore_UnitTest_Cuda: $(OBJ_CUDA) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_CUDA) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Cuda -KokkosCore_UnitTest_CudaInterOp: UnitTestMain.o gtest-all.o TestCuda_InterOp.o - $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOp - +KokkosCore_UnitTest_CudaInterOpInit: UnitTestMain.o gtest-all.o TestCuda_InterOp_Init.o $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp_Init.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOpInit +KokkosCore_UnitTest_CudaInterOpStreams: UnitTestMain.o gtest-all.o TestCuda_InterOp_Streams.o $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp_Streams.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOpStreams + KokkosCore_UnitTest_ROCm: $(OBJ_ROCM) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_ROCM) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_ROCm @@ -337,7 +397,7 @@ KokkosCore_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosCore_UnitTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_OpenMP -KokkosCore_UnitTest_OpenMPInterOp: UnitTestMain.o gtest-all.o TestOpenMP_InterOp.o +KokkosCore_UnitTest_OpenMPInterOp: UnitTestMain.o gtest-all.o TestOpenMP_InterOp.o $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestOpenMP_InterOp.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_OpenMPInterOp KokkosCore_UnitTest_OpenMPTarget: $(OBJ_OPENMPTARGET) $(KOKKOS_LINK_DEPENDS) @@ -352,6 +412,12 @@ KokkosCore_UnitTest_Qthreads: $(OBJ_QTHREADS) $(KOKKOS_LINK_DEPENDS) KokkosCore_UnitTest_Qthreads2: $(OBJ_QTHREADS2) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_QTHREADS2) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Qthreads2 +KokkosCore_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HPX + +KokkosCore_UnitTest_HPXInterOp: UnitTestMain.o gtest-all.o TestHPX_InterOp.o $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestHPX_InterOp.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HPXInterOp + KokkosCore_UnitTest_HWLOC: $(OBJ_HWLOC) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_HWLOC) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HWLOC @@ -376,7 +442,8 @@ ${INITTESTS_TARGETS}: KokkosCore_UnitTest_DefaultDeviceTypeInit_%: TestDefaultDe test-cuda: KokkosCore_UnitTest_Cuda ./KokkosCore_UnitTest_Cuda - ./KokkosCore_UnitTest_CudaInterOp + ./KokkosCore_UnitTest_CudaInterOpInit + ./KokkosCore_UnitTest_CudaInterOpStreams test-rocm: KokkosCore_UnitTest_ROCm ./KokkosCore_UnitTest_ROCm @@ -398,6 +465,10 @@ test-qthreads: KokkosCore_UnitTest_Qthreads KokkosCore_UnitTest_Qthreads2 ./KokkosCore_UnitTest_Qthreads ./KokkosCore_UnitTest_Qthreads2 +test-hpx: KokkosCore_UnitTest_HPX + ./KokkosCore_UnitTest_HPX + ./KokkosCore_UnitTest_HPXInterOp + test-hwloc: KokkosCore_UnitTest_HWLOC ./KokkosCore_UnitTest_HWLOC diff --git a/lib/kokkos/core/unit_test/TestAtomic.hpp b/lib/kokkos/core/unit_test/TestAtomic.hpp index 58b6325115..ee93d53470 100644 --- a/lib/kokkos/core/unit_test/TestAtomic.hpp +++ b/lib/kokkos/core/unit_test/TestAtomic.hpp @@ -211,13 +211,13 @@ T AddLoop( int loop ) { f_zero.data = data; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); struct AddFunctor< T, execution_space > f_add; f_add.data = data; Kokkos::parallel_for( loop, f_add ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -226,7 +226,7 @@ T AddLoop( int loop ) { f_add_red.data = data; int dummy_result; Kokkos::parallel_reduce( loop, f_add_red , dummy_result ); - execution_space::fence(); + execution_space().fence(); return val; } @@ -298,12 +298,12 @@ T CASLoop( int loop ) { f_zero.data = data; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); struct CASFunctor< T, execution_space > f_cas; f_cas.data = data; Kokkos::parallel_for( loop, f_cas ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -312,7 +312,7 @@ T CASLoop( int loop ) { f_cas_red.data = data; int dummy_result; Kokkos::parallel_reduce( loop, f_cas_red , dummy_result ); - execution_space::fence(); + execution_space().fence(); return val; } @@ -381,20 +381,20 @@ T ExchLoop( int loop ) { f_zero.data = data; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); typename ZeroFunctor< T, execution_space >::type data2( "Data" ); typename ZeroFunctor< T, execution_space >::h_type h_data2( "HData" ); f_zero.data = data2; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); struct ExchFunctor< T, execution_space > f_exch; f_exch.data = data; f_exch.data2 = data2; Kokkos::parallel_for( loop, f_exch ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); Kokkos::deep_copy( h_data2, data2 ); @@ -405,7 +405,7 @@ T ExchLoop( int loop ) { f_exch_red.data2 = data2; int dummy_result; Kokkos::parallel_reduce( loop, f_exch_red , dummy_result ); - execution_space::fence(); + execution_space().fence(); return val; } diff --git a/lib/kokkos/core/unit_test/TestAtomicOperations.hpp b/lib/kokkos/core/unit_test/TestAtomicOperations.hpp index d068c18d87..e043737e42 100644 --- a/lib/kokkos/core/unit_test/TestAtomicOperations.hpp +++ b/lib/kokkos/core/unit_test/TestAtomicOperations.hpp @@ -113,13 +113,13 @@ T MaxAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct MaxFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -191,13 +191,13 @@ T MinAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct MinFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -268,13 +268,13 @@ T IncAtomic( T i0 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct IncFunctor< T, execution_space > f( i0 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -345,13 +345,13 @@ T DecAtomic( T i0 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct DecFunctor< T, execution_space > f( i0 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -423,13 +423,13 @@ T MulAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct MulFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -501,13 +501,13 @@ T DivAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct DivFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -536,7 +536,9 @@ bool DivAtomicTest( T i0, T i1 ) bool passed = true; - if ( (resSerial-res)*(resSerial-res) > 1e-10 ) { + using std::abs; + using Kokkos::abs; + if ( abs( (resSerial-res) * 1.) > 1e-5 ) { passed = false; std::cout << "Loop<" @@ -579,13 +581,13 @@ T ModAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct ModFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -657,13 +659,13 @@ T AndAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct AndFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -735,13 +737,13 @@ T OrAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct OrFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -813,13 +815,13 @@ T XorAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct XorFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -891,13 +893,13 @@ T LShiftAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct LShiftFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -969,13 +971,13 @@ T RShiftAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct RShiftFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); diff --git a/lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp b/lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp new file mode 100644 index 0000000000..a8474d8952 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +namespace Test { +TEST_F( TEST_CATEGORY , atomic_operations_complexdouble ) +{ + const int start = 1; // Avoid zero for division. + const int end = 11; + for ( int i = start; i < end; ++i ) + { + ASSERT_TRUE( ( TestAtomicOperations::MulAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + ASSERT_TRUE( ( TestAtomicOperations::DivAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + } +} +} diff --git a/lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp b/lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp new file mode 100644 index 0000000000..961418e675 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +namespace Test { +TEST_F( TEST_CATEGORY , atomic_operations_complexfloat ) +{ + const int start = 1; // Avoid zero for division. + const int end = 11; + for ( int i = start; i < end; ++i ) + { + ASSERT_TRUE( ( TestAtomicOperations::MulAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + ASSERT_TRUE( ( TestAtomicOperations::DivAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + } +} +} diff --git a/lib/kokkos/core/unit_test/TestCXX11.hpp b/lib/kokkos/core/unit_test/TestCXX11.hpp index 8a158e2667..542b4a1912 100644 --- a/lib/kokkos/core/unit_test/TestCXX11.hpp +++ b/lib/kokkos/core/unit_test/TestCXX11.hpp @@ -235,6 +235,7 @@ double ReduceTestFunctor() { else { Kokkos::parallel_reduce( policy_type( 25, Kokkos::AUTO ), FunctorReduceTest< DeviceType >( a ), unmanaged_result( & result ) ); } + Kokkos::fence(); return result; } @@ -281,6 +282,7 @@ double ReduceTestLambda() { } }, unmanaged_result( & result ) ); } + Kokkos::fence(); return result; } diff --git a/lib/kokkos/core/unit_test/TestCompilerMacros.hpp b/lib/kokkos/core/unit_test/TestCompilerMacros.hpp index e6b5c48d3d..07c332a9ae 100644 --- a/lib/kokkos/core/unit_test/TestCompilerMacros.hpp +++ b/lib/kokkos/core/unit_test/TestCompilerMacros.hpp @@ -102,7 +102,7 @@ bool Test() { AddFunctor< DeviceType > f( a, b ); Kokkos::parallel_for( 1024, f ); - DeviceType::fence(); + DeviceType().fence(); return true; } diff --git a/lib/kokkos/core/unit_test/TestDeepCopy.hpp b/lib/kokkos/core/unit_test/TestDeepCopy.hpp new file mode 100644 index 0000000000..aebf263290 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestDeepCopy.hpp @@ -0,0 +1,167 @@ +#include + +namespace Test { + +namespace Impl { +template +struct TestDeepCopy { + + typedef Kokkos::View a_base_t; + typedef Kokkos::View b_base_t; + typedef Kokkos::View a_char_t; + typedef Kokkos::View b_char_t; + + typedef Kokkos::RangePolicy policyA_t; + typedef Kokkos::RangePolicy policyB_t; + + static void reset_a_copy_and_b(Kokkos::View a_char_copy, Kokkos::View b_char) { + const int N = b_char.extent(0); + Kokkos::parallel_for("TestDeepCopy: FillA_copy",policyA_t(0,N), KOKKOS_LAMBDA (const int& i) { + a_char_copy(i) = char(0); + }); + Kokkos::parallel_for("TestDeepCopy: FillB",policyB_t(0,N), KOKKOS_LAMBDA (const int& i) { + b_char(i) = char(0); + }); + } + + static int compare_equal(Kokkos::View a_char_copy, Kokkos::View a_char) { + const int N = a_char.extent(0); + int errors; + Kokkos::parallel_reduce("TestDeepCopy: FillA_copy",policyA_t(0,N), KOKKOS_LAMBDA (const int& i, int& lsum) { + if(a_char_copy(i) != a_char(i)) lsum++; + },errors); + return errors; + } + + static void run_test(int num_bytes) { + a_base_t a_base("test_space_to_space",(num_bytes+128)/8); + a_base_t a_base_copy("test_space_to_space",(num_bytes+128)/8); + Kokkos::View b_base("test_space_to_space",(num_bytes+128)/8); + + Kokkos::View a_char((char*) a_base.data(),a_base.extent(0)*8); + Kokkos::View a_char_copy((char*) a_base_copy.data(),a_base.extent(0)*8); + Kokkos::View b_char((char*) b_base.data(),b_base.extent(0)*8); + + Kokkos::parallel_for("TestDeepCopy: FillA",policyA_t(0,a_char.extent(0)), KOKKOS_LAMBDA (const int& i) { + a_char(i) = static_cast(i%97)+1; + }); + + reset_a_copy_and_b(a_char_copy, b_char); + + { + int check = compare_equal(a_char_copy,a_char); + ASSERT_EQ( check, a_char.extent(0) ); + } + + // (a.data()%8, (a.data()+a.extent(0))%8, b.data()%8, (b.data()+b.extent(0))%8 + // (0,0,0,0) + { + int a_begin = 0; + int a_end = 0; + int b_begin = 0; + int b_end = 0; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 0; + int a_end = 5; + int b_begin = 0; + int b_end = 5; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 3; + int a_end = 0; + int b_begin = 3; + int b_end = 0; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 3; + int a_end = 6; + int b_begin = 3; + int b_end = 6; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 5; + int a_end = 4; + int b_begin = 3; + int b_end = 6; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 0; + int a_end = 8; + int b_begin = 2; + int b_end = 6; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 2; + int a_end = 6; + int b_begin = 0; + int b_end = 8; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + } +}; +} + +TEST_F( TEST_CATEGORY, deep_copy_alignment ) +{ + { Impl::TestDeepCopy< TEST_EXECSPACE::memory_space , TEST_EXECSPACE::memory_space >::run_test( 100000 ); } + { Impl::TestDeepCopy< Kokkos::HostSpace , TEST_EXECSPACE::memory_space >::run_test( 100000 ); } + { Impl::TestDeepCopy< TEST_EXECSPACE::memory_space , Kokkos::HostSpace >::run_test( 100000 ); } +} + +} diff --git a/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp b/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp index 1e1418fcbf..1261948f87 100644 --- a/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp +++ b/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp @@ -222,6 +222,14 @@ void check_correct_initialization( const Kokkos::InitArguments & argstruct ) { expected_nthreads = 1; } #endif + +#ifdef KOKKOS_ENABLE_HPX + // HPX uses all cores on machine by default. Skip this test. + if ( std::is_same< Kokkos::DefaultExecutionSpace, Kokkos::Experimental::HPX >::value || + std::is_same< Kokkos::DefaultHostExecutionSpace, Kokkos::Experimental::HPX >::value ) { + return; + } +#endif } int expected_numa = argstruct.num_numa; diff --git a/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp b/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp new file mode 100644 index 0000000000..31bda530a5 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp @@ -0,0 +1,904 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include +#include +#include + +#include + +namespace Test { + + template + void impl_test_local_deepcopy_teampolicy_rank_1 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, lid, Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, 1, lid, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_2 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_3 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_4 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_5 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_6 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_7 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + Kokkos::deep_copy( A, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_1 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, i, Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, 1, i, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, 1, i, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_2 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_3 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_4 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_5 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_6 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_7 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + Kokkos::deep_copy( A, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i ViewType; + + { //Rank-1 + impl_test_local_deepcopy_teampolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_teampolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_teampolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_teampolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_teampolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_teampolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_teampolicy_rank_7(8); + } +} +//------------------------------------------------------------------------------------------------------------- +TEST_F( TEST_CATEGORY , local_deepcopy_rangepolicy_layoutleft ) +{ + typedef TEST_EXECSPACE ExecSpace; + typedef Kokkos::View ViewType; + + { //Rank-1 + impl_test_local_deepcopy_rangepolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_rangepolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_rangepolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_rangepolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_rangepolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_rangepolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_rangepolicy_rank_7(8); + } +} +//------------------------------------------------------------------------------------------------------------- +TEST_F( TEST_CATEGORY , local_deepcopy_teampolicy_layoutright ) +{ + typedef TEST_EXECSPACE ExecSpace; + typedef Kokkos::View ViewType; + + { //Rank-1 + impl_test_local_deepcopy_teampolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_teampolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_teampolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_teampolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_teampolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_teampolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_teampolicy_rank_7(8); + } +} +//------------------------------------------------------------------------------------------------------------- +TEST_F( TEST_CATEGORY , local_deepcopy_rangepolicy_layoutright ) +{ + typedef TEST_EXECSPACE ExecSpace; + typedef Kokkos::View ViewType; + + { //Rank-1 + impl_test_local_deepcopy_rangepolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_rangepolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_rangepolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_rangepolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_rangepolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_rangepolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_rangepolicy_rank_7(8); + } +} +#endif +#endif +} diff --git a/lib/kokkos/core/unit_test/TestMDRange.hpp b/lib/kokkos/core/unit_test/TestMDRange.hpp index a382a20700..cea89a4872 100644 --- a/lib/kokkos/core/unit_test/TestMDRange.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange.hpp @@ -351,6 +351,7 @@ struct TestMDRange_2D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 ); @@ -931,6 +932,7 @@ struct TestMDRange_3D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 ); @@ -1502,6 +1504,7 @@ struct TestMDRange_4D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 ); @@ -2089,6 +2092,7 @@ struct TestMDRange_5D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 ); @@ -2607,6 +2611,7 @@ struct TestMDRange_6D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 ); diff --git a/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp b/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp index efbb32e387..be744a7712 100644 --- a/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp +++ b/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp @@ -476,6 +476,9 @@ private: void test_run_time_parameters_type() { int league_size = 131; int team_size = 4 < policy_t::execution_space::concurrency() ? 4 : policy_t::execution_space::concurrency(); +#ifdef KOKKOS_ENABLE_HPX + team_size = 1; +#endif int chunk_size = 4; int per_team_scratch = 1024; int per_thread_scratch = 16; diff --git a/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp b/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp index fe947fe14e..293cc0ca59 100644 --- a/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp +++ b/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp @@ -453,15 +453,18 @@ struct TestReduceCombinatoricalInstantiation { result_view() = 0; CallParallelReduce( args..., result_view ); + Kokkos::fence(); ASSERT_EQ( expected_result, result_view() ); value = 0; CallParallelReduce( args..., Kokkos::View< double, Kokkos::HostSpace, Kokkos::MemoryTraits >( &value ) ); + Kokkos::fence(); ASSERT_EQ( expected_result, value ); result_view() = 0; const Kokkos::View< double, Kokkos::HostSpace, Kokkos::MemoryTraits > result_view_const_um = result_view; CallParallelReduce( args..., result_view_const_um ); + Kokkos::fence(); ASSERT_EQ( expected_result, result_view_const_um() ); value = 0; @@ -526,18 +529,21 @@ struct TestReduceCombinatoricalInstantiation { h_r() = 0; Kokkos::deep_copy( result_view, h_r ); CallParallelReduce( args..., Test::ReduceCombinatorical::FunctorScalarFinal< ISTEAM >( result_view ) ); + Kokkos::fence(); Kokkos::deep_copy( h_r, result_view ); ASSERT_EQ( expected_result, h_r() ); h_r() = 0; Kokkos::deep_copy( result_view, h_r ); CallParallelReduce( args..., Test::ReduceCombinatorical::FunctorScalarJoinFinal< ISTEAM >( result_view ) ); + Kokkos::fence(); Kokkos::deep_copy( h_r, result_view ); ASSERT_EQ( expected_result, h_r() ); h_r() = 0; Kokkos::deep_copy( result_view, h_r ); CallParallelReduce( args..., Test::ReduceCombinatorical::FunctorScalarJoinFinalInit< ISTEAM >( result_view ) ); + Kokkos::fence(); Kokkos::deep_copy( h_r, result_view ); ASSERT_EQ( expected_result, h_r() ); } diff --git a/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp b/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp index 4f65166e37..d55c5449bc 100644 --- a/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp +++ b/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp @@ -30,7 +30,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor TestIsAsynchFunctor(atomic_test)); double time0 = timer.seconds(); timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence0 = timer.seconds(); Kokkos::deep_copy(result,0); timer.reset(); @@ -42,7 +42,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor double time1 = timer.seconds(); // Check whether it was asyncronous timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence1 = timer.seconds(); Kokkos::deep_copy(reducer_result,result); Kokkos::deep_copy(result,0); @@ -55,7 +55,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor double time2 = timer.seconds(); // Check whether it was asyncronous timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence2 = timer.seconds(); Kokkos::deep_copy(view_result,result); Kokkos::deep_copy(result,0); @@ -69,7 +69,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor // Check whether it was asyncronous timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence3 = timer.seconds(); ASSERT_EQ(N,scalar_result); diff --git a/lib/kokkos/core/unit_test/TestReducers.hpp b/lib/kokkos/core/unit_test/TestReducers.hpp index 7270ea3375..1d77574412 100644 --- a/lib/kokkos/core/unit_test/TestReducers.hpp +++ b/lib/kokkos/core/unit_test/TestReducers.hpp @@ -319,6 +319,7 @@ struct TestReducers { sum_view() = init; Kokkos::Sum< Scalar > reducer_view( sum_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar sum_view_scalar = sum_view(); ASSERT_EQ( sum_view_scalar, reference_sum ); @@ -365,6 +366,7 @@ struct TestReducers { prod_view() = init; Kokkos::Prod< Scalar > reducer_view( prod_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar prod_view_scalar = prod_view(); ASSERT_EQ( prod_view_scalar, reference_prod ); @@ -412,6 +414,7 @@ struct TestReducers { min_view() = init; Kokkos::Min< Scalar > reducer_view( min_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar min_view_scalar = min_view(); ASSERT_EQ( min_view_scalar, reference_min ); @@ -459,6 +462,7 @@ struct TestReducers { max_view() = init; Kokkos::Max< Scalar > reducer_view( max_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar max_view_scalar = max_view(); ASSERT_EQ( max_view_scalar, reference_max ); @@ -517,6 +521,7 @@ struct TestReducers { Kokkos::View< value_type, Kokkos::HostSpace > min_view( "View" ); Kokkos::MinLoc< Scalar, int > reducer_view( min_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); value_type min_view_scalar = min_view(); ASSERT_EQ( min_view_scalar.val, reference_min ); @@ -577,6 +582,7 @@ struct TestReducers { Kokkos::View< value_type, Kokkos::HostSpace > max_view( "View" ); Kokkos::MaxLoc< Scalar, int > reducer_view( max_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); value_type max_view_scalar = max_view(); ASSERT_EQ( max_view_scalar.val, reference_max ); @@ -687,6 +693,7 @@ struct TestReducers { Kokkos::View< value_type, Kokkos::HostSpace > minmax_view( "View" ); Kokkos::MinMaxLoc< Scalar, int > reducer_view( minmax_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); value_type minmax_view_scalar = minmax_view(); ASSERT_EQ( minmax_view_scalar.min_val, reference_min ); @@ -740,6 +747,7 @@ struct TestReducers { band_view() = init; Kokkos::BAnd< Scalar > reducer_view( band_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar band_view_scalar = band_view(); ASSERT_EQ( band_view_scalar, reference_band ); @@ -786,6 +794,7 @@ struct TestReducers { bor_view() = init; Kokkos::BOr< Scalar > reducer_view( bor_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar bor_view_scalar = bor_view(); ASSERT_EQ( bor_view_scalar, reference_bor ); @@ -832,6 +841,7 @@ struct TestReducers { land_view() = init; Kokkos::LAnd< Scalar > reducer_view( land_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar land_view_scalar = land_view(); ASSERT_EQ( land_view_scalar, reference_land ); @@ -878,6 +888,7 @@ struct TestReducers { lor_view() = init; Kokkos::LOr< Scalar > reducer_view( lor_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar lor_view_scalar = lor_view(); ASSERT_EQ( lor_view_scalar, reference_lor ); diff --git a/lib/kokkos/core/unit_test/TestScan.hpp b/lib/kokkos/core/unit_test/TestScan.hpp index e021ed09f5..eaebb254a7 100644 --- a/lib/kokkos/core/unit_test/TestScan.hpp +++ b/lib/kokkos/core/unit_test/TestScan.hpp @@ -96,6 +96,7 @@ struct TestScan { long long int total = 0; Kokkos::parallel_scan( N, *this, total ); + run_check( size_t( ( N+1 )*N/2 ), size_t( total ) ); check_error(); } @@ -109,6 +110,8 @@ struct TestScan { errors = errors_a; Kokkos::parallel_scan( exec_policy( Start , N ) , *this ); + Kokkos::fence(); + check_error(); } @@ -138,7 +141,7 @@ TEST_F( TEST_CATEGORY, scan ) TestScan< TEST_EXECSPACE >( 0 ); TestScan< TEST_EXECSPACE >( 100000 ); TestScan< TEST_EXECSPACE >( 10000000 ); - TEST_EXECSPACE::fence(); + TEST_EXECSPACE().fence(); } @@ -153,7 +156,7 @@ TEST_F( TEST_CATEGORY, scan ) TestScanFunctor( 1000000 ); TestScanFunctor( 10000000 ); - TEST_EXECSPACE::fence(); + TEST_EXECSPACE().fence(); }*/ diff --git a/lib/kokkos/core/unit_test/TestSharedAlloc.hpp b/lib/kokkos/core/unit_test/TestSharedAlloc.hpp index 1a942b89c8..c475fe55dc 100644 --- a/lib/kokkos/core/unit_test/TestSharedAlloc.hpp +++ b/lib/kokkos/core/unit_test/TestSharedAlloc.hpp @@ -107,6 +107,8 @@ void test_shared_alloc() ASSERT_EQ( r[i], RecordMemS::get_record( r[i]->data() ) ); }); + Kokkos::fence(); + #ifdef KOKKOS_DEBUG // Sanity check for the whole set of allocation records to which this record belongs. RecordBase::is_sane( r[0] ); @@ -120,6 +122,8 @@ void test_shared_alloc() #endif } }); + + Kokkos::fence(); } { @@ -145,6 +149,8 @@ void test_shared_alloc() ASSERT_EQ( r[i], RecordMemS::get_record( r[i]->data() ) ); }); + Kokkos::fence(); + #ifdef KOKKOS_DEBUG RecordBase::is_sane( r[0] ); #endif @@ -157,6 +163,8 @@ void test_shared_alloc() } }); + Kokkos::fence(); + ASSERT_EQ( destroy_count, int( N ) ); } @@ -196,12 +204,14 @@ void test_shared_alloc() ASSERT_EQ( track.use_count(), 1 ); } - Kokkos::parallel_for( range, [=] ( size_t i ) { + Kokkos::parallel_for( range, [=] ( size_t ) { Tracker local_tracker; local_tracker.assign_allocated_record_to_uninitialized( rec ); ASSERT_GT( rec->use_count(), 1 ); }); + Kokkos::fence(); + ASSERT_EQ( rec->use_count(), 1 ); ASSERT_EQ( track.use_count(), 1 ); diff --git a/lib/kokkos/core/unit_test/TestTaskScheduler.hpp b/lib/kokkos/core/unit_test/TestTaskScheduler.hpp index ac32a01fb8..361e8da9e1 100644 --- a/lib/kokkos/core/unit_test/TestTaskScheduler.hpp +++ b/lib/kokkos/core/unit_test/TestTaskScheduler.hpp @@ -47,11 +47,15 @@ #include #if defined( KOKKOS_ENABLE_TASKDAG ) #include +#include #include #include #include +//============================================================================== +// {{{1 + namespace TestTaskScheduler { namespace { @@ -72,29 +76,30 @@ long eval_fib( long n ) } -template< typename Space > +template< typename Scheduler > struct TestFib { - typedef Kokkos::TaskScheduler< Space > sched_type; - typedef Kokkos::Future< long, Space > future_type; - typedef long value_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture< long, Scheduler >; + using value_type = long; - sched_type sched; future_type fib_m1; future_type fib_m2; const value_type n; KOKKOS_INLINE_FUNCTION - TestFib( const sched_type & arg_sched, const value_type arg_n ) - : sched( arg_sched ), fib_m1(), fib_m2(), n( arg_n ) {} + TestFib( const value_type arg_n ) + : fib_m1(), fib_m2(), n( arg_n ) {} KOKKOS_INLINE_FUNCTION - void operator()( typename sched_type::member_type &, value_type & result ) + void operator()( typename sched_type::member_type & member, value_type & result ) { #if 0 printf( "\nTestFib(%ld) %d %d\n", n, int( !fib_m1.is_null() ), int( !fib_m2.is_null() ) ); #endif + auto& sched = member.scheduler(); + if ( n < 2 ) { result = n; } @@ -107,13 +112,13 @@ struct TestFib // path to completion. fib_m2 = Kokkos::task_spawn( Kokkos::TaskSingle( sched, Kokkos::TaskPriority::High ) - , TestFib( sched, n - 2 ) ); + , TestFib( n - 2 ) ); fib_m1 = Kokkos::task_spawn( Kokkos::TaskSingle( sched ) - , TestFib( sched, n - 1 ) ); + , TestFib( n - 1 ) ); - Kokkos::Future< Space > dep[] = { fib_m1, fib_m2 }; - Kokkos::Future< Space > fib_all = Kokkos::when_all( dep, 2 ); + Kokkos::BasicFuture dep[] = { fib_m1, fib_m2 }; + Kokkos::BasicFuture fib_all = sched.when_all( dep, 2 ); if ( !fib_m2.is_null() && !fib_m1.is_null() && !fib_all.is_null() ) { // High priority to retire this branch. @@ -123,9 +128,9 @@ struct TestFib #if 1 printf( "TestFib(%ld) insufficient memory alloc_capacity(%d) task_max(%d) task_accum(%ld)\n" , n - , sched.allocation_capacity() - , sched.allocated_task_count_max() - , sched.allocated_task_count_accum() + , 0 //sched.allocation_capacity() + , 0 //sched.allocated_task_count_max() + , 0l //sched.allocated_task_count_accum() ); #endif @@ -149,12 +154,18 @@ struct TestFib , std::min(size_t(MaxBlockSize),MemoryCapacity) , std::min(size_t(SuperBlockSize),MemoryCapacity) ); - future_type f = Kokkos::host_spawn( Kokkos::TaskSingle( root_sched ) - , TestFib( root_sched, i ) ); + { + future_type f = Kokkos::host_spawn( Kokkos::TaskSingle( root_sched ) + , TestFib( i ) ); + + Kokkos::wait( root_sched ); + + ASSERT_EQ( eval_fib( i ), f.get() ); + } + + ASSERT_EQ(root_sched.queue().allocation_count(), 0); - Kokkos::wait( root_sched ); - ASSERT_EQ( eval_fib( i ), f.get() ); #if 0 fprintf( stdout, "\nTestFib::run(%d) spawn_size(%d) when_all_size(%d) alloc_capacity(%d) task_max(%d) task_accum(%ld)\n" @@ -172,32 +183,36 @@ struct TestFib } // namespace TestTaskScheduler +// end TestFib }}}1 +//============================================================================== + //---------------------------------------------------------------------------- +//============================================================================== +// {{{1 + namespace TestTaskScheduler { -template< class Space > +template< class Scheduler > struct TestTaskDependence { - typedef Kokkos::TaskScheduler< Space > sched_type; - typedef Kokkos::Future< Space > future_type; - typedef Kokkos::View< long, Space > accum_type; + typedef Scheduler sched_type; + typedef Kokkos::BasicFuture< void, Scheduler > future_type; + typedef Kokkos::View< long, typename sched_type::execution_space > accum_type; typedef void value_type; - sched_type m_sched; accum_type m_accum; long m_count; KOKKOS_INLINE_FUNCTION TestTaskDependence( long n - , const sched_type & arg_sched , const accum_type & arg_accum ) - : m_sched( arg_sched ) - , m_accum( arg_accum ) + : m_accum( arg_accum ) , m_count( n ) {} KOKKOS_INLINE_FUNCTION - void operator()( typename sched_type::member_type & ) + void operator()( typename sched_type::member_type & member ) { + auto& sched = member.scheduler(); enum { CHUNK = 8 }; const int n = CHUNK < m_count ? CHUNK : m_count; @@ -206,14 +221,14 @@ struct TestTaskDependence { const int increment = ( m_count + n - 1 ) / n; future_type f = - m_sched.when_all( n , [this,increment]( int i ) { + sched.when_all( n , [this,&member,increment]( int i ) { const long inc = increment ; const long begin = i * inc ; const long count = begin + inc < m_count ? inc : m_count - begin ; return Kokkos::task_spawn - ( Kokkos::TaskSingle( m_sched ) - , TestTaskDependence( count, m_sched, m_accum ) ); + ( Kokkos::TaskSingle( member.scheduler() ) + , TestTaskDependence( count, m_accum ) ); }); m_count = 0; @@ -244,7 +259,7 @@ struct TestTaskDependence { typename accum_type::HostMirror host_accum = Kokkos::create_mirror_view( accum ); - Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskDependence( n, sched, accum ) ); + Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskDependence( n, accum ) ); Kokkos::wait( sched ); @@ -256,22 +271,25 @@ struct TestTaskDependence { } // namespace TestTaskScheduler +// end TestTaskDependence }}}1 +//============================================================================== + //---------------------------------------------------------------------------- namespace TestTaskScheduler { -template< class ExecSpace > +template< class Scheduler > struct TestTaskTeam { //enum { SPAN = 8 }; enum { SPAN = 33 }; //enum { SPAN = 1 }; typedef void value_type; - typedef Kokkos::TaskScheduler< ExecSpace > sched_type; - typedef Kokkos::Future< ExecSpace > future_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture; + using ExecSpace = typename sched_type::execution_space; typedef Kokkos::View< long*, ExecSpace > view_type; - sched_type sched; future_type future; view_type parfor_result; @@ -281,14 +299,12 @@ struct TestTaskTeam { const long nvalue; KOKKOS_INLINE_FUNCTION - TestTaskTeam( const sched_type & arg_sched - , const view_type & arg_parfor_result + TestTaskTeam( const view_type & arg_parfor_result , const view_type & arg_parreduce_check , const view_type & arg_parscan_result , const view_type & arg_parscan_check , const long arg_nvalue ) - : sched( arg_sched ) - , future() + : future() , parfor_result( arg_parfor_result ) , parreduce_check( arg_parreduce_check ) , parscan_result( arg_parscan_result ) @@ -298,21 +314,22 @@ struct TestTaskTeam { KOKKOS_INLINE_FUNCTION void operator()( typename sched_type::member_type & member ) { + auto& sched = member.scheduler(); const long end = nvalue + 1; + // begin = max(end - SPAN, 0); const long begin = 0 < end - SPAN ? end - SPAN : 0; if ( 0 < begin && future.is_null() ) { if ( member.team_rank() == 0 ) { future = Kokkos::task_spawn( Kokkos::TaskTeam( sched ) - , TestTaskTeam( sched - , parfor_result + , TestTaskTeam( parfor_result , parreduce_check , parscan_result , parscan_check , begin - 1 ) ); - #ifndef __HCC_ACCELERATOR__ + #if !defined(__HCC_ACCELERATOR__) && !defined(__CUDA_ARCH__) assert( !future.is_null() ); #endif @@ -449,8 +466,7 @@ struct TestTaskTeam { host_parscan_check = Kokkos::create_mirror_view( root_parscan_check ); future_type f = Kokkos::host_spawn( Kokkos::TaskTeam( root_sched ) - , TestTaskTeam( root_sched - , root_parfor_result + , TestTaskTeam( root_parfor_result , root_parreduce_check , root_parscan_result , root_parscan_check @@ -492,27 +508,25 @@ struct TestTaskTeam { } }; -template< class ExecSpace > +template< class Scheduler > struct TestTaskTeamValue { enum { SPAN = 8 }; typedef long value_type; - typedef Kokkos::TaskScheduler< ExecSpace > sched_type; - typedef Kokkos::Future< value_type, ExecSpace > future_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture< value_type, sched_type >; + using ExecSpace = typename sched_type::execution_space; typedef Kokkos::View< long*, ExecSpace > view_type; - sched_type sched; future_type future; view_type result; const long nvalue; KOKKOS_INLINE_FUNCTION - TestTaskTeamValue( const sched_type & arg_sched - , const view_type & arg_result + TestTaskTeamValue( const view_type & arg_result , const long arg_nvalue ) - : sched( arg_sched ) - , future() + : future() , result( arg_result ) , nvalue( arg_nvalue ) {} @@ -523,12 +537,16 @@ struct TestTaskTeamValue { const long end = nvalue + 1; const long begin = 0 < end - SPAN ? end - SPAN : 0; + auto& sched = member.scheduler(); + if ( 0 < begin && future.is_null() ) { if ( member.team_rank() == 0 ) { - future = sched.task_spawn( TestTaskTeamValue( sched, result, begin - 1 ) + future = sched.task_spawn( TestTaskTeamValue( result, begin - 1 ) , Kokkos::TaskTeam ); + #if !defined(__HCC_ACCELERATOR__) && !defined(__CUDA_ARCH__) assert( !future.is_null() ); + #endif sched.respawn( this , future ); } @@ -565,7 +583,7 @@ struct TestTaskTeamValue { typename view_type::HostMirror host_result = Kokkos::create_mirror_view( root_result ); - future_type fv = root_sched.host_spawn( TestTaskTeamValue( root_sched, root_result, n ) + future_type fv = root_sched.host_spawn( TestTaskTeamValue( root_result, n ) , Kokkos::TaskTeam ); Kokkos::wait( root_sched ); @@ -594,31 +612,30 @@ struct TestTaskTeamValue { namespace TestTaskScheduler { -template< class Space > +template< class Scheduler > struct TestTaskSpawnWithPool { - typedef Kokkos::TaskScheduler< Space > sched_type; - typedef Kokkos::Future< Space > future_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture; typedef void value_type; + using Space = typename sched_type::execution_space; - sched_type m_sched ; int m_count ; Kokkos::MemoryPool m_pool ; KOKKOS_INLINE_FUNCTION - TestTaskSpawnWithPool( const sched_type & arg_sched - , const int & arg_count - , const Kokkos::MemoryPool & arg_pool - ) - : m_sched( arg_sched ) - , m_count( arg_count ) + TestTaskSpawnWithPool( + const int & arg_count, + const Kokkos::MemoryPool & arg_pool + ) + : m_count( arg_count ) , m_pool( arg_pool ) {} KOKKOS_INLINE_FUNCTION - void operator()( typename sched_type::member_type & ) + void operator()( typename sched_type::member_type & member ) { if ( m_count ) { - Kokkos::task_spawn( Kokkos::TaskSingle( m_sched ) , TestTaskSpawnWithPool( m_sched , m_count - 1, m_pool ) ); + Kokkos::task_spawn( Kokkos::TaskSingle( member.scheduler() ) , TestTaskSpawnWithPool( m_count - 1, m_pool ) ); } } @@ -639,7 +656,7 @@ struct TestTaskSpawnWithPool { using other_memory_space = typename Space::memory_space; Kokkos::MemoryPool pool(other_memory_space(), 10000, 100, 200, 1000); - auto f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskSpawnWithPool( sched, 3, pool ) ); + auto f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskSpawnWithPool( 3, pool ) ); Kokkos::wait( sched ); } @@ -647,36 +664,307 @@ struct TestTaskSpawnWithPool { } -namespace Test { +//---------------------------------------------------------------------------- -TEST_F( TEST_CATEGORY, task_fib ) -{ - const int N = 27 ; - for ( int i = 0; i < N; ++i ) { - TestTaskScheduler::TestFib< TEST_EXECSPACE >::run( i , ( i + 1 ) * ( i + 1 ) * 2000 ); +namespace TestTaskScheduler { + +template< class Scheduler > +struct TestTaskCtorsDevice { + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture; + using value_type = void; + using Space = typename sched_type::execution_space; + + int m_count; + + KOKKOS_INLINE_FUNCTION + TestTaskCtorsDevice(const int & arg_count) : m_count(arg_count) { } + + KOKKOS_INLINE_FUNCTION + void operator()(typename sched_type::member_type& member ) + { + // Note: Default construction on the device is not allowed + if(m_count == 4) { + Kokkos::task_spawn( + Kokkos::TaskSingle(member.scheduler()), + TestTaskCtorsDevice(m_count - 1) + ); + } + else if(m_count == 3) { + sched_type s = member.scheduler(); // move construct + s = member.scheduler(); // move assignment + Kokkos::task_spawn( + Kokkos::TaskSingle(s), + TestTaskCtorsDevice(m_count - 1) + ); + } + else if(m_count == 2) { + sched_type s3 = member.scheduler(); // move construct from member.scheduler(); + Kokkos::task_spawn( + Kokkos::TaskSingle(s3), + TestTaskCtorsDevice(m_count - 1) + ); + } + else if(m_count == 1) { + sched_type s = member.scheduler(); // move construct from member.scheduler(); + sched_type s2 = s; // copy construct from s + Kokkos::task_spawn( + Kokkos::TaskSingle(s2), + TestTaskCtorsDevice(m_count - 1) + ); + } } -} -TEST_F( TEST_CATEGORY, task_depend ) -{ - for ( int i = 0; i < 25; ++i ) { - TestTaskScheduler::TestTaskDependence< TEST_EXECSPACE >::run( i ); + static void run() + { + using memory_space = typename sched_type::memory_space; + + enum { MemoryCapacity = 16000 }; + enum { MinBlockSize = 64 }; + enum { MaxBlockSize = 1024 }; + enum { SuperBlockSize = 4096 }; + + sched_type sched( + memory_space(), MemoryCapacity, MinBlockSize, MaxBlockSize, SuperBlockSize + ); + + auto f = Kokkos::host_spawn( + Kokkos::TaskSingle(sched), + TestTaskCtorsDevice(4) + ); + + Kokkos::wait(sched); + + // TODO assertions and sanity checks + } -} - -TEST_F( TEST_CATEGORY, task_team ) -{ - TestTaskScheduler::TestTaskTeam< TEST_EXECSPACE >::run( 1000 ); - //TestTaskScheduler::TestTaskTeamValue< TEST_EXECSPACE >::run( 1000 ); // Put back after testing. -} - -TEST_F( TEST_CATEGORY, task_with_mempool ) -{ - TestTaskScheduler::TestTaskSpawnWithPool< TEST_EXECSPACE >::run(); -} +}; } +//---------------------------------------------------------------------------- + + +namespace TestTaskScheduler { + +template +struct TestMultipleDependence { + + using sched_type = Scheduler; + using future_bool = Kokkos::BasicFuture; + using future_int = Kokkos::BasicFuture; + using value_type = bool; + using execution_space = typename sched_type::execution_space; + + enum : int { NPerDepth = 6 }; + enum : int { NFanout = 3 }; + + // xlC doesn't like incomplete aggregate constructors, so we have do do this manually: + KOKKOS_INLINE_FUNCTION + TestMultipleDependence(int depth, int max_depth) + : m_depth(depth), + m_max_depth(max_depth), + m_dep() + { + // gcc 4.8 has an internal compile error when I give the initializer in the class, so I have do do it here + for(int i = 0; i < NPerDepth; ++i) { + m_result_futures[i] = future_bool(); + } + } + + // xlC doesn't like incomplete aggregate constructors, so we have do do this manually: + KOKKOS_INLINE_FUNCTION + TestMultipleDependence(int depth, int max_depth, future_int dep) + : m_depth(depth), + m_max_depth(max_depth), + m_dep(dep) + { + // gcc 4.8 has an internal compile error when I give the initializer in the class, so I have do do it here + for(int i = 0; i < NPerDepth; ++i) { + m_result_futures[i] = future_bool(); + } + } + + int m_depth; + int m_max_depth; + future_int m_dep; + future_bool m_result_futures[NPerDepth]; + + + struct TestCheckReady { + future_int m_dep; + using value_type = bool; + KOKKOS_INLINE_FUNCTION + void operator()(typename Scheduler::member_type&, bool& value) { + // if it was "transiently" ready, this could be false even if we made it a dependence of this task + value = m_dep.is_ready(); + return; + } + }; + + + struct TestComputeValue { + using value_type = int; + KOKKOS_INLINE_FUNCTION + void operator()(typename Scheduler::member_type&, int& result) { + double value = 0; + // keep this one busy for a while + for(int i = 0; i < 10000; ++i) { + value += i * i / 7.138 / value; + } + // Do something irrelevant + result = int(value) << 2; + return; + } + }; + + + KOKKOS_INLINE_FUNCTION + void operator()(typename sched_type::member_type & member, bool& value) + { + if(m_result_futures[0].is_null()) { + if (m_depth == 0) { + // Spawn one expensive task at the root + m_dep = Kokkos::task_spawn(Kokkos::TaskSingle(member.scheduler()), TestComputeValue{}); + } + + // Then check for it to be ready in a whole bunch of other tasks that race + int n_checkers = NPerDepth; + if(m_depth < m_max_depth) { + n_checkers -= NFanout; + for(int i = n_checkers; i < NPerDepth; ++i) { + m_result_futures[i] = Kokkos::task_spawn(Kokkos::TaskSingle(member.scheduler()), + TestMultipleDependence(m_depth + 1, m_max_depth, m_dep) + ); + } + } + + for(int i = 0; i < n_checkers; ++i) { + m_result_futures[i] = member.scheduler().spawn(Kokkos::TaskSingle(m_dep), TestCheckReady{m_dep}); + } + auto done = member.scheduler().when_all(m_result_futures, NPerDepth); + Kokkos::respawn(this, done); + + return; + } + else { + value = true; + for(int i = 0; i < NPerDepth; ++i) { + value = value && !m_result_futures[i].is_null(); + if(value) { + value = value && m_result_futures[i].get(); + } + } + return; + } + } + + static void run(int depth) + { + typedef typename sched_type::memory_space memory_space; + + enum { MemoryCapacity = 1 << 30 }; + enum { MinBlockSize = 64 }; + enum { MaxBlockSize = 1024 }; + enum { SuperBlockSize = 4096 }; + + sched_type sched( memory_space() + , MemoryCapacity + , MinBlockSize + , MaxBlockSize + , SuperBlockSize ); + + auto f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestMultipleDependence( 0, depth ) ); + + Kokkos::wait( sched ); + + ASSERT_TRUE( f.get() ); + + } +}; + +} + +//---------------------------------------------------------------------------- + +#define KOKKOS_PP_CAT_IMPL(x, y) x ## y +#define KOKKOS_TEST_WITH_SUFFIX(x, y) KOKKOS_PP_CAT_IMPL(x, y) + +#define TEST_SCHEDULER_SUFFIX _deprecated +#define TEST_SCHEDULER Kokkos::DeprecatedTaskScheduler +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#define TEST_SCHEDULER_SUFFIX _deprecated_multiple +#define TEST_SCHEDULER Kokkos::DeprecatedTaskSchedulerMultiple +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + + +#define TEST_SCHEDULER_SUFFIX _single +#define TEST_SCHEDULER Kokkos::TaskScheduler +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#define TEST_SCHEDULER_SUFFIX _multiple +#define TEST_SCHEDULER Kokkos::TaskSchedulerMultiple +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + + +#define TEST_SCHEDULER_SUFFIX _chase_lev +#define TEST_SCHEDULER Kokkos::ChaseLevTaskScheduler +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#if 0 +#define TEST_SCHEDULER_SUFFIX _fixed_mempool +#define TEST_SCHEDULER \ + Kokkos::SimpleTaskScheduler< \ + TEST_EXECSPACE, \ + Kokkos::Impl::SingleTaskQueue< \ + TEST_EXECSPACE, \ + Kokkos::Impl::default_tasking_memory_space_for_execution_space_t, \ + Kokkos::Impl::TaskQueueTraitsLockBased, \ + Kokkos::Impl::FixedBlockSizeMemoryPool< \ + Kokkos::Device>, \ + 128, \ + 16 \ + > \ + > \ + > +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#define TEST_SCHEDULER_SUFFIX _fixed_mempool_multiple +#define TEST_SCHEDULER \ + Kokkos::SimpleTaskScheduler< \ + TEST_EXECSPACE, \ + Kokkos::Impl::MultipleTaskQueue< \ + TEST_EXECSPACE, \ + Kokkos::Impl::default_tasking_memory_space_for_execution_space_t, \ + Kokkos::Impl::TaskQueueTraitsLockBased, \ + Kokkos::Impl::FixedBlockSizeMemoryPool< \ + Kokkos::Device>, \ + 128, \ + 16 \ + > \ + > \ + > +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX +#endif + +#undef KOKKOS_TEST_WITH_SUFFIX +#undef KOKKOS_PP_CAT_IMPL + #endif // #if defined( KOKKOS_ENABLE_TASKDAG ) #endif // #ifndef KOKKOS_UNITTEST_TASKSCHEDULER_HPP diff --git a/lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp b/lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp new file mode 100644 index 0000000000..6ac9a6d740 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp @@ -0,0 +1,92 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace Test { + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_fib, TEST_SCHEDULER_SUFFIX) ) +{ + const int N = 27 ; + for ( int i = 0; i < N; ++i ) { + TestTaskScheduler::TestFib< TEST_SCHEDULER >::run( i , ( i + 1 ) * ( i + 1 ) * 64000 ); + } +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_depend, TEST_SCHEDULER_SUFFIX) ) +{ + for ( int i = 0; i < 25; ++i ) { + TestTaskScheduler::TestTaskDependence< TEST_SCHEDULER >::run( i ); + } +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_team, TEST_SCHEDULER_SUFFIX) ) +{ + TestTaskScheduler::TestTaskTeam< TEST_SCHEDULER >::run( 1000 ); + //TestTaskScheduler::TestTaskTeamValue< TEST_EXECSPACE >::run( 1000 ); // Put back after testing. +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_with_mempool, TEST_SCHEDULER_SUFFIX) ) +{ + TestTaskScheduler::TestTaskSpawnWithPool::run(); +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_multiple_depend, TEST_SCHEDULER_SUFFIX) ) +{ + for ( int i = 2; i < 6; ++i ) { + TestTaskScheduler::TestMultipleDependence::run( i ); + } +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_scheduler_ctors, TEST_SCHEDULER_SUFFIX) ) +{ + TEST_SCHEDULER sched; + TEST_SCHEDULER sched2 = sched; + sched = sched2; +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_scheduer_ctors_device, TEST_SCHEDULER_SUFFIX) ) +{ + TestTaskScheduler::TestTaskCtorsDevice::run(); +} + + +} // end namespace Test \ No newline at end of file diff --git a/lib/kokkos/core/unit_test/TestTeam.hpp b/lib/kokkos/core/unit_test/TestTeam.hpp index 487a4d581c..5f325eb905 100644 --- a/lib/kokkos/core/unit_test/TestTeam.hpp +++ b/lib/kokkos/core/unit_test/TestTeam.hpp @@ -72,6 +72,7 @@ struct TestTeamPolicy { const int tid = member.team_rank() + member.team_size() * member.league_rank(); m_flags( member.team_rank(), member.league_rank() ) = tid; + static_assert((std::is_same::value),"TeamMember::execution_space is not the same as TeamPolicy<>::execution_space"); } KOKKOS_INLINE_FUNCTION @@ -265,7 +266,7 @@ public: Kokkos::parallel_reduce( team_exec, functor_type( nwork ), tmp ); } - execution_space::fence(); + execution_space().fence(); for ( unsigned i = 0; i < Repeat; ++i ) { for ( unsigned j = 0; j < Count; ++j ) { @@ -391,7 +392,7 @@ public: Kokkos::deep_copy( functor.accum, total ); Kokkos::parallel_reduce( team_exec, functor, result_type( & error ) ); - DeviceType::fence(); + DeviceType().fence(); Kokkos::deep_copy( accum, functor.accum ); Kokkos::deep_copy( total, functor.total ); @@ -400,7 +401,7 @@ public: ASSERT_EQ( total, accum ); } - execution_space::fence(); + execution_space().fence(); } }; @@ -495,6 +496,7 @@ struct TestSharedTeam { typename Functor::value_type error_count = 0; Kokkos::parallel_reduce( team_exec, Functor(), result_type( & error_count ) ); + Kokkos::fence(); ASSERT_EQ( error_count, 0 ); } @@ -569,6 +571,8 @@ struct TestLambdaSharedTeam { } }, result_type( & error_count ) ); + Kokkos::fence(); + ASSERT_EQ( error_count, 0 ); } }; @@ -679,6 +683,7 @@ struct TestScratchTeam { Kokkos::parallel_reduce( team_exec.set_scratch_size( 1, Kokkos::PerTeam( team_scratch_size ), Kokkos::PerThread( thread_scratch_size ) ), Functor(), result_type( & error_count ) ); + Kokkos::fence(); ASSERT_EQ( error_count, 0 ); } }; @@ -822,7 +827,6 @@ struct ClassNoShmemSizeFunction { Kokkos::TeamPolicy< TagReduce, ExecSpace, ScheduleType > policy( 10, team_size, 16 ); Kokkos::parallel_reduce( policy.set_scratch_size( 0, Kokkos::PerTeam( per_team0 ), Kokkos::PerThread( per_thread0 ) ).set_scratch_size( 1, Kokkos::PerTeam( per_team1 ), Kokkos::PerThread( per_thread1 ) ), *this, error ); - Kokkos::fence(); ASSERT_EQ( error, 0 ); } @@ -877,7 +881,6 @@ struct ClassWithShmemSizeFunction { Kokkos::parallel_reduce( policy.set_scratch_size( 1, Kokkos::PerTeam( per_team1 ), Kokkos::PerThread( per_thread1 ) ), *this, error ); - Kokkos::fence(); ASSERT_EQ( error, 0 ); } @@ -929,7 +932,6 @@ void test_team_mulit_level_scratch_test_lambda() { count += test_team_mulit_level_scratch_loop_body< ExecSpace >( team ); }, error ); ASSERT_EQ( error, 0 ); - Kokkos::fence(); #endif #endif } diff --git a/lib/kokkos/core/unit_test/TestTeamVector.hpp b/lib/kokkos/core/unit_test/TestTeamVector.hpp index 498d156db3..45433012f9 100644 --- a/lib/kokkos/core/unit_test/TestTeamVector.hpp +++ b/lib/kokkos/core/unit_test/TestTeamVector.hpp @@ -290,17 +290,23 @@ struct functor_team_reduce { functor_team_reduce( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; - unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { Scalar value = Scalar(); + shared_scalar_t shared_value(team.team_scratch(0),1); Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) { val += i - team.league_rank() + team.league_size() + team.team_size(); }, value ); + + Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, shared_value(0) ); team.team_barrier(); @@ -314,11 +320,20 @@ struct functor_team_reduce { if ( test != value ) { if ( team.league_rank() == 0 ) { - printf( "FAILED team_parallel_reduce %i %i %f %f %lu\n", + printf( "FAILED team_parallel_reduce %i %i %lf %lf %lu\n", team.league_rank(), team.team_rank(), static_cast( test ), static_cast( value ), sizeof( Scalar ) ); } + flag() = 1; + } + if ( test != shared_value(0) ) { + if ( team.league_rank() == 0 ) { + printf( "FAILED team_parallel_reduce with shared result %i %i %lf %lf %lu\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ), sizeof( Scalar ) ); + } + flag() = 1; } }); @@ -335,12 +350,13 @@ struct functor_team_reduce_reducer { functor_team_reduce_reducer( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; - unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { Scalar value = 0; + shared_scalar_t shared_value(team.team_scratch(0),1); Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) { @@ -348,6 +364,13 @@ struct functor_team_reduce_reducer { }, Kokkos::Sum(value) ); + + Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, + Kokkos::Sum(shared_value(0)) + ); team.team_barrier(); @@ -360,12 +383,19 @@ struct functor_team_reduce_reducer { } if ( test != value ) { - printf( "FAILED team_vector_parallel_reduce_reducer %i %i %f %f\n", + printf( "FAILED team_vector_parallel_reduce_reducer %i %i %lf %lf\n", team.league_rank(), team.team_rank(), static_cast( test ), static_cast( value ) ); flag() = 1; } + if ( test != shared_value(0) ) { + printf( "FAILED team_vector_parallel_reduce_reducer shared value %i %i %lf %lf\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ) ); + + flag() = 1; + } }); } }; @@ -823,7 +853,6 @@ namespace Test { // ( modified from kokkos-tutorials/GTC2016/Exercises/ThreeLevelPar ) #if ( ! defined( KOKKOS_ENABLE_CUDA ) ) || (defined( KOKKOS_ENABLE_CUDA_LAMBDA ) && (8000 <= CUDA_VERSION)) - template< typename ScalarType, class DeviceType > class TestTripleNestedReduce { @@ -843,6 +872,14 @@ public: if( team_size > size_type(DeviceType::execution_space::concurrency())) team_size = size_type(DeviceType::execution_space::concurrency()); +#ifdef KOKKOS_ENABLE_HPX + team_size = 1; + if (!std::is_same::value) + { + team_size = 1; + } +#endif + //typedef Kokkos::LayoutLeft Layout; typedef Kokkos::LayoutRight Layout; @@ -962,6 +999,8 @@ TEST_F( TEST_CATEGORY, triple_nested_parallelism ) } #endif TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 16 ); + TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 33 ); + TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 19 ); #ifdef KOKKOS_ENABLE_ROCM // ROCm doesn't support team sizes not powers of two if (!std::is_same::value) #endif diff --git a/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp b/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp new file mode 100644 index 0000000000..86c8dab3ff --- /dev/null +++ b/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp @@ -0,0 +1,464 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include +#include +#include +#include + +namespace TestTeamVectorRange { + +struct my_complex { + double re, im; + int dummy; + + KOKKOS_INLINE_FUNCTION + my_complex() { + re = 0.0; + im = 0.0; + dummy = 0; + } + + KOKKOS_INLINE_FUNCTION + my_complex( const my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const volatile my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + volatile my_complex & operator=( const my_complex & src ) volatile { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + volatile my_complex & operator=( const volatile my_complex & src ) volatile { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + my_complex( const volatile my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + } + + KOKKOS_INLINE_FUNCTION + my_complex( const double & val ) { + re = val; + im = 0.0; + dummy = 0; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator+=( const my_complex & src ) { + re += src.re; + im += src.im; + dummy += src.dummy; + return *this; + } + + KOKKOS_INLINE_FUNCTION + void operator+=( const volatile my_complex & src ) volatile { + re += src.re; + im += src.im; + dummy += src.dummy; + } + + KOKKOS_INLINE_FUNCTION + my_complex operator +( const my_complex & src ) { + my_complex tmp = *this; + tmp.re += src.re; + tmp.im += src.im; + tmp.dummy += src.dummy; + return tmp; + } + + KOKKOS_INLINE_FUNCTION + my_complex operator+( const volatile my_complex & src ) volatile { + my_complex tmp = *this; + tmp.re += src.re; + tmp.im += src.im; + tmp.dummy += src.dummy; + return tmp; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator*=( const my_complex & src ) { + double re_tmp = re * src.re - im * src.im; + double im_tmp = re * src.im + im * src.re; + re = re_tmp; + im = im_tmp; + dummy *= src.dummy; + return *this; + } + + KOKKOS_INLINE_FUNCTION + void operator*=( const volatile my_complex & src ) volatile { + double re_tmp = re * src.re - im * src.im; + double im_tmp = re * src.im + im * src.re; + re = re_tmp; + im = im_tmp; + dummy *= src.dummy; + } + + KOKKOS_INLINE_FUNCTION + bool operator==( const my_complex & src ) { + return ( re == src.re ) && ( im == src.im ) && ( dummy == src.dummy ); + } + + KOKKOS_INLINE_FUNCTION + bool operator!=( const my_complex & src ) { + return ( re != src.re ) || ( im != src.im ) || ( dummy != src.dummy ); + } + + KOKKOS_INLINE_FUNCTION + bool operator!=( const double & val ) { + return ( re != val ) || ( im != 0 ) || ( dummy != 0 ); + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const int & val ) { + re = val; + im = 0.0; + dummy = 0; + return *this; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const double & val ) { + re = val; + im = 0.0; + dummy = 0; + return *this; + } + + KOKKOS_INLINE_FUNCTION + operator double() { + return re; + } +}; +} + +namespace Kokkos { +template<> +struct reduction_identity { + typedef reduction_identity t_red_ident; + KOKKOS_FORCEINLINE_FUNCTION static TestTeamVectorRange::my_complex sum() + {return TestTeamVectorRange::my_complex(t_red_ident::sum());} + KOKKOS_FORCEINLINE_FUNCTION static TestTeamVectorRange::my_complex prod() + {return TestTeamVectorRange::my_complex(t_red_ident::prod());} +}; +} + +namespace TestTeamVectorRange { + +template< typename Scalar, class ExecutionSpace > +struct functor_teamvector_for { + typedef Kokkos::TeamPolicy< ExecutionSpace > policy_type; + typedef ExecutionSpace execution_space; + + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; + + functor_teamvector_for( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} + + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(131); } + + KOKKOS_INLINE_FUNCTION + void operator()( typename policy_type::member_type team ) const { + typedef typename shmem_space::size_type size_type; + const size_type shmemSize = 131; + shared_int values = shared_int( team.team_shmem(), shmemSize ); + + if ( values.data() == nullptr || values.extent(0) < shmemSize ) { + printf( "FAILED to allocate shared memory of size %u\n", + static_cast( shmemSize ) ); + } + else { + // Initialize shared memory. + Kokkos::parallel_for( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i ) { + values( i ) = 0; + }); + // Wait for all memory to be written. + team.team_barrier(); + + // Accumulate value into per thread shared memory. + // This is non blocking. + Kokkos::parallel_for( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i ) + { + values( i ) += i - team.league_rank() + team.league_size() + team.team_size(); + }); + + // Wait for all memory to be written. + team.team_barrier(); + + // One thread per team executes the comparison. + Kokkos::single( Kokkos::PerTeam( team ), [&] () + { + Scalar test = 0; + Scalar value = 0; + + for ( int i = 0; i < 131; ++i ) { + test += i - team.league_rank() + team.league_size() + team.team_size(); + } + + for ( int i = 0; i < 131; ++i ) { + value += values( i ); + } + + if ( test != value ) { + printf ( "FAILED teamvector_parallel_for %i %i %f %f\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( value ) ); + flag() = 1; + } + }); + } + } +}; + +template< typename Scalar, class ExecutionSpace > +struct functor_teamvector_reduce { + typedef Kokkos::TeamPolicy< ExecutionSpace > policy_type; + typedef ExecutionSpace execution_space; + + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; + + functor_teamvector_reduce( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} + + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } + + KOKKOS_INLINE_FUNCTION + void operator()( typename policy_type::member_type team ) const { + Scalar value = Scalar(); + shared_scalar_t shared_value(team.team_scratch(0),1); + + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, shared_value(0) ); + + team.team_barrier(); + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, value ); + +// Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) +// { +// val += i - team.league_rank() + team.league_size() + team.team_size(); +// }, shared_value(0) ); + + team.team_barrier(); + + Kokkos::single( Kokkos::PerTeam( team ), [&] () + { + Scalar test = 0; + + for ( int i = 0; i < 131; ++i ) { + test += i - team.league_rank() + team.league_size() + team.team_size(); + } + + if ( test != value ) { + if ( team.league_rank() == 0 ) { + printf( "FAILED teamvector_parallel_reduce %i %i %lf %lf %lu\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( value ), sizeof( Scalar ) ); + } + + flag() = 1; + } + if ( test != shared_value(0) ) { + if ( team.league_rank() == 0 ) { + printf( "FAILED teamvector_parallel_reduce with shared result %i %i %lf %lf %lu\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ), sizeof( Scalar ) ); + } + + flag() = 1; + } + }); + } +}; + +template< typename Scalar, class ExecutionSpace > +struct functor_teamvector_reduce_reducer { + typedef Kokkos::TeamPolicy< ExecutionSpace > policy_type; + typedef ExecutionSpace execution_space; + + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; + + functor_teamvector_reduce_reducer( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} + + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } + + KOKKOS_INLINE_FUNCTION + void operator()( typename policy_type::member_type team ) const { + Scalar value = 0; + shared_scalar_t shared_value(team.team_scratch(0),1); + + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, + Kokkos::Sum(value) + ); + + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, + Kokkos::Sum(shared_value(0)) + ); + + team.team_barrier(); + + Kokkos::single( Kokkos::PerTeam( team ), [&] () + { + Scalar test = 0; + + for ( int i = 0; i < 131; ++i ) { + test += i - team.league_rank() + team.league_size() + team.team_size(); + } + + if ( test != value ) { + printf( "FAILED teamvector_parallel_reduce_reducer %i %i %lf %lf\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( value ) ); + + flag() = 1; + } + if ( test != shared_value(0) ) { + printf( "FAILED teamvector_parallel_reduce_reducer shared value %i %i %lf %lf\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ) ); + + flag() = 1; + } + }); + } +}; + +template< typename Scalar, class ExecutionSpace > +bool test_scalar( int nteams, int team_size, int test ) { + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > d_flag( "flag" ); + typename Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace >::HostMirror h_flag( "h_flag" ); + h_flag() = 0; + Kokkos::deep_copy( d_flag, h_flag ); + + if ( test == 0 ) { + Kokkos::parallel_for( "Test::TeamVectorFor", Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), + functor_teamvector_for< Scalar, ExecutionSpace >( d_flag ) ); + } + else if ( test == 1 ) { + Kokkos::parallel_for( "Test::TeamVectorReduce", Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), + functor_teamvector_reduce< Scalar, ExecutionSpace >( d_flag ) ); + } + else if ( test == 2 ) { + Kokkos::parallel_for( "Test::TeamVectorReduceReducer", Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), + functor_teamvector_reduce_reducer< Scalar, ExecutionSpace >( d_flag ) ); + } + + Kokkos::deep_copy( h_flag, d_flag ); + + return ( h_flag() == 0 ); +} + +template< class ExecutionSpace > +bool Test( int test ) { + bool passed = true; + + int team_size = 33; + if( team_size > int(ExecutionSpace::concurrency())) + team_size = int(ExecutionSpace::concurrency()); + passed = passed && test_scalar< int, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< long long int, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< float, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< double, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< my_complex, ExecutionSpace >( 317, team_size, test ); + + return passed; +} + +} // namespace TestTeamVectorRange + +namespace Test { + +TEST_F( TEST_CATEGORY, team_teamvector_range ) +{ + ASSERT_TRUE( ( TestTeamVectorRange::Test< TEST_EXECSPACE >( 0 ) ) ); + ASSERT_TRUE( ( TestTeamVectorRange::Test< TEST_EXECSPACE >( 1 ) ) ); + ASSERT_TRUE( ( TestTeamVectorRange::Test< TEST_EXECSPACE >( 2 ) ) ); +} +} diff --git a/lib/kokkos/core/unit_test/TestTile.hpp b/lib/kokkos/core/unit_test/TestTile.hpp index 704c7f9940..a58755dc9b 100644 --- a/lib/kokkos/core/unit_test/TestTile.hpp +++ b/lib/kokkos/core/unit_test/TestTile.hpp @@ -42,6 +42,9 @@ #ifndef TEST_TILE_HPP #define TEST_TILE_HPP +//======================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + #include #include @@ -166,4 +169,8 @@ TEST_F( TEST_CATEGORY, tile_layout ) } } + +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +//===================================================================== + #endif //TEST_TILE_HPP diff --git a/lib/kokkos/core/unit_test/TestViewAPI.hpp b/lib/kokkos/core/unit_test/TestViewAPI.hpp index 2ebd48cd61..e332bebff0 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI.hpp @@ -827,6 +827,48 @@ struct TestViewMirror ASSERT_EQ( a_org(5), a_h3(5) ); } + template< class MemoryTraits, class Space > + struct CopyUnInit { + typedef typename Kokkos::Impl::MirrorViewType::view_type mirror_view_type; + + mirror_view_type a_d; + + KOKKOS_INLINE_FUNCTION + CopyUnInit( mirror_view_type & a_d_ ) : a_d(a_d_) { + } + + KOKKOS_INLINE_FUNCTION + void operator() (const typename Space::size_type i) const { + a_d(i) = (double)(10-i); + } + + }; + + template< class MemoryTraits > + void static test_mirror_no_initialize() { + Kokkos::View< double*, Layout, Kokkos::HostSpace > a_org( "A", 10 ); + Kokkos::View< double*, Layout, Kokkos::HostSpace, MemoryTraits > a_h = a_org; + + for (int i = 0; i < 10; i++) + { + a_h(i) = (double)i; + } + auto a_d = Kokkos::create_mirror_view( DeviceType(), a_h, Kokkos::WithoutInitializing ); + + int equal_ptr_h_d = (a_h.data() == a_d.data()) ? 1 : 0; + constexpr int is_same_memspace = std::is_same< Kokkos::HostSpace, typename DeviceType::memory_space >::value ? 1 : 0; + + ASSERT_EQ( equal_ptr_h_d, is_same_memspace); + + Kokkos::parallel_for( Kokkos::RangePolicy< typename DeviceType::execution_space >( 0, int(10)), CopyUnInit< MemoryTraits, DeviceType >(a_d)); + + Kokkos::deep_copy( a_h, a_d ); + + for (int i = 0; i < 10; i++) + { + ASSERT_EQ(a_h(i), (double)(10-i)); + } + } void static testit() { test_mirror< Kokkos::MemoryTraits<0> >(); @@ -835,6 +877,8 @@ struct TestViewMirror test_mirror_view< Kokkos::MemoryTraits >(); test_mirror_copy< Kokkos::MemoryTraits<0> >(); test_mirror_copy< Kokkos::MemoryTraits >(); + test_mirror_no_initialize< Kokkos::MemoryTraits<0> >(); + test_mirror_no_initialize< Kokkos::MemoryTraits >(); } }; @@ -865,7 +909,7 @@ public: } static void run_test_view_operator_a() { - {TestViewOperator< T, device > f; Kokkos::parallel_for(int(N0),f);} + {TestViewOperator< T, device > f; Kokkos::parallel_for(int(N0),f); Kokkos::fence();} #ifndef KOKKOS_ENABLE_OPENMPTARGET TestViewOperator_LeftAndRight< int[2][3][4][2][3][4], device >f6; f6.testit(); TestViewOperator_LeftAndRight< int[2][3][4][2][3], device >f5; f5.testit(); diff --git a/lib/kokkos/core/unit_test/TestViewAPI_e.hpp b/lib/kokkos/core/unit_test/TestViewAPI_e.hpp index efb34a64cc..76815dc112 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_e.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_e.hpp @@ -194,6 +194,7 @@ inline void test_anonymous_space() { d_anon_dyn_view(j) += 42; } }); + Kokkos::fence(); #endif } @@ -201,4 +202,45 @@ TEST_F( TEST_CATEGORY, anonymous_space ) { test_anonymous_space(); } + +template +struct TestViewOverloadResolution { + // Overload based on value_type and rank + static int foo(Kokkos::View a) { + return 1; + } + static int foo(Kokkos::View a) { + return 2; + } + static int foo(Kokkos::View a) { + return 3; + } + + // Overload based on compile time dimensions + static int bar(Kokkos::View a) { + return 4; + } + static int bar(Kokkos::View a) { + return 5; + } + + static void test_function_overload() { + Kokkos::View a("A",10,3); + int data_type_1 = foo(a); + int data_type_3 = foo(Kokkos::View(a)); + Kokkos::View b("B",10,3,4); + int data_type_2 = foo(b); + Kokkos::View c(a); + int static_extent = bar(c); + ASSERT_EQ(1,data_type_1); + ASSERT_EQ(3,data_type_2); + ASSERT_EQ(1,data_type_3); + ASSERT_EQ(4,static_extent); + } +}; + +TEST_F( TEST_CATEGORY, view_overload_resolution ) +{ + TestViewOverloadResolution::test_function_overload(); +} } diff --git a/lib/kokkos/core/unit_test/TestViewMapping_a.hpp b/lib/kokkos/core/unit_test/TestViewMapping_a.hpp index 03d5e501b9..69247902cd 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_a.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_a.hpp @@ -1012,12 +1012,14 @@ void test_view_mapping() ASSERT_EQ( a.use_count(), 1 ); ASSERT_EQ( b.use_count(), 0 ); -#if !defined( KOKKOS_ENABLE_CUDA_LAMBDA ) && !defined( KOKKOS_ENABLE_ROCM ) +// TODO: a.use_count() and x.use_count() are 0 with the asynchronous HPX backend. Why? +#if !defined( KOKKOS_ENABLE_CUDA_LAMBDA ) && !defined( KOKKOS_ENABLE_ROCM ) && \ + !(defined( KOKKOS_ENABLE_HPX ) && defined( KOKKOS_ENABLE_HPX_ASYNC_DISPATCH )) // Cannot launch host lambda when CUDA lambda is enabled. typedef typename Kokkos::Impl::HostMirror< Space >::Space::execution_space host_exec_space; - Kokkos::parallel_for( Kokkos::RangePolicy< host_exec_space >( 0, 10 ), KOKKOS_LAMBDA ( int i ) { + Kokkos::parallel_for( Kokkos::RangePolicy< host_exec_space >( 0, 10 ), KOKKOS_LAMBDA ( int ) { // 'a' is captured by copy, and the capture mechanism converts 'a' to an // unmanaged copy. When the parallel dispatch accepts a move for the // lambda, this count should become 1. diff --git a/lib/kokkos/core/unit_test/TestViewMapping_b.hpp b/lib/kokkos/core/unit_test/TestViewMapping_b.hpp index 7c7807f60d..36fc0461a4 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_b.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_b.hpp @@ -173,12 +173,12 @@ void test_view_mapping_class_value() { typedef typename Space::execution_space ExecSpace; - ExecSpace::fence(); + ExecSpace().fence(); { Kokkos::View< MappingClassValueType, ExecSpace > a( "a" ); - ExecSpace::fence(); + ExecSpace().fence(); } - ExecSpace::fence(); + ExecSpace().fence(); } TEST_F( TEST_CATEGORY , view_mapping_class_value ) diff --git a/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp b/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp index 0c2d22e013..62bd582871 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp @@ -201,6 +201,7 @@ struct TestViewMappingSubview long error_count = -1; Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, 1 ), *this, error_count ); + ASSERT_EQ( error_count, 0 ); } }; diff --git a/lib/kokkos/core/unit_test/TestViewSubview.hpp b/lib/kokkos/core/unit_test/TestViewSubview.hpp index 207fbb148d..bffc77181f 100644 --- a/lib/kokkos/core/unit_test/TestViewSubview.hpp +++ b/lib/kokkos/core/unit_test/TestViewSubview.hpp @@ -48,6 +48,86 @@ #include #include #include +#include + +// TODO @refactoring move this to somewhere common + +//------------------------------------------------------------------------------ + +template +struct _kokkos____________________static_test_failure_____; + +template +struct static_predicate_message {}; + +//------------------------------------------------------------------------------ + +template class, class...> +struct static_assert_predicate_true_impl; + +template