New upstream version 1.5
Nicholas Breen
4 years ago
0 | --- | |
1 | # BasedOnStyle: Google | |
2 | AccessModifierOffset: -1 | |
3 | ConstructorInitializerIndentWidth: 4 | |
4 | AlignEscapedNewlinesLeft: true | |
5 | AlignTrailingComments: true | |
6 | AllowAllParametersOfDeclarationOnNextLine: true | |
7 | AlwaysBreakTemplateDeclarations: true | |
8 | AlwaysBreakBeforeMultilineStrings: true | |
9 | AllowShortIfStatementsOnASingleLine: true | |
10 | AllowShortLoopsOnASingleLine: true | |
11 | BreakBeforeBinaryOperators: false | |
12 | BreakBeforeTernaryOperators: true | |
13 | BreakConstructorInitializersBeforeComma: false | |
14 | BinPackParameters: true | |
15 | ColumnLimit: 80 | |
16 | ConstructorInitializerAllOnOneLineOrOnePerLine: true | |
17 | DerivePointerBinding: true | |
18 | ExperimentalAutoDetectBinPacking: false | |
19 | IndentCaseLabels: true | |
20 | MaxEmptyLinesToKeep: 1 | |
21 | NamespaceIndentation: None | |
22 | ObjCSpaceBeforeProtocolList: false | |
23 | PenaltyBreakBeforeFirstCallParameter: 1 | |
24 | PenaltyBreakComment: 60 | |
25 | PenaltyBreakString: 1000 | |
26 | PenaltyBreakFirstLessLess: 120 | |
27 | PenaltyExcessCharacter: 1000000 | |
28 | PenaltyReturnTypeOnItsOwnLine: 200 | |
29 | PointerBindsToType: true | |
30 | SpacesBeforeTrailingComments: 2 | |
31 | Cpp11BracedListStyle: true | |
32 | Standard: Auto | |
33 | IndentWidth: 2 | |
34 | TabWidth: 8 | |
35 | UseTab: Never | |
36 | BreakBeforeBraces: Attach | |
37 | IndentFunctionDeclarationAfterType: true | |
38 | SpacesInParentheses: false | |
39 | SpacesInAngles: false | |
40 | SpaceInEmptyParentheses: false | |
41 | SpacesInCStyleCastParentheses: false | |
42 | SpaceAfterControlStatementKeyword: true | |
43 | SpaceBeforeAssignmentOperators: true | |
44 | ContinuationIndentWidth: 4 | |
45 | ... | |
46 |
0 | *~ | |
1 | Makefile | |
2 | ||
3 | libvotca*.pc | |
4 | libvotca*.a | |
5 | libvotca*.so | |
6 | libvotca*.so.* | |
7 | ||
8 | share/doc/html | |
9 | share/doc/Doxyfile | |
10 | ||
11 | include/votca/xtp/votca_config.h | |
12 | src/libxtp/gitversion.h | |
13 | include/votca/xtp/votca_config.h | |
14 | ||
15 | src/tools/xtp_dump | |
16 | src/tools/xtp_parallel | |
17 | src/tools/xtp_map | |
18 | src/tools/xtp_run | |
19 | src/tools/xtp_tools | |
20 | src/tools/xtp_overlap | |
21 | src/tools/xtp_kmc_run | |
22 | src/dipro/*.mod | |
23 | src/dipro/*.x | |
24 | src/tools/*.man | |
25 | ||
26 | scripts/xtp_dipro.out | |
27 | scripts/xtp_dipro | |
28 | scripts/xtp_update | |
29 | scripts/xtp_update.out | |
30 | scripts/xtp_testsuite | |
31 | scripts/xtp_testsuite.out | |
32 | scripts/xtp_update_exciton | |
33 | scripts/xtp_update_exciton.out | |
34 | scripts/xtp_basisset | |
35 | scripts/xtp_basisset.out | |
36 | scripts/xtp_makeauxbasis | |
37 | scripts/xtp_makeauxbasis.out | |
38 | ||
39 | netbeans/*/build | |
40 | .dep.inc | |
41 | */nbproject/private | |
42 | netbeans/libxtp/dist/Debug/* | |
43 | netbeans/libxtp/nbproject/Package-Debug.bash | |
44 | netbeans/libxtp/nbproject/Package-Release.bash | |
45 | ||
46 | netbeans/xtp_map/nbproject/Package-Debug.bash | |
47 | netbeans/xtp_map/nbproject/Package-Release.bash | |
48 | ||
49 | netbeans/xtp_run/nbproject/Package-Debug.bash | |
50 | netbeans/xtp_run/nbproject/Package-Release.bash | |
51 | ||
52 | CMakeFiles | |
53 | cmake_install.cmake | |
54 | CMakeCache.txt | |
55 | install_manifest.txt | |
56 | /netbeans/xtp_app/dist/ | |
57 | /netbeans/libxtp/dist/ | |
58 | /netbeans/libxtp/nbproject/private/private.xml | |
59 | /netbeans/libxtp/nbproject/Makefile-Release.mk | |
60 | /netbeans/libxtp/nbproject/Makefile-Debug.mk | |
61 | /netbeans/libxtp/nbproject/configurations.xml | |
62 | ||
63 | ||
64 | /build |
0 | stages: | |
1 | - canary | |
2 | - build | |
3 | ||
4 | .build: | |
5 | retry: | |
6 | max: 2 | |
7 | variables: | |
8 | CCACHE_DIR: "${CI_PROJECT_DIR}/ccache" | |
9 | CXXFLAGS: "-Wall -Werror" | |
10 | DISTRO: "latest" | |
11 | image: votca/buildenv:${DISTRO} | |
12 | stage: build | |
13 | cache: | |
14 | paths: | |
15 | - ccache/ | |
16 | script: | |
17 | - ccache -z | |
18 | - j="$(grep -c processor /proc/cpuinfo 2>/dev/null)" || j=0; ((j++)) | |
19 | - git branch commit_of_build_${CI_BUILD_ID} ${CI_COMMIT_SHA} | |
20 | - cd $HOME | |
21 | - git clone --recursive https://github.com/votca/votca | |
22 | - pushd votca | |
23 | - if [[ ( ${CI_COMMIT_REF_NAME} =~ ^for/([^/]*)/.* || ${CI_COMMIT_REF_NAME} =~ ^(stable)$ ) && ${BASH_REMATCH[1]} != master ]]; then | |
24 | git checkout -b ${BASH_REMATCH[1]} origin/${BASH_REMATCH[1]} && git submodule update --recursive --init; | |
25 | fi | |
26 | - git -C ${CI_PROJECT_NAME} fetch ${CI_PROJECT_DIR} commit_of_build_${CI_BUILD_ID} | |
27 | - git -C ${CI_PROJECT_DIR} branch -d commit_of_build_${CI_BUILD_ID} | |
28 | - git -C ${CI_PROJECT_NAME} checkout -f ${CI_COMMIT_SHA} | |
29 | - mkdir -p build | |
30 | - pushd build | |
31 | - cmake .. -DENABLE_TESTING=ON -DBUILD_XTP=ON -DBUILD_CTP=ON -DBUILD_XTP_MANUAL=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} | |
32 | - make -O -k -j${j} -l${j} VERBOSE=1 | |
33 | - make test CTEST_OUTPUT_ON_FAILURE=1 | |
34 | - make install DESTDIR=${PWD}/install && rm -rf ${PWD}/install/usr && rmdir ${PWD}/install | |
35 | - sudo make install | |
36 | - ccache -s | |
37 | ||
38 | Debug GCC: | |
39 | stage: canary | |
40 | variables: | |
41 | CC: "gcc" | |
42 | CXX: "g++" | |
43 | CMAKE_BUILD_TYPE: "Debug" | |
44 | extends: .build | |
45 | ||
46 | None GCC: | |
47 | variables: | |
48 | CC: "gcc" | |
49 | CXX: "g++" | |
50 | CMAKE_BUILD_TYPE: "" | |
51 | extends: .build | |
52 | ||
53 | None Clang: | |
54 | variables: | |
55 | CC: "clang" | |
56 | CXX: "clang++" | |
57 | CMAKE_BUILD_TYPE: "" | |
58 | extends: .build | |
59 | ||
60 | Debug Clang: | |
61 | variables: | |
62 | CC: "clang" | |
63 | CXX: "clang++" | |
64 | CMAKE_BUILD_TYPE: "Debug" | |
65 | extends: .build | |
66 | ||
67 | Release GCC: | |
68 | variables: | |
69 | CC: "gcc" | |
70 | CXX: "g++" | |
71 | CMAKE_BUILD_TYPE: "Release" | |
72 | extends: .build | |
73 | ||
74 | Release Clang: | |
75 | variables: | |
76 | CC: "clang" | |
77 | CXX: "clang++" | |
78 | CMAKE_BUILD_TYPE: "Release" | |
79 | extends: .build | |
80 | ||
81 | Debug GCC Ubuntu: | |
82 | variables: | |
83 | CC: "gcc" | |
84 | CXX: "g++" | |
85 | CMAKE_BUILD_TYPE: "Debug" | |
86 | DISTRO: "ubuntu" | |
87 | extends: .build | |
88 | ||
89 | Debug Clang Ubuntu: | |
90 | variables: | |
91 | CC: "clang" | |
92 | CXX: "clang++" | |
93 | CMAKE_BUILD_TYPE: "Debug" | |
94 | DISTRO: "ubuntu" | |
95 | extends: .build | |
96 | ||
97 | Release GCC Ubuntu: | |
98 | variables: | |
99 | CC: "gcc" | |
100 | CXX: "g++" | |
101 | CMAKE_BUILD_TYPE: "Release" | |
102 | DISTRO: "ubuntu" | |
103 | extends: .build | |
104 | ||
105 | Release Clang Ubuntu: | |
106 | variables: | |
107 | CC: "clang" | |
108 | CXX: "clang++" | |
109 | CMAKE_BUILD_TYPE: "Release" | |
110 | DISTRO: "ubuntu" | |
111 | extends: .build |
0 | # the original source of this file can be found in votca/votca repository | |
1 | # add changes there! | |
2 | # To update: | |
3 | # wget -O .travis.yml https://raw.githubusercontent.com/votca/votca/master/.travis.yml | |
4 | language: cpp | |
5 | ||
6 | sudo: required | |
7 | ||
8 | services: | |
9 | - docker | |
10 | ||
11 | env: | |
12 | matrix: | |
13 | - ENV=1 | |
14 | - ENV=2 | |
15 | - ENV=3 | |
16 | - ENV=4 | |
17 | - ENV=5 | |
18 | - ENV=6 | |
19 | - ENV=7 | |
20 | - ENV=8 | |
21 | - ENV=9 | |
22 | - ENV=10 | |
23 | - ENV=11 | |
24 | - ENV=12 | |
25 | - ENV=13 | |
26 | - ENV=14 | |
27 | - ENV=15 | |
28 | - ENV=16 | |
29 | - ENV=17 | |
30 | - ENV=18 | |
31 | - ENV=19 | |
32 | - ENV=20 | |
33 | ||
34 | before_script: | |
35 | - git checkout -b current_commit | |
36 | - cd ../../ | |
37 | - if [[ ${TRAVIS_REPO_SLUG} = */votca ]]; then | |
38 | if [[ ${TRAVIS_BRANCH} = next ]]; then | |
39 | git -C ${TRAVIS_REPO_SLUG} submodule foreach git checkout master; | |
40 | git -C ${TRAVIS_REPO_SLUG} submodule foreach git pull; | |
41 | fi; | |
42 | cp -vr ${TRAVIS_REPO_SLUG}/docker ${HOME}; | |
43 | mv -v ${TRAVIS_REPO_SLUG} $HOME/docker; | |
44 | else | |
45 | git clone --recursive https://github.com/votca/votca.git $HOME/docker/votca; | |
46 | if [[ ${TRAVIS_BRANCH} != master ]]; then | |
47 | git -C ${HOME}/docker/votca checkout -b ${TRAVIS_BRANCH} ${TRAVIS_TAG:-origin/${TRAVIS_BRANCH}} && git -C ${HOME}/docker/votca submodule update --recursive --init; | |
48 | fi; | |
49 | git -C ${HOME}/docker/votca/${TRAVIS_REPO_SLUG#*/} fetch ${PWD}/${TRAVIS_REPO_SLUG} current_commit; | |
50 | git -C ${HOME}/docker/votca/${TRAVIS_REPO_SLUG#*/} checkout -f FETCH_HEAD; | |
51 | cp -vr ${HOME}/docker/votca/docker/* ${HOME}/docker; | |
52 | if [[ -d ${TRAVIS_REPO_SLUG}/docker ]]; then cp -vr ${TRAVIS_REPO_SLUG}/docker/* ${HOME}/docker; fi; | |
53 | fi | |
54 | - source ${HOME}/docker/set_env.sh | |
55 | - cp -r $HOME/.ccache ${HOME}/docker/ccache | |
56 | - sed -i "1s/latest/${DISTRO:-latest}/" ${HOME}/docker/Dockerfile | |
57 | - if [[ ! ${SKIP} ]]; then | |
58 | travis_retry timeout 540 docker pull $(sed -n '1s/FROM //p' ${HOME}/docker/Dockerfile); | |
59 | fi | |
60 | ||
61 | script: | |
62 | - if [[ ! ${SKIP} ]]; then | |
63 | travis_retry docker build "${docker_opts[@]}" | |
64 | --build-arg CC=${CC} --build-arg CXX=${CXX} --build-arg CXXFLAGS="-Wall ${WERROR:+-Werror}" | |
65 | --build-arg CI=${CI} --build-arg TRAVIS=${TRAVIS} --build-arg TRAVIS_OS_NAME=${DISTRO:-fedora} | |
66 | --build-arg TRAVIS_BRANCH=${TRAVIS_BRANCH} --build-arg TRAVIS_JOB_NUMBER=${TRAVIS_JOB_NUMBER} | |
67 | --build-arg TRAVIS_PULL_REQUEST=${TRAVIS_PULL_REQUEST} --build-arg TRAVIS_JOB_ID=${TRAVIS_JOB_ID} | |
68 | --build-arg TRAVIS_TAG=${TRAVIS_TAG} --build-arg TRAVIS_REPO_SLUG=${TRAVIS_REPO_SLUG} | |
69 | --build-arg TRAVIS_COMMIT=${TRAVIS_COMMIT} | |
70 | ${TRAVIS_TAG:+-t votca/votca:${TRAVIS_TAG}} | |
71 | -t votca/votca:latest -t votca/votca:${TRAVIS_BRANCH} ${HOME}/docker/ && | |
72 | rm -rf $HOME/.ccache && | |
73 | CON=$(docker run -d votca/votca:${TRAVIS_BRANCH} /bin/bash) && | |
74 | docker cp ${CON}:/home/votca/.ccache ${HOME}/; | |
75 | fi | |
76 | ||
77 | after_success: | |
78 | - shopt -s extglob && [[ ${TRAVIS_BRANCH} = @(master|stable|v1.*) && ${CC} = *gcc* && ${DOCKERHUB} = yes && ! ${SKIP} ]] && DEPLOY=yes | |
79 | - if [[ ${TRAVIS_BRANCH} = master ]]; then DOCKER_TAG=latest; else DOCKER_TAG="${TRAVIS_BRANCH}"; fi | |
80 | - if [[ ${DOCKER_USERNAME} && ${DOCKER_PASSWORD} && ${TRAVIS_PULL_REQUEST} == false && ${DEPLOY} ]]; then | |
81 | docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"; | |
82 | docker push "${TRAVIS_REPO_SLUG}:${DOCKER_TAG}"; | |
83 | fi | |
84 | - if [[ ${DOXYGEN} = yes && ! ${SKIP} ]]; then | |
85 | git clone --depth=1 https://github.com/votca/doxygen.git "$HOME/devdoc"; | |
86 | cd $HOME/devdoc; | |
87 | rm -f *; | |
88 | git checkout -- CNAME; | |
89 | docker cp ${CON}:/home/votca/votca/build/share/doc/html . ; | |
90 | mv html/* .; rmdir html; | |
91 | docker cp ${CON}:/home/votca/votca/build/csg-manual/manual.pdf . ; | |
92 | docker cp ${CON}:/home/votca/votca/build/ctp/manual/ctp-manual.pdf . ; | |
93 | docker cp ${CON}:/home/votca/votca/build/xtp/manual/xtp-manual.pdf . ; | |
94 | git add --all .; | |
95 | if [[ ${TRAVIS_BRANCH} = master && ${encrypted_7abbb71c3ba6_key} && ${encrypted_7abbb71c3ba6_iv} && ${TRAVIS_PULL_REQUEST} == false ]]; then | |
96 | git config --global user.name "Automatic Deployment (Travis CI)"; | |
97 | git config --global user.email "votca-commits@googlegroups.com"; | |
98 | git commit -m "Documentation Update"; | |
99 | openssl aes-256-cbc -K $encrypted_7abbb71c3ba6_key -iv $encrypted_7abbb71c3ba6_iv -in keys/deploy3.enc -out ~/.ssh/id_rsa -d; | |
100 | chmod 600 ~/.ssh/id_rsa; | |
101 | git push git@github.com:votca/doxygen.git gh-pages; | |
102 | else | |
103 | git status; | |
104 | git diff --cached --no-color | head -c 1k; | |
105 | fi; | |
106 | fi | |
107 | ||
108 | branches: | |
109 | only: | |
110 | - master | |
111 | - development | |
112 | - stable | |
113 | - next | |
114 | - /^v\d+\.\d+(\.\d+|_rc\d+)?$/ | |
115 | ||
116 | cache: | |
117 | - ccache | |
118 | ||
119 | compiler: | |
120 | - gcc | |
121 | - clang | |
122 | ||
123 | notifications: | |
124 | email: | |
125 | - votca-commits@googlegroups.com |
0 | For more detailed information about the changes see the history of the [repository](https://github.com/votca/xtp/commits/master). | |
1 | ||
2 | ## Version 1.5 _SuperVictor_ (released 31.01.19) | |
3 | * enable gitlab CI | |
4 | ||
5 | ## Version 1.5_rc3 (released 19.01.19) | |
6 | * travis: fixed bug in building tags | |
7 | ||
8 | ## Version 1.5_rc2 (released 16.01.19) | |
9 | * fix parallel build of manual | |
10 | * fix usage on inkscape on arm arch | |
11 | * clean up namespace in header | |
12 | ||
13 | ## Version 1.5_rc1 (released 28.12.18) | |
14 | * optimized GW-BSE code and integral engine | |
15 | * added closed shell DFT code which supports hybrid functionals | |
16 | * removed ctp dependency | |
17 | * atm no support for site energy calculation | |
18 | * CHELPG fit for ground and excited states | |
19 | * merged igwbse and idft into one calculator | |
20 | * added unit and integration test | |
21 | * improved geometry optimiser | |
22 | * replaced ublas with Eigen3 | |
23 | * replaced boost serialisation with hdf5 files | |
24 | ||
25 | ## Version 1.4.1 (released 02.09.17) | |
26 | * fix pkg-config file | |
27 | ||
28 | ## Version 1.4 (released 29.10.16) | |
29 | * fixed a bug in gwbse | |
30 | * added missing copyright | |
31 | * cmake: fixed underlinking | |
32 | ||
33 | ## Version 1.4_rc1 (released 26.09.16) | |
34 | * include manual | |
35 | * an extension of the whole workflow from electrons and holes, to singelt and triplet excitons | |
36 | * a fully functional GW-BSE code optimized for molecular properties, including excited state geometry optimizsation | |
37 | * Inclusion of LIBXC to calculate Exchange correlation matrices, allowing interfacing GW-BSE with many quantum mechanical packages | |
38 | * support for ORCA DFT package | |
39 | * framework to use stochastic models to generate larger system | |
40 | * better performance of larger systems | |
41 | * new calculators: egwbse,igwbse,ewald,..... | |
42 | * support for intel mkl library and compilers for better performance | |
43 | * Aperiodic polarisation embedding to calculate classical configuration energies without cutoffs | |
44 | * xtp_update_exciton to update state file to newest format | |
45 | * integration of moo and kmc into xtp for easier installation | |
46 | * kmc_lifetime calculator to simulate exciton movement with lifetimes | |
47 | * partialcharges to extract atomic charges from qm calculation | |
48 | * renaming from ctp to xtp | |
49 | * many bugfixes | |
50 | ||
51 | ||
52 | ||
53 | ## Version 1.3 (released XX.09.15) | |
54 | * new executables: ctp_tools, ctp_dump, ctp_parallel, xtp_testsuite, xtp_update | |
55 | * ctp_tools wraps light-weight tools that assist e.g. in generating the system mapping file | |
56 | * ctp_dump extracts information from the state file to human-readable format | |
57 | * ctp_parallel wraps heavy-duty job-based calculators, allowing for synchronization across processes | |
58 | * ctp_testsuite provides an easy-to-use environment to run selected tests as well as individual calculators | |
59 | * ctp_update updates an existent state file to the current version | |
60 | * new calculators: edft, idft, pdb2map, xqmultipole, ... | |
61 | * edft / idft (provide interfaces to the GAUSSIAN, TURBOMOLE & NWCHEM packages to compute couplings, internal energies and partial charges) | |
62 | * pdb2map (generates a system mapping file from an input coordinate file) | |
63 | * xqmultipole (computes classical configuration energies of charged clusters embedded in a molecular environment) | |
64 | * enhanced usability via the command-line help, tutorial & test-suite | |
65 | * a GUI tutorial assists with the first practical steps in using VOTCA-CTP | |
66 | * an extended and homogenized help system provides short infos on individual calculator options from the command line | |
67 | ||
68 | ## Version 1.0 (released 23.10.11) | |
69 | * parallel evaluation of site energies (Thole model + GDMA) - Tinker no longer required | |
70 | * much clearer input files (and many more checks for input errors) | |
71 | * most of calculators are parallel and can be used on a cluster | |
72 | * bug in zindo/ctp interface fixed | |
73 | * state file now contains the atomistic trajectory, rigid fragments and conjugates segments | |
74 | * support for several MD frames |
0 | cmake_minimum_required(VERSION 3.1) | |
1 | project(votca-xtp) | |
2 | ||
3 | ||
4 | set(PROJECT_VERSION "1.5") | |
5 | set(PROJECT_CONTACT "bugs@votca.org") | |
6 | string(REGEX REPLACE "^[1-9]+\\.([1-9]+).*$" "\\1" SOVERSION "${PROJECT_VERSION}") | |
7 | if (NOT ${SOVERSION} MATCHES "[1-9]+") | |
8 | message(FATAL_ERROR "Could not determind SOVERSION from ${PROJECT_VERSION}") | |
9 | endif (NOT ${SOVERSION} MATCHES "[1-9]+") | |
10 | ||
11 | # Cmake modules/macros are in a subdirectory to keep this file cleaner | |
12 | set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules) | |
13 | ||
14 | if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) | |
15 | #Release comes with -O3 by default | |
16 | set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) | |
17 | endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) | |
18 | if(CMAKE_BUILD_TYPE STREQUAL Debug) | |
19 | add_definitions(-DDEBUG) | |
20 | elseif(CMAKE_BUILD_TYPE STREQUAL Release) | |
21 | add_definitions(-DBOOST_UBLAS_NDEBUG) | |
22 | endif() | |
23 | ||
24 | enable_language(CXX) | |
25 | ||
26 | ###################################################################### | |
27 | # compiler tests | |
28 | # these need ot be done early (before further tests). | |
29 | ##################################################################### | |
30 | ||
31 | include(CheckCXXCompilerFlag) | |
32 | set(CMAKE_CXX_STANDARD 11) | |
33 | set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
34 | set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11 | |
35 | if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND CMAKE_VERSION VERSION_LESS "3.6.0") | |
36 | message(FATAL_ERROR "Using the intel compiler requires cmake 3.6 or higher") | |
37 | endif() | |
38 | ||
39 | find_package(OpenMP) | |
40 | if (OPENMP_FOUND) | |
41 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") | |
42 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") | |
43 | endif() | |
44 | ||
45 | ||
46 | ||
47 | ||
48 | ######################################################################## | |
49 | # User input options # | |
50 | ######################################################################## | |
51 | if(GWBSE_DOUBLE) | |
52 | add_definitions(-DGWBSE_DOUBLE) | |
53 | set(GWBSE_DOUBLE_VALUE 1) | |
54 | else() | |
55 | set(GWBSE_DOUBLE_VALUE 0) | |
56 | endif() | |
57 | add_definitions(-DGWBSE_DOUBLE=${GWBSE_DOUBLE_VALUE}) | |
58 | ||
59 | ||
60 | find_package(LIBXC REQUIRED) | |
61 | include_directories(${LIBXC_INCLUDE_DIRS}) | |
62 | ||
63 | find_package(CERES REQUIRED) | |
64 | include_directories(${CERES_INCLUDE_DIRS}) | |
65 | ||
66 | find_package(HDF5 1.8 REQUIRED COMPONENTS CXX) | |
67 | include_directories(${HDF5_INCLUDE_DIRS}) | |
68 | ||
69 | if (${HDF5_VERSION} GREATER 1.8) | |
70 | message(WARNING "HDF5 will be used such that it is compatible with version 1.8.") | |
71 | endif() | |
72 | ||
73 | ||
74 | option(BUILD_SHARED_LIBS "Build shared libs" ON) | |
75 | include(GNUInstallDirs) | |
76 | ||
77 | ||
78 | option(ENABLE_TESTING "Build and enable testing stuff" OFF) | |
79 | if(ENABLE_TESTING) | |
80 | enable_testing() | |
81 | endif(ENABLE_TESTING) | |
82 | ||
83 | #for votca_config.h | |
84 | include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) | |
85 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) | |
86 | ######################################################################## | |
87 | #Find external packages | |
88 | ######################################################################## | |
89 | if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.git) | |
90 | find_package(Git) | |
91 | endif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.git) | |
92 | ||
93 | find_package(Boost 1.57.0 REQUIRED COMPONENTS program_options serialization filesystem system timer) | |
94 | include_directories(${Boost_INCLUDE_DIRS}) | |
95 | set (BOOST_CFLAGS_PKG "-I${Boost_INCLUDE_DIRS}") | |
96 | set(BOOST_LIBS_PKG "-L${Boost_LIBRARY_DIRS}") | |
97 | foreach(_blib ${Boost_LIBRARIES}) | |
98 | string(REGEX REPLACE ".*/lib([^/]*)\\.[^.]*$" "-l\\1" _blib ${_blib}) | |
99 | set(BOOST_LIBS_PKG "${BOOST_LIBS_PKG} ${_blib}") | |
100 | endforeach(_blib) | |
101 | ||
102 | option(BUILD_MANPAGES "Build manpages (might lead to problem on system without rpath" OFF) | |
103 | #define this target here, so that individual man pages can append to it. | |
104 | if(NOT TARGET manpages) | |
105 | add_custom_target(manpages ALL) | |
106 | endif() | |
107 | ||
108 | find_package(VOTCA_TOOLS REQUIRED) | |
109 | include_directories(${VOTCA_TOOLS_INCLUDE_DIRS}) | |
110 | find_package(VOTCA_CSG REQUIRED) | |
111 | include_directories(${VOTCA_CSG_INCLUDE_DIRS}) | |
112 | ######################################################################## | |
113 | # Checks what linear algebra packages are installed # | |
114 | ######################################################################## | |
115 | ||
116 | ||
117 | ||
118 | ######################################################################## | |
119 | # Basic system tests (standard libraries, headers, functions, types) # | |
120 | ######################################################################## | |
121 | include(CheckIncludeFile) | |
122 | foreach(HEADER assert.h) | |
123 | check_include_file(${HEADER} FOUND_${HEADER}) | |
124 | if(NOT FOUND_${HEADER}) | |
125 | message(FATAL_ERROR "Could not find needed header - ${HEADER}") | |
126 | endif(NOT FOUND_${HEADER}) | |
127 | endforeach(HEADER) | |
128 | ||
129 | include(CheckIncludeFileCXX) | |
130 | foreach(HEADER algorithm) | |
131 | check_include_file_cxx(${HEADER} FOUND_${HEADER}) | |
132 | if(NOT FOUND_${HEADER}) | |
133 | message(FATAL_ERROR "Could not find needed header - ${HEADER}") | |
134 | endif(NOT FOUND_${HEADER}) | |
135 | endforeach(HEADER) | |
136 | ||
137 | set(MATH_LIBRARIES "m" CACHE STRING "math library") | |
138 | mark_as_advanced( MATH_LIBRARIES ) | |
139 | include(CheckLibraryExists) | |
140 | foreach(FUNC sqrt) | |
141 | check_library_exists(${MATH_LIBRARIES} ${FUNC} "" FOUND_${FUNC}_${MATH_LIBRARIES}) | |
142 | if(NOT FOUND_${FUNC}_${MATH_LIBRARIES}) | |
143 | message(FATAL_ERROR "Could not find needed math function - ${FUNC}") | |
144 | endif(NOT FOUND_${FUNC}_${MATH_LIBRARIES}) | |
145 | endforeach(FUNC) | |
146 | ||
147 | ###################################### | |
148 | # Include the following subdirectory # | |
149 | ###################################### | |
150 | add_subdirectory(include/votca/xtp) | |
151 | add_subdirectory(scripts) | |
152 | add_subdirectory(src) | |
153 | add_subdirectory(share) | |
154 | ||
155 | option(BUILD_XTP_MANUAL "Build xtp-manual" OFF) | |
156 | if(BUILD_XTP_MANUAL) | |
157 | add_subdirectory(manual) | |
158 | endif() |
0 | # - Find Ceres library | |
1 | # Find the native Ceres includes and library | |
2 | # This module defines | |
3 | # CERES_INCLUDE_DIRS, where to find ceres.h, Set when | |
4 | # CERES_INCLUDE_DIR is found. | |
5 | # CERES_LIBRARIES, libraries to link against to use Ceres. | |
6 | # CERES_ROOT_DIR, The base directory to search for Ceres. | |
7 | # This can also be an environment variable. | |
8 | # CERES_VERSION will contain the version ceres version. | |
9 | # CERES_FOUND, If false, do not try to use Ceres. | |
10 | # | |
11 | # also defined, but not for general use are | |
12 | # CERES_LIBRARY, where to find the Ceres library. | |
13 | ||
14 | # If CERES_ROOT_DIR was defined in the environment, use it. | |
15 | IF(NOT CERES_ROOT_DIR AND NOT $ENV{CERES_ROOT_DIR} STREQUAL "") | |
16 | SET(CERES_ROOT_DIR $ENV{CERES_ROOT_DIR}) | |
17 | ENDIF() | |
18 | ||
19 | Set(CERES_SEARCH_DIRS | |
20 | ${CERES_ROOT_DIR} | |
21 | /usr/local/ | |
22 | /usr/ | |
23 | /usr/local/homebrew/ # Mac OS X | |
24 | /opt/local/var/macports/software # Mac OS X. | |
25 | /opt/local/ | |
26 | ) | |
27 | ||
28 | FIND_PATH(CERES_INCLUDE_DIR | |
29 | NAMES | |
30 | ceres/ceres.h | |
31 | HINTS | |
32 | ${CERES_SEARCH_DIRS} | |
33 | PATH_SUFFIXES | |
34 | include | |
35 | ) | |
36 | ||
37 | FIND_LIBRARY(CERES_LIBRARY | |
38 | NAMES | |
39 | ceres | |
40 | HINTS | |
41 | ${CERES_SEARCH_DIRS} | |
42 | PATH_SUFFIXES | |
43 | lib64 lib | |
44 | ) | |
45 | ||
46 | # handle the QUIETLY and REQUIRED arguments and set CERES_FOUND to TRUE if | |
47 | # all listed variables are TRUE | |
48 | INCLUDE(FindPackageHandleStandardArgs) | |
49 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(ceres DEFAULT_MSG | |
50 | CERES_LIBRARY CERES_INCLUDE_DIR) | |
51 | ||
52 | IF(CERES_FOUND) | |
53 | SET(CERES_LIBRARIES ${CERES_LIBRARY}) | |
54 | SET(CERES_INCLUDE_DIRS ${CERES_INCLUDE_DIR}) | |
55 | ENDIF(CERES_FOUND) | |
56 | ||
57 | IF (CERES_INCLUDE_DIRS) | |
58 | set (CERES_VERSION_FILE ${CERES_INCLUDE_DIRS}/ceres/version.h) | |
59 | IF (NOT EXISTS ${CERES_VERSION_FILE}) | |
60 | message (WARNING | |
61 | "Could not find ${CERES_VERSION_FILE}") | |
62 | ELSE (NOT EXISTS ${CERES_VERSION_FILE}) | |
63 | FILE (READ ${CERES_VERSION_FILE} CERES_VERSION_FILE_CONTENTS) | |
64 | ||
65 | STRING(REGEX MATCH "#define CERES_VERSION_MAJOR [0-9]+" | |
66 | CERES_VERSION_MAJOR ${CERES_VERSION_FILE_CONTENTS}) | |
67 | STRING(REPLACE "#define CERES_VERSION_MAJOR " "" | |
68 | CERES_VERSION_MAJOR ${CERES_VERSION_MAJOR}) | |
69 | ||
70 | STRING(REGEX MATCH "#define CERES_VERSION_MINOR [0-9]+" | |
71 | CERES_VERSION_MINOR ${CERES_VERSION_FILE_CONTENTS}) | |
72 | STRING(REPLACE "#define CERES_VERSION_MINOR " "" | |
73 | CERES_VERSION_MINOR ${CERES_VERSION_MINOR}) | |
74 | ||
75 | STRING(REGEX MATCH "#define CERES_VERSION_REVISION [0-9]+" | |
76 | CERES_VERSION_REVISION ${CERES_VERSION_FILE_CONTENTS}) | |
77 | STRING(REGEX REPLACE "#define CERES_VERSION_REVISION " "" | |
78 | CERES_VERSION_REVISION ${CERES_VERSION_REVISION}) | |
79 | ||
80 | SET(CERES_VERSION ${CERES_VERSION_MAJOR}.${CERES_VERSION_MINOR}.${CERES_VERSION_REVISION}) | |
81 | ENDIF(NOT EXISTS ${CERES_VERSION_FILE}) | |
82 | ENDIF(CERES_INCLUDE_DIRS) | |
83 | ||
84 | INCLUDE(FindPackageHandleStandardArgs) | |
85 | ||
86 | FIND_PACKAGE_HANDLE_STANDARD_ARGS(CERES REQUIRED_VARS CERES_INCLUDE_DIRS | |
87 | VERSION_VAR CERES_VERSION) | |
88 | ||
89 | MARK_AS_ADVANCED( | |
90 | CERES_INCLUDE_DIR | |
91 | CERES_LIBRARY | |
92 | CERES_VERSION | |
93 | ) |
0 | # - Try to find Eigen3 lib | |
1 | # | |
2 | # This module supports requiring a minimum version, e.g. you can do | |
3 | # find_package(Eigen3 3.1.2) | |
4 | # to require version 3.1.2 or newer of Eigen3. | |
5 | # | |
6 | # Once done this will define | |
7 | # | |
8 | # EIGEN3_FOUND - system has eigen lib with correct version | |
9 | # EIGEN3_INCLUDE_DIR - the eigen include directory | |
10 | # EIGEN3_VERSION - eigen version | |
11 | # | |
12 | # and the following imported target: | |
13 | # | |
14 | # Eigen3::Eigen - The header-only Eigen library | |
15 | # | |
16 | # This module reads hints about search locations from | |
17 | # the following environment variables: | |
18 | # | |
19 | # EIGEN3_ROOT | |
20 | # EIGEN3_ROOT_DIR | |
21 | ||
22 | # Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org> | |
23 | # Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr> | |
24 | # Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com> | |
25 | # Redistribution and use is allowed according to the terms of the 2-clause BSD license. | |
26 | ||
27 | if(NOT Eigen3_FIND_VERSION) | |
28 | if(NOT Eigen3_FIND_VERSION_MAJOR) | |
29 | set(Eigen3_FIND_VERSION_MAJOR 2) | |
30 | endif(NOT Eigen3_FIND_VERSION_MAJOR) | |
31 | if(NOT Eigen3_FIND_VERSION_MINOR) | |
32 | set(Eigen3_FIND_VERSION_MINOR 91) | |
33 | endif(NOT Eigen3_FIND_VERSION_MINOR) | |
34 | if(NOT Eigen3_FIND_VERSION_PATCH) | |
35 | set(Eigen3_FIND_VERSION_PATCH 0) | |
36 | endif(NOT Eigen3_FIND_VERSION_PATCH) | |
37 | ||
38 | set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") | |
39 | endif(NOT Eigen3_FIND_VERSION) | |
40 | ||
41 | macro(_eigen3_check_version) | |
42 | file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) | |
43 | ||
44 | string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") | |
45 | set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") | |
46 | string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") | |
47 | set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") | |
48 | string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") | |
49 | set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") | |
50 | ||
51 | set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) | |
52 | if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) | |
53 | set(EIGEN3_VERSION_OK FALSE) | |
54 | else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) | |
55 | set(EIGEN3_VERSION_OK TRUE) | |
56 | endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) | |
57 | ||
58 | if(NOT EIGEN3_VERSION_OK) | |
59 | ||
60 | message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " | |
61 | "but at least version ${Eigen3_FIND_VERSION} is required") | |
62 | endif(NOT EIGEN3_VERSION_OK) | |
63 | endmacro(_eigen3_check_version) | |
64 | ||
65 | if (EIGEN3_INCLUDE_DIR) | |
66 | ||
67 | # in cache already | |
68 | _eigen3_check_version() | |
69 | set(EIGEN3_FOUND ${EIGEN3_VERSION_OK}) | |
70 | set(Eigen3_FOUND ${EIGEN3_VERSION_OK}) | |
71 | ||
72 | else (EIGEN3_INCLUDE_DIR) | |
73 | ||
74 | # search first if an Eigen3Config.cmake is available in the system, | |
75 | # if successful this would set EIGEN3_INCLUDE_DIR and the rest of | |
76 | # the script will work as usual | |
77 | find_package(Eigen3 ${Eigen3_FIND_VERSION} NO_MODULE QUIET) | |
78 | ||
79 | if(NOT EIGEN3_INCLUDE_DIR) | |
80 | find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library | |
81 | HINTS | |
82 | ENV EIGEN3_ROOT | |
83 | ENV EIGEN3_ROOT_DIR | |
84 | PATHS | |
85 | ${CMAKE_INSTALL_PREFIX}/include | |
86 | ${KDE4_INCLUDE_DIR} | |
87 | PATH_SUFFIXES eigen3 eigen | |
88 | ) | |
89 | endif(NOT EIGEN3_INCLUDE_DIR) | |
90 | ||
91 | if(EIGEN3_INCLUDE_DIR) | |
92 | _eigen3_check_version() | |
93 | endif(EIGEN3_INCLUDE_DIR) | |
94 | ||
95 | include(FindPackageHandleStandardArgs) | |
96 | find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) | |
97 | ||
98 | mark_as_advanced(EIGEN3_INCLUDE_DIR) | |
99 | ||
100 | endif(EIGEN3_INCLUDE_DIR) | |
101 | ||
102 | if(EIGEN3_FOUND AND NOT TARGET Eigen3::Eigen) | |
103 | add_library(Eigen3::Eigen INTERFACE IMPORTED) | |
104 | set_target_properties(Eigen3::Eigen PROPERTIES | |
105 | INTERFACE_INCLUDE_DIRECTORIES "${EIGEN3_INCLUDE_DIR}") | |
106 | endif() |
0 | # - Find libxc | |
1 | # Find the native libxc headers and libraries. | |
2 | # | |
3 | # LIBXC_INCLUDE_DIRS - where to find xc.h, etc. | |
4 | # LIBXC_LIBRARIES - List of libraries when using expat. | |
5 | # LIBXC_FOUND - True if expat found. | |
6 | # | |
7 | # Copyright 2009-2011 The VOTCA Development Team (http://www.votca.org) | |
8 | # | |
9 | # Licensed under the Apache License, Version 2.0 (the "License"); | |
10 | # you may not use this file except in compliance with the License. | |
11 | # You may obtain a copy of the License at | |
12 | # | |
13 | # http://www.apache.org/licenses/LICENSE-2.0 | |
14 | # | |
15 | # Unless required by applicable law or agreed to in writing, software | |
16 | # distributed under the License is distributed on an "AS IS" BASIS, | |
17 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
18 | # See the License for the specific language governing permissions and | |
19 | # limitations under the License. | |
20 | # | |
21 | ||
22 | # check if info is available via PkgConfig | |
23 | find_package(PkgConfig) | |
24 | pkg_check_modules(PC_libxc libxc) | |
25 | ||
26 | find_path(LIBXC_INCLUDE_DIR NAMES xc.h HINTS HINTS ${PC_libxc_INCLUDE_DIRS}) | |
27 | find_library(LIBXC_LIBRARY NAMES xc HINTS ${PC_libxc_LIBRARY_DIRS} ) | |
28 | ||
29 | ||
30 | set(LIBXC_LIBRARIES "${LIBXC_LIBRARY}" ) | |
31 | set(LIBXC_INCLUDE_DIRS "${LIBXC_INCLUDE_DIR}" ) | |
32 | ||
33 | #include(FindPackageHandleStandardArgs) | |
34 | # handle the QUIETLY and REQUIRED arguments and set LIBXC_FOUND to TRUE | |
35 | # if all listed variables are TRUE | |
36 | find_package_handle_standard_args(LIBXC DEFAULT_MSG LIBXC_LIBRARY LIBXC_INCLUDE_DIR ) | |
37 | ||
38 | ||
39 | mark_as_advanced(LIBXC_INCLUDE_DIR LIBXC_LIBRARY ) |
0 | # CMake script to detect Intel(R) Math Kernel Library (MKL) | |
1 | # | |
2 | # This will try to find Intel MKL libraries, and include path by automatic | |
3 | # search through typical install locations and if failed it will | |
4 | # examine MKLROOT environment variable. | |
5 | # Note, MKLROOT is not set by IPP installer, it should be set manually. | |
6 | # | |
7 | # Usage example: | |
8 | # set(MKL_USE_STATIC_LIBS ON) | |
9 | # find_package(MKL) | |
10 | # if (MKL_FOUND) | |
11 | # include_directories(${MKL_INCLUDE_DIRS}) | |
12 | # add_executable(foo foo.cc) | |
13 | # target_link_libraries(foo ${MKL_LIBRARIES}) | |
14 | # endif() | |
15 | # | |
16 | # Variables used by this module, they can change the default behaviour and | |
17 | # need to be set before calling find_package: | |
18 | # | |
19 | # MKL_ADDITIONAL_VERSIONS A list of version numbers to use for searching | |
20 | # the MKL include directory. | |
21 | # | |
22 | # MKL_USE_STATIC_LIBS Can be set to ON to force the use of the static | |
23 | # boost libraries. Defaults to OFF. | |
24 | # | |
25 | # MKL_FIND_DEBUG Set this to TRUE to enable debugging output | |
26 | # of FindMKL.cmake if you are having problems. | |
27 | # | |
28 | # On return this will define: | |
29 | # MKL_FOUND Indicates whether MKL was found (True/False) | |
30 | # MKL_INCLUDE_DIRS MKL include folder | |
31 | # MKL_LIBRARY_DIRS MKL libraries folder | |
32 | # MKL_LIBRARIES MKL libraries names | |
33 | # | |
34 | # NOTE: this script has only been tested with Intel(R) Parallel Studio XE 2011 | |
35 | # and may need changes for compatibility with older versions. | |
36 | # | |
37 | # Adapted from OpenCV IPP detection script | |
38 | # https://code.ros.org/trac/opencv/browser/trunk/opencv/OpenCVFindIPP.cmake | |
39 | # Many portions taken from FindBoost.cmake | |
40 | ||
41 | # TODO: | |
42 | # - caller needs to link with libiomp5md.lib or /Qopenmp... | |
43 | # - runtime DLLs: | |
44 | # <Composer XE directory> -> C:\Program Files\Intel\ComposerXE-2011 | |
45 | # redist\ia32\mkl | |
46 | # redist\intel64\mkl | |
47 | ||
48 | set(_MKL_IA32 FALSE) | |
49 | set(_MKL_INTEL64 FALSE) | |
50 | if (CMAKE_SIZEOF_VOID_P EQUAL 4) | |
51 | set(_MKL_IA32 TRUE) | |
52 | elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) | |
53 | set(_MKL_INTEL64 TRUE) | |
54 | else() | |
55 | message(FATAL_ERROR "Unsupported 'void *' size (${SIZEOF_VOID_P})") | |
56 | endif() | |
57 | ||
58 | # Versions should be listed is decreasing order of preference | |
59 | set(_MKL_TEST_VERSIONS ${MKL_ADDITIONAL_VERSIONS} | |
60 | "2011" | |
61 | # alternative form: "2011.xxx.y" | |
62 | # (y is the release-update number and xxx is the package number) | |
63 | ) | |
64 | ||
65 | if (MKL_FIND_VERSION AND NOT MKL_FIND_QUIETLY) | |
66 | message(WARNING "Requesting a specific version of Intel(R) MKL is not supported") | |
67 | endif() | |
68 | ||
69 | # Use environment variables from Intel build scripts, if available | |
70 | if (NOT MKL_ROOT AND NOT $ENV{MKLROOT} STREQUAL "") | |
71 | set(MKL_ROOT $ENV{MKLROOT}) | |
72 | endif() | |
73 | ||
74 | if (MKL_ROOT) | |
75 | file(TO_CMAKE_PATH ${MKL_ROOT} MKL_ROOT) | |
76 | endif() | |
77 | ||
78 | if (NOT INTEL_ROOT AND NOT $ENV{INTELROOT} STREQUAL "") | |
79 | set(INTEL_ROOT $ENV{INTELROOT}) | |
80 | endif() | |
81 | ||
82 | if (INTEL_ROOT) | |
83 | file(TO_CMAKE_PATH ${INTEL_ROOT} INTEL_ROOT) | |
84 | endif() | |
85 | ||
86 | if (MKL_FIND_DEBUG) | |
87 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
88 | "_MKL_TEST_VERSIONS = ${_MKL_TEST_VERSIONS}") | |
89 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
90 | "MKL_ADDITIONAL_VERSIONS = ${MKL_ADDITIONAL_VERSIONS}") | |
91 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
92 | "MKL_USE_STATIC_LIBS = ${MKL_USE_STATIC_LIBS}") | |
93 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
94 | "MKL_ROOT = ${MKL_ROOT}") | |
95 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
96 | "INTEL_ROOT = ${INTEL_ROOT}") | |
97 | endif() | |
98 | ||
99 | # Find MKL include directory | |
100 | ||
101 | set(_MKL_ROOT_SEARCH_DIRS | |
102 | ${MKL_ROOT} | |
103 | ) | |
104 | ||
105 | foreach (_MKL_VER ${_MKL_TEST_VERSIONS}) | |
106 | if (WIN32) | |
107 | list(APPEND _MKL_ROOT_SEARCH_DIRS "$ENV{ProgramFiles}/Intel/Composer XE/mkl") | |
108 | else() | |
109 | list(APPEND _MKL_ROOT_SEARCH_DIRS "/opt/intel/composerxe-${_MKL_VER}/mkl") | |
110 | endif() | |
111 | endforeach() | |
112 | ||
113 | if (MKL_FIND_DEBUG) | |
114 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
115 | "_MKL_ROOT_SEARCH_DIRS = ${_MKL_ROOT_SEARCH_DIRS}") | |
116 | endif() | |
117 | ||
118 | find_path(MKL_INCLUDE_DIR | |
119 | NAMES mkl.h | |
120 | PATHS ${_MKL_ROOT_SEARCH_DIRS} | |
121 | PATH_SUFFIXES include | |
122 | DOC "The path to Intel(R) MKL header files" | |
123 | ) | |
124 | ||
125 | if (MKL_INCLUDE_DIR) | |
126 | if (MKL_FIND_DEBUG) | |
127 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
128 | "location of mkl.h: ${MKL_INCLUDE_DIR}/mkl.h") | |
129 | endif() | |
130 | else() | |
131 | if (MKL_FIND_DEBUG) | |
132 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
133 | "unable to find Intel(R) MKL header files. Please set MKLROOT" | |
134 | " to the root directory containing MKL.") | |
135 | endif() | |
136 | endif() | |
137 | ||
138 | # Find MKL library directory | |
139 | ||
140 | set(_INTEL_LIBRARY_DIR_SUFFIXES "lib") | |
141 | if (_MKL_IA32) | |
142 | list(APPEND _INTEL_LIBRARY_DIR_SUFFIXES "lib/ia32") | |
143 | elseif (_MKL_INTEL64) | |
144 | list(APPEND _INTEL_LIBRARY_DIR_SUFFIXES "lib/intel64") | |
145 | else() | |
146 | message(FATAL_ERROR "unreachable") | |
147 | endif() | |
148 | ||
149 | set(_MKL_LIBRARY_SEARCH_DIRS ${_MKL_ROOT_SEARCH_DIRS}) | |
150 | if (MKL_INCLUDE_DIR) | |
151 | list(APPEND _MKL_LIBRARY_SEARCH_DIRS "${MKL_INCLUDE_DIR}/..") | |
152 | endif() | |
153 | ||
154 | if (MKL_FIND_DEBUG) | |
155 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
156 | "_INTEL_LIBRARY_DIR_SUFFIXES = ${_INTEL_LIBRARY_DIR_SUFFIXES}") | |
157 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
158 | "_MKL_LIBRARY_SEARCH_DIRS = ${_MKL_LIBRARY_SEARCH_DIRS}") | |
159 | endif() | |
160 | ||
161 | set(MKL_LIB_PREFIX "mkl_") | |
162 | if (MKL_USE_STATIC_LIBS) | |
163 | if (_MKL_IA32) | |
164 | if (WIN32) | |
165 | set(_MKL_LIBRARIES intel_c) | |
166 | else() | |
167 | set(_MKL_LIBRARIES intel) | |
168 | endif() | |
169 | elseif (_MKL_INTEL64) | |
170 | set(_MKL_LIBRARIES intel_lp64) | |
171 | else() | |
172 | message(FATAL_ERROR "unreachable") | |
173 | endif() | |
174 | ||
175 | list(APPEND _MKL_LIBRARIES intel_thread) | |
176 | list(APPEND _MKL_LIBRARIES core) | |
177 | else() | |
178 | set(_MKL_LIBRARIES rt) | |
179 | endif() | |
180 | ||
181 | set(_MKL_MISSING_LIBRARIES "") | |
182 | set(MKL_LIBRARIES "") | |
183 | set(MKL_LIBRARY_DIRS "") | |
184 | # Find MKL libraries | |
185 | foreach (_MKL_LIB_RAW ${_MKL_LIBRARIES}) | |
186 | set(_MKL_LIB ${MKL_LIB_PREFIX}${_MKL_LIB_RAW}) | |
187 | string(TOUPPER ${_MKL_LIB} _MKL_LIB_UPPER) | |
188 | ||
189 | find_library(${_MKL_LIB_UPPER}_LIBRARY | |
190 | NAMES ${_MKL_LIB} | |
191 | PATHS ${_MKL_LIBRARY_SEARCH_DIRS} | |
192 | PATH_SUFFIXES ${_INTEL_LIBRARY_DIR_SUFFIXES} | |
193 | DOC "The path to Intel(R) MKL ${_MKL_LIB_RAW} library" | |
194 | ) | |
195 | mark_as_advanced(${_MKL_LIB_UPPER}_LIBRARY) | |
196 | ||
197 | if (NOT ${_MKL_LIB_UPPER}_LIBRARY) | |
198 | list(APPEND _MKL_MISSING_LIBRARIES ${_MKL_LIB}) | |
199 | else() | |
200 | list(APPEND MKL_LIBRARIES ${${_MKL_LIB_UPPER}_LIBRARY}) | |
201 | if (MKL_FIND_DEBUG) | |
202 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
203 | "Found ${_MKL_LIB}: ${${_MKL_LIB_UPPER}_LIBRARY}") | |
204 | endif() | |
205 | ||
206 | get_filename_component(_MKL_LIB_PATH "${${_MKL_LIB_UPPER}_LIBRARY}" PATH) | |
207 | list(APPEND MKL_LIBRARY_DIRS ${_MKL_LIB_PATH}) | |
208 | endif() | |
209 | endforeach() | |
210 | ||
211 | ## Find OpenMP, pthread and math libraries | |
212 | ||
213 | set(_INTEL_LIBRARY_SEARCH_DIRS | |
214 | ${INTEL_ROOT} | |
215 | ${INTEL_ROOT}/compiler | |
216 | ) | |
217 | ||
218 | foreach(_MKL_DIR ${_MKL_ROOT_SEARCH_DIRS}) | |
219 | list(APPEND _INTEL_LIBRARY_SEARCH_DIRS "${_MKL_DIR}/..") | |
220 | list(APPEND _INTEL_LIBRARY_SEARCH_DIRS "${_MKL_DIR}/../compiler") | |
221 | endforeach() | |
222 | ||
223 | if (MKL_FIND_DEBUG) | |
224 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
225 | "_INTEL_LIBRARY_SEARCH_DIRS = ${_INTEL_LIBRARY_SEARCH_DIRS}") | |
226 | endif() | |
227 | ||
228 | if (NOT WIN32) | |
229 | find_library(PTHREAD_LIBRARY pthread DOC "Path to POSIX threads library") | |
230 | endif() | |
231 | ||
232 | set(_IOMP5_LIB iomp5) | |
233 | if (WIN32) | |
234 | if (MKL_USE_STATIC_LIBS) | |
235 | list(APPEND _IOMP5_LIB libiomp5mt.lib) | |
236 | else() | |
237 | list(APPEND _IOMP5_LIB libiomp5md.lib) | |
238 | endif() | |
239 | endif() | |
240 | ||
241 | find_library(IOMP5_LIBRARY | |
242 | NAMES ${_IOMP5_LIB} | |
243 | PATHS ${_INTEL_LIBRARY_SEARCH_DIRS} | |
244 | PATH_SUFFIXES ${_INTEL_LIBRARY_DIR_SUFFIXES} | |
245 | DOC "Path to OpenMP runtime library" | |
246 | ) | |
247 | ||
248 | if (NOT IOMP5_LIBRARY) | |
249 | # we could instead fallback to default library (via FindOpenMP.cmake) | |
250 | list(APPEND _MKL_MISSING_LIBRARIES IOMP5) | |
251 | else() | |
252 | list(APPEND MKL_LIBRARIES ${IOMP5_LIBRARY}) | |
253 | if (MKL_FIND_DEBUG) | |
254 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
255 | "Found IOMP5_LIBRARY: ${IOMP5_LIBRARY}") | |
256 | endif() | |
257 | ||
258 | get_filename_component(_MKL_LIB_PATH "${IOMP5_LIBRARY}" PATH) | |
259 | list(APPEND MKL_LIBRARY_DIRS ${_MKL_LIB_PATH}) | |
260 | endif() | |
261 | ||
262 | # Optimized math library (optional) | |
263 | set(_MATH_LIB imf) # linked by default with Intel compiler | |
264 | if (WIN32) | |
265 | if (MKL_USE_STATIC_LIBS) | |
266 | list(APPEND _MATH_LIB libmmds.lib) # assumes (/MD) otherwise libmmt.lib (for /MT) | |
267 | else() | |
268 | list(APPEND _MATH_LIB libmmd.lib) | |
269 | endif() | |
270 | endif() | |
271 | ||
272 | find_library(MATH_LIBRARY | |
273 | NAMES ${_MATH_LIB} | |
274 | PATHS ${_INTEL_LIBRARY_SEARCH_DIRS} | |
275 | PATH_SUFFIXES ${_INTEL_LIBRARY_DIR_SUFFIXES} | |
276 | DOC "Path to optimized math library" | |
277 | ) | |
278 | ||
279 | if (NOT MATH_LIBRARY) | |
280 | # we could instead fallback to default library (via FindOpenMP.cmake) | |
281 | list(APPEND _MKL_MISSING_LIBRARIES MATH) | |
282 | else() | |
283 | list(APPEND MKL_LIBRARIES ${MATH_LIBRARY}) | |
284 | if (MKL_FIND_DEBUG) | |
285 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
286 | "Found MATH_LIBRARY: ${MATH_LIBRARY}") | |
287 | endif() | |
288 | ||
289 | get_filename_component(_MKL_LIB_PATH "${MATH_LIBRARY}" PATH) | |
290 | list(APPEND MKL_LIBRARY_DIRS ${_MKL_LIB_PATH}) | |
291 | endif() | |
292 | ||
293 | # Check all required libraries are available | |
294 | list(REMOVE_DUPLICATES MKL_LIBRARY_DIRS) | |
295 | ||
296 | set(MKL_INCLUDE_DIRS | |
297 | ${MKL_INCLUDE_DIR} | |
298 | ) | |
299 | ||
300 | set(MKL_FOUND TRUE) | |
301 | if (NOT MKL_INCLUDE_DIR) | |
302 | set(MKL_FOUND FALSE) | |
303 | if (MKL_FIND_DEBUG) | |
304 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
305 | "MKL not found - MKL_INCLUDE_DIR was empty") | |
306 | endif() | |
307 | elseif (_MKL_MISSING_LIBRARIES) | |
308 | set(MKL_FOUND FALSE) | |
309 | if (MKL_FIND_DEBUG) | |
310 | message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " | |
311 | "MKL not found - the following libraries are missing: " | |
312 | "${_MKL_MISSING_LIBRARIES}") | |
313 | endif() | |
314 | endif() | |
315 | ||
316 | if (MKL_FOUND) | |
317 | if (NOT MKL_FIND_QUIETLY OR MKL_FIND_DEBUG) | |
318 | message(STATUS | |
319 | "Intel(R) MKL was found:\n" | |
320 | " MKL_INCLUDE_DIRS: ${MKL_INCLUDE_DIRS}\n" | |
321 | " MKL_LIBRARY_DIRS: ${MKL_LIBRARY_DIRS}\n" | |
322 | " MKL_LIBRARIES: ${MKL_LIBRARIES}" | |
323 | ) | |
324 | endif() | |
325 | else() | |
326 | if (MKL_FIND_REQUIRED) | |
327 | message(SEND_ERROR "Intel(R) MKL could not be found.") | |
328 | else() | |
329 | message(STATUS "Intel(R) MKL could not be found.") | |
330 | endif() | |
331 | endif() | |
332 | ||
333 | mark_as_advanced( | |
334 | MKL_INCLUDE_DIR | |
335 | MKL_INCLUDE_DIRS | |
336 | MKL_LIBRARY_DIRS | |
337 | ) | |
338 |
0 | # - Find libsqlite3 | |
1 | # Find the native libsqlite3 headers and libraries. | |
2 | # | |
3 | # SQLITE3_INCLUDE_DIRS - where to find sqlite3.h, etc | |
4 | # SQLITE3_LIBRARIES - List of libraries when using sqlite3. | |
5 | # SQLITE3_FOUND - True if sqlite3 found. | |
6 | # | |
7 | # Copyright 2009-2017 The VOTCA Development Team (http://www.votca.org) | |
8 | # | |
9 | # Licensed under the Apache License, Version 2.0 (the "License"); | |
10 | # you may not use this file except in compliance with the License. | |
11 | # You may obtain a copy of the License at | |
12 | # | |
13 | # http://www.apache.org/licenses/LICENSE-2.0 | |
14 | # | |
15 | # Unless required by applicable law or agreed to in writing, software | |
16 | # distributed under the License is distributed on an "AS IS" BASIS, | |
17 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
18 | # See the License for the specific language governing permissions and | |
19 | # limitations under the License. | |
20 | # | |
21 | ||
22 | find_package(PkgConfig) | |
23 | ||
24 | pkg_check_modules(PC_SQLITE3 sqlite3) | |
25 | ||
26 | find_path(SQLITE3_INCLUDE_DIR sqlite3.h HINTS ${PC_SQLITE3_INCLUDE_DIRS}) | |
27 | find_library(SQLITE3_LIBRARY NAMES sqlite3 HINTS ${PC_SQLITE3_LIBRARY_DIRS} ) | |
28 | ||
29 | set(SQLITE3_LIBRARIES "${SQLITE3_LIBRARY}" ) | |
30 | set(SQLITE3_INCLUDE_DIRS "${SQLITE3_INCLUDE_DIR}" ) | |
31 | ||
32 | include(FindPackageHandleStandardArgs) | |
33 | find_package_handle_standard_args(SQLITE3 DEFAULT_MSG SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR ) | |
34 | ||
35 | mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY ) |
0 | # - Find libvotca_csg | |
1 | # Find the native libvotca_csg headers and libraries. | |
2 | # | |
3 | # VOTCA_CSG_INCLUDE_DIRS - where to find votca/csg/version.h, etc. | |
4 | # VOTCA_CSG_LIBRARIES - List of libraries when using expat. | |
5 | # VOTCA_CSG_FOUND - True if expat found. | |
6 | # VOTCA_CSG_HAS_SQLITE3 - True if votca csg was build with sqlite3 support | |
7 | # | |
8 | # Copyright 2009-2011 The VOTCA Development Team (http://www.votca.org) | |
9 | # | |
10 | # Licensed under the Apache License, Version 2.0 (the "License"); | |
11 | # you may not use this file except in compliance with the License. | |
12 | # You may obtain a copy of the License at | |
13 | # | |
14 | # http://www.apache.org/licenses/LICENSE-2.0 | |
15 | # | |
16 | # Unless required by applicable law or agreed to in writing, software | |
17 | # distributed under the License is distributed on an "AS IS" BASIS, | |
18 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
19 | # See the License for the specific language governing permissions and | |
20 | # limitations under the License. | |
21 | # | |
22 | ||
23 | find_package(PkgConfig) | |
24 | ||
25 | pkg_check_modules(PC_VOTCA_CSG libvotca_csg) | |
26 | find_path(VOTCA_CSG_INCLUDE_DIR votca/csg/version.h HINTS ${PC_VOTCA_CSG_INCLUDE_DIRS}) | |
27 | ||
28 | find_library(VOTCA_CSG_LIBRARY NAMES votca_csg HINTS ${PC_VOTCA_CSG_LIBRARY_DIRS} ) | |
29 | ||
30 | find_program(VOTCA_CSG_PROPERTY NAMES csg_property HINTS ${VOTCA_CSG_INCLUDE_DIR}/../bin ${PC_VOTCA_CSG_INCLUDE_DIRS}/../bin) | |
31 | ||
32 | set(VOTCA_CSG_LIBRARIES "${VOTCA_CSG_LIBRARY}" ) | |
33 | set(VOTCA_CSG_INCLUDE_DIRS "${VOTCA_CSG_INCLUDE_DIR}" ) | |
34 | ||
35 | include(FindPackageHandleStandardArgs) | |
36 | # handle the QUIETLY and REQUIRED arguments and set VOTCA_CSG_FOUND to TRUE | |
37 | # if all listed variables are TRUE | |
38 | find_package_handle_standard_args(VOTCA_CSG DEFAULT_MSG VOTCA_CSG_LIBRARY VOTCA_CSG_INCLUDE_DIR ) | |
39 | ||
40 | if (VOTCA_CSG_FOUND AND NOT VOTCA_CSG_LIBRARY STREQUAL "votca_csg") | |
41 | include(CheckLibraryExists) | |
42 | check_library_exists("${VOTCA_CSG_LIBRARY}" VotcaCsgFromC "" FOUND_VOTCA_CSG_VERSION) | |
43 | if(NOT FOUND_VOTCA_CSG_VERSION) | |
44 | message(FATAL_ERROR "Could not find VotcaCsgFromC in ${VOTCA_CSG_LIBRARY}, take look at the error message in ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log to find out what was going wrong. If you don't have pkg-config installed you will most likely have to set VOTCA_CSG_LIBRARY by hand, which set votca_csg lib it's dependencies (i.e. -DVOTCA_CSG_LIBRARY='/path/to/libvotca_csg.so;/path/to/libgsl.so;/path/to/libm.so') !") | |
45 | endif(NOT FOUND_VOTCA_CSG_VERSION) | |
46 | endif () | |
47 | ||
48 | mark_as_advanced(VOTCA_CSG_INCLUDE_DIR VOTCA_CSG_LIBRARY ) |
0 | # - Find libvotca_tools | |
1 | # Find the native libvotca_tools headers and libraries. | |
2 | # | |
3 | # VOTCA_TOOLS_INCLUDE_DIRS - where to find votca/tools/version.h, etc. | |
4 | # VOTCA_TOOLS_LIBRARIES - List of libraries when using expat. | |
5 | # VOTCA_TOOLS_FOUND - True if expat found. | |
6 | # VOTCA_TOOLS_HAS_SQLITE3 - True if votca tools was build with sqlite3 support | |
7 | # | |
8 | # Copyright 2009-2018 The VOTCA Development Team (http://www.votca.org) | |
9 | # | |
10 | # Licensed under the Apache License, Version 2.0 (the "License"); | |
11 | # you may not use this file except in compliance with the License. | |
12 | # You may obtain a copy of the License at | |
13 | # | |
14 | # http://www.apache.org/licenses/LICENSE-2.0 | |
15 | # | |
16 | # Unless required by applicable law or agreed to in writing, software | |
17 | # distributed under the License is distributed on an "AS IS" BASIS, | |
18 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
19 | # See the License for the specific language governing permissions and | |
20 | # limitations under the License. | |
21 | # | |
22 | ||
23 | find_package(PkgConfig) | |
24 | ||
25 | pkg_check_modules(PC_VOTCA_TOOLS libvotca_tools) | |
26 | find_path(VOTCA_TOOLS_INCLUDE_DIR votca/tools/version.h HINTS ${PC_VOTCA_TOOLS_INCLUDE_DIRS}) | |
27 | ||
28 | find_package(Eigen3 3.3.0 REQUIRED) | |
29 | find_package(MKL) | |
30 | if (NOT MKL_FOUND) | |
31 | set(MKL_LIBRARIES) | |
32 | set(MKL_INCLUDE_DIRS) | |
33 | endif() | |
34 | ||
35 | find_path(VOTCA_TOOLS_HAS_SQLITE3 votca/tools/database.h HINTS ${VOTCA_TOOLS_INCLUDE_DIR} ${PC_VOTCA_TOOLS_INCLUDE_DIRS}) | |
36 | if (VOTCA_TOOLS_HAS_SQLITE3) | |
37 | #due to include <sqlite3.h> in database.h | |
38 | find_package(SQLITE3 REQUIRED) | |
39 | else(VOTCA_TOOLS_HAS_SQLITE3) | |
40 | set(SQLITE3_INCLUDE_DIR) | |
41 | endif (VOTCA_TOOLS_HAS_SQLITE3) | |
42 | ||
43 | find_library(VOTCA_TOOLS_LIBRARY NAMES votca_tools HINTS ${PC_VOTCA_TOOLS_LIBRARY_DIRS} ) | |
44 | ||
45 | set(VOTCA_TOOLS_INCLUDE_DIRS "${VOTCA_TOOLS_INCLUDE_DIR};${SQLITE3_INCLUDE_DIR};${EIGEN3_INCLUDE_DIR};${MKL_INCLUDE_DIRS}" ) | |
46 | set(VOTCA_TOOLS_LIBRARIES "${VOTCA_TOOLS_LIBRARY};${MKL_LIBRARIES}" ) | |
47 | ||
48 | include(FindPackageHandleStandardArgs) | |
49 | # handle the QUIETLY and REQUIRED arguments and set VOTCA_TOOLS_FOUND to TRUE | |
50 | # if all listed variables are TRUE | |
51 | find_package_handle_standard_args(VOTCA_TOOLS DEFAULT_MSG VOTCA_TOOLS_LIBRARY VOTCA_TOOLS_INCLUDE_DIR ) | |
52 | ||
53 | if (VOTCA_TOOLS_FOUND AND NOT VOTCA_TOOLS_LIBRARY STREQUAL "votca_tools") | |
54 | include(CheckLibraryExists) | |
55 | check_library_exists("${VOTCA_TOOLS_LIBRARY}" VotcaToolsFromC "" FOUND_VOTCA_TOOLS_VERSION) | |
56 | if(NOT FOUND_VOTCA_TOOLS_VERSION) | |
57 | message(FATAL_ERROR "Could not find VotcaToolsFromC in ${VOTCA_TOOLS_LIBRARY}, take look at the error message in ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log to find out what was going wrong. If you don't have pkg-config installed you will most likely have to set VOTCA_TOOLS_LIBRARY by hand, which set votca_tools lib it's dependencies (i.e. -DVOTCA_TOOLS_LIBRARY='/path/to/libvotca_tools.so;/path/to/libgsl.so;/path/to/libm.so') !") | |
58 | endif(NOT FOUND_VOTCA_TOOLS_VERSION) | |
59 | endif () | |
60 | ||
61 | mark_as_advanced(VOTCA_TOOLS_INCLUDE_DIR VOTCA_TOOLS_LIBRARY ) |
0 | if (GIT_EXECUTABLE) | |
1 | # refresh git index | |
2 | execute_process(COMMAND ${GIT_EXECUTABLE} update-index -q --refresh | |
3 | WORKING_DIRECTORY ${TOP_SOURCE_DIR} TIMEOUT 5 OUTPUT_QUIET | |
4 | ERROR_VARIABLE EXEC_ERR OUTPUT_STRIP_TRAILING_WHITESPACE | |
5 | ) | |
6 | #later use git describe here | |
7 | execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD | |
8 | WORKING_DIRECTORY ${TOP_SOURCE_DIR} | |
9 | OUTPUT_VARIABLE THIS_GIT_ID OUTPUT_STRIP_TRAILING_WHITESPACE) | |
10 | execute_process( COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD | |
11 | WORKING_DIRECTORY ${TOP_SOURCE_DIR} | |
12 | OUTPUT_VARIABLE _HAS_CHANGES OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) | |
13 | if (NOT "${_HAS_CHANGES}" STREQUAL "") | |
14 | set(THIS_GIT_ID "${THIS_GIT_ID} (dirty)") | |
15 | endif() | |
16 | message("Current git revision is ${THIS_GIT_ID}") | |
17 | set(THIS_GIT_ID "gitid: ${THIS_GIT_ID}") | |
18 | else() | |
19 | set (THIS_GIT_ID) | |
20 | endif() | |
21 | file(READ ${INPUT} CONTENT) | |
22 | string(REGEX REPLACE "#CSG_GIT_ID#" "${THIS_GIT_ID}" NEW_CONTENT "${CONTENT}") | |
23 | file(WRITE "${OUTPUT}.tmp" "${NEW_CONTENT}") | |
24 | execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${OUTPUT}.tmp ${OUTPUT}) | |
25 | execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${OUTPUT}.tmp) |
0 | if (GIT_EXECUTABLE) | |
1 | # refresh git index | |
2 | execute_process(COMMAND ${GIT_EXECUTABLE} update-index -q --refresh | |
3 | WORKING_DIRECTORY ${TOP_SOURCE_DIR} TIMEOUT 5 OUTPUT_QUIET | |
4 | ERROR_VARIABLE EXEC_ERR OUTPUT_STRIP_TRAILING_WHITESPACE | |
5 | ) | |
6 | #later use git describe here | |
7 | execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD | |
8 | WORKING_DIRECTORY ${TOP_SOURCE_DIR} | |
9 | OUTPUT_VARIABLE THIS_GIT_ID OUTPUT_STRIP_TRAILING_WHITESPACE) | |
10 | execute_process( COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD | |
11 | WORKING_DIRECTORY ${TOP_SOURCE_DIR} | |
12 | OUTPUT_VARIABLE _HAS_CHANGES OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) | |
13 | if (NOT "${_HAS_CHANGES}" STREQUAL "") | |
14 | set(THIS_GIT_ID "${THIS_GIT_ID} (dirty)") | |
15 | endif() | |
16 | message("Current git revision is ${THIS_GIT_ID}") | |
17 | set(THIS_GIT_ID "gitid: ${THIS_GIT_ID}") | |
18 | else() | |
19 | set (THIS_GIT_ID) | |
20 | endif() | |
21 | ||
22 | set (GIT_HEADER "gitversion.h") | |
23 | set (NEW_GIT_HEADER "new_gitversion.h") | |
24 | file(WRITE ${NEW_GIT_HEADER} "#include<string>\nstatic const std::string gitversion = \"${THIS_GIT_ID}\";\n") | |
25 | execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${NEW_GIT_HEADER} ${GIT_HEADER}) | |
26 | execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${NEW_GIT_HEADER}) |
0 | # Contributor Covenant Code of Conduct | |
1 | ||
2 | ## Our Pledge | |
3 | ||
4 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. | |
5 | ||
6 | ## Our Standards | |
7 | ||
8 | Examples of behavior that contributes to creating a positive environment include: | |
9 | ||
10 | * Using welcoming and inclusive language | |
11 | * Being respectful of differing viewpoints and experiences | |
12 | * Gracefully accepting constructive criticism | |
13 | * Focusing on what is best for the community | |
14 | * Showing empathy towards other community members | |
15 | ||
16 | Examples of unacceptable behavior by participants include: | |
17 | ||
18 | * The use of sexualized language or imagery and unwelcome sexual attention or advances | |
19 | * Trolling, insulting/derogatory comments, and personal or political attacks | |
20 | * Public or private harassment | |
21 | * Publishing others' private information, such as a physical or electronic address, without explicit permission | |
22 | * Other conduct which could reasonably be considered inappropriate in a professional setting | |
23 | ||
24 | ## Our Responsibilities | |
25 | ||
26 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. | |
27 | ||
28 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. | |
29 | ||
30 | ## Scope | |
31 | ||
32 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. | |
33 | ||
34 | ## Enforcement | |
35 | ||
36 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at votca@googlegroups.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. | |
37 | ||
38 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. | |
39 | ||
40 | ## Attribution | |
41 | ||
42 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] | |
43 | ||
44 | [homepage]: http://contributor-covenant.org | |
45 | [version]: http://contributor-covenant.org/version/1/4/ |
0 | Apache License | |
1 | Version 2.0, January 2004 | |
2 | http://www.apache.org/licenses/ | |
3 | ||
4 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |
5 | ||
6 | 1. Definitions. | |
7 | ||
8 | "License" shall mean the terms and conditions for use, reproduction, | |
9 | and distribution as defined by Sections 1 through 9 of this document. | |
10 | ||
11 | "Licensor" shall mean the copyright owner or entity authorized by | |
12 | the copyright owner that is granting the License. | |
13 | ||
14 | "Legal Entity" shall mean the union of the acting entity and all | |
15 | other entities that control, are controlled by, or are under common | |
16 | control with that entity. For the purposes of this definition, | |
17 | "control" means (i) the power, direct or indirect, to cause the | |
18 | direction or management of such entity, whether by contract or | |
19 | otherwise, or (ii) ownership of fifty percent (50%) or more of the | |
20 | outstanding shares, or (iii) beneficial ownership of such entity. | |
21 | ||
22 | "You" (or "Your") shall mean an individual or Legal Entity | |
23 | exercising permissions granted by this License. | |
24 | ||
25 | "Source" form shall mean the preferred form for making modifications, | |
26 | including but not limited to software source code, documentation | |
27 | source, and configuration files. | |
28 | ||
29 | "Object" form shall mean any form resulting from mechanical | |
30 | transformation or translation of a Source form, including but | |
31 | not limited to compiled object code, generated documentation, | |
32 | and conversions to other media types. | |
33 | ||
34 | "Work" shall mean the work of authorship, whether in Source or | |
35 | Object form, made available under the License, as indicated by a | |
36 | copyright notice that is included in or attached to the work | |
37 | (an example is provided in the Appendix below). | |
38 | ||
39 | "Derivative Works" shall mean any work, whether in Source or Object | |
40 | form, that is based on (or derived from) the Work and for which the | |
41 | editorial revisions, annotations, elaborations, or other modifications | |
42 | represent, as a whole, an original work of authorship. For the purposes | |
43 | of this License, Derivative Works shall not include works that remain | |
44 | separable from, or merely link (or bind by name) to the interfaces of, | |
45 | the Work and Derivative Works thereof. | |
46 | ||
47 | "Contribution" shall mean any work of authorship, including | |
48 | the original version of the Work and any modifications or additions | |
49 | to that Work or Derivative Works thereof, that is intentionally | |
50 | submitted to Licensor for inclusion in the Work by the copyright owner | |
51 | or by an individual or Legal Entity authorized to submit on behalf of | |
52 | the copyright owner. For the purposes of this definition, "submitted" | |
53 | means any form of electronic, verbal, or written communication sent | |
54 | to the Licensor or its representatives, including but not limited to | |
55 | communication on electronic mailing lists, source code control systems, | |
56 | and issue tracking systems that are managed by, or on behalf of, the | |
57 | Licensor for the purpose of discussing and improving the Work, but | |
58 | excluding communication that is conspicuously marked or otherwise | |
59 | designated in writing by the copyright owner as "Not a Contribution." | |
60 | ||
61 | "Contributor" shall mean Licensor and any individual or Legal Entity | |
62 | on behalf of whom a Contribution has been received by Licensor and | |
63 | subsequently incorporated within the Work. | |
64 | ||
65 | 2. Grant of Copyright License. Subject to the terms and conditions of | |
66 | this License, each Contributor hereby grants to You a perpetual, | |
67 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |
68 | copyright license to reproduce, prepare Derivative Works of, | |
69 | publicly display, publicly perform, sublicense, and distribute the | |
70 | Work and such Derivative Works in Source or Object form. | |
71 | ||
72 | 3. Grant of Patent License. Subject to the terms and conditions of | |
73 | this License, each Contributor hereby grants to You a perpetual, | |
74 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |
75 | (except as stated in this section) patent license to make, have made, | |
76 | use, offer to sell, sell, import, and otherwise transfer the Work, | |
77 | where such license applies only to those patent claims licensable | |
78 | by such Contributor that are necessarily infringed by their | |
79 | Contribution(s) alone or by combination of their Contribution(s) | |
80 | with the Work to which such Contribution(s) was submitted. If You | |
81 | institute patent litigation against any entity (including a | |
82 | cross-claim or counterclaim in a lawsuit) alleging that the Work | |
83 | or a Contribution incorporated within the Work constitutes direct | |
84 | or contributory patent infringement, then any patent licenses | |
85 | granted to You under this License for that Work shall terminate | |
86 | as of the date such litigation is filed. | |
87 | ||
88 | 4. Redistribution. You may reproduce and distribute copies of the | |
89 | Work or Derivative Works thereof in any medium, with or without | |
90 | modifications, and in Source or Object form, provided that You | |
91 | meet the following conditions: | |
92 | ||
93 | (a) You must give any other recipients of the Work or | |
94 | Derivative Works a copy of this License; and | |
95 | ||
96 | (b) You must cause any modified files to carry prominent notices | |
97 | stating that You changed the files; and | |
98 | ||
99 | (c) You must retain, in the Source form of any Derivative Works | |
100 | that You distribute, all copyright, patent, trademark, and | |
101 | attribution notices from the Source form of the Work, | |
102 | excluding those notices that do not pertain to any part of | |
103 | the Derivative Works; and | |
104 | ||
105 | (d) If the Work includes a "NOTICE" text file as part of its | |
106 | distribution, then any Derivative Works that You distribute must | |
107 | include a readable copy of the attribution notices contained | |
108 | within such NOTICE file, excluding those notices that do not | |
109 | pertain to any part of the Derivative Works, in at least one | |
110 | of the following places: within a NOTICE text file distributed | |
111 | as part of the Derivative Works; within the Source form or | |
112 | documentation, if provided along with the Derivative Works; or, | |
113 | within a display generated by the Derivative Works, if and | |
114 | wherever such third-party notices normally appear. The contents | |
115 | of the NOTICE file are for informational purposes only and | |
116 | do not modify the License. You may add Your own attribution | |
117 | notices within Derivative Works that You distribute, alongside | |
118 | or as an addendum to the NOTICE text from the Work, provided | |
119 | that such additional attribution notices cannot be construed | |
120 | as modifying the License. | |
121 | ||
122 | You may add Your own copyright statement to Your modifications and | |
123 | may provide additional or different license terms and conditions | |
124 | for use, reproduction, or distribution of Your modifications, or | |
125 | for any such Derivative Works as a whole, provided Your use, | |
126 | reproduction, and distribution of the Work otherwise complies with | |
127 | the conditions stated in this License. | |
128 | ||
129 | 5. Submission of Contributions. Unless You explicitly state otherwise, | |
130 | any Contribution intentionally submitted for inclusion in the Work | |
131 | by You to the Licensor shall be under the terms and conditions of | |
132 | this License, without any additional terms or conditions. | |
133 | Notwithstanding the above, nothing herein shall supersede or modify | |
134 | the terms of any separate license agreement you may have executed | |
135 | with Licensor regarding such Contributions. | |
136 | ||
137 | 6. Trademarks. This License does not grant permission to use the trade | |
138 | names, trademarks, service marks, or product names of the Licensor, | |
139 | except as required for reasonable and customary use in describing the | |
140 | origin of the Work and reproducing the content of the NOTICE file. | |
141 | ||
142 | 7. Disclaimer of Warranty. Unless required by applicable law or | |
143 | agreed to in writing, Licensor provides the Work (and each | |
144 | Contributor provides its Contributions) on an "AS IS" BASIS, | |
145 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |
146 | implied, including, without limitation, any warranties or conditions | |
147 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |
148 | PARTICULAR PURPOSE. You are solely responsible for determining the | |
149 | appropriateness of using or redistributing the Work and assume any | |
150 | risks associated with Your exercise of permissions under this License. | |
151 | ||
152 | 8. Limitation of Liability. In no event and under no legal theory, | |
153 | whether in tort (including negligence), contract, or otherwise, | |
154 | unless required by applicable law (such as deliberate and grossly | |
155 | negligent acts) or agreed to in writing, shall any Contributor be | |
156 | liable to You for damages, including any direct, indirect, special, | |
157 | incidental, or consequential damages of any character arising as a | |
158 | result of this License or out of the use or inability to use the | |
159 | Work (including but not limited to damages for loss of goodwill, | |
160 | work stoppage, computer failure or malfunction, or any and all | |
161 | other commercial damages or losses), even if such Contributor | |
162 | has been advised of the possibility of such damages. | |
163 | ||
164 | 9. Accepting Warranty or Additional Liability. While redistributing | |
165 | the Work or Derivative Works thereof, You may choose to offer, | |
166 | and charge a fee for, acceptance of support, warranty, indemnity, | |
167 | or other liability obligations and/or rights consistent with this | |
168 | License. However, in accepting such obligations, You may act only | |
169 | on Your own behalf and on Your sole responsibility, not on behalf | |
170 | of any other Contributor, and only if You agree to indemnify, | |
171 | defend, and hold each Contributor harmless for any liability | |
172 | incurred by, or claims asserted against, such Contributor by reason | |
173 | of your accepting any such warranty or additional liability. | |
174 | ||
175 | END OF TERMS AND CONDITIONS | |
176 | ||
177 | APPENDIX: How to apply the Apache License to your work. | |
178 | ||
179 | To apply the Apache License to your work, attach the following | |
180 | boilerplate notice, with the fields enclosed by brackets "{}" | |
181 | replaced with your own identifying information. (Don't include | |
182 | the brackets!) The text should be enclosed in the appropriate | |
183 | comment syntax for the file format. We also recommend that a | |
184 | file or class name and description of purpose be included on the | |
185 | same "printed page" as the copyright notice for easier | |
186 | identification within third-party archives. | |
187 | ||
188 | Copyright {yyyy} {name of copyright owner} | |
189 | ||
190 | Licensed under the Apache License, Version 2.0 (the "License"); | |
191 | you may not use this file except in compliance with the License. | |
192 | You may obtain a copy of the License at | |
193 | ||
194 | http://www.apache.org/licenses/LICENSE-2.0 | |
195 | ||
196 | Unless required by applicable law or agreed to in writing, software | |
197 | distributed under the License is distributed on an "AS IS" BASIS, | |
198 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
199 | See the License for the specific language governing permissions and | |
200 | limitations under the License. |
0 | Versatile Object-oriented Toolkit for Coarse-graining Applications | |
1 | Copyright 2009-2011 The VOTCA Development Team | |
2 | ||
3 | This product includes software developed at | |
4 | The VOTCA Development Team (http://www.votca.org). | |
5 | ||
6 | This software contains code, which was | |
7 | derived from VOTCA KMC, MOO and CTP project. |
0 | For developers and installation all relevant information can be found [here](https://github.com/votca/votca/blob/master/share/doc/INSTALL.md) | |
1 | ||
2 | For other questions, we provide an email list: | |
3 | ||
4 | [google group](https://groups.google.com/forum/?hl=de#!forum/votca-xtp) | |
5 | ||
6 | and a slack channel: | |
7 | ||
8 | [Slack](https://votca.slack.com/messages/C7XVBE9EG/?) | |
9 | ||
10 | At the moment we are also working on a manual: | |
11 | ||
12 | [Manual](http://doc.votca.org/xtp-manual.pdf) | |
13 | ||
14 | The development of VOTCA is mainly funded by academic research grants. | |
15 | If you use this package, please cite the VOTCA papers: | |
16 | ||
17 | * Microscopic simulations of charge transport in disordered organic semiconductors | |
18 | V. Ruehle, A. Lukyanov, F. May, M. Schrader, T. Vehoff, J. Kirkpatrick, B. Baumeier and D. Andrienko | |
19 | J. Chem. Theo. Comp. 7, 3335-3345 (2011) | |
20 | ||
21 | * Versatile Object-oriented Toolkit for Coarse-graining Applications, | |
22 | V.Ruehle, C. Junghans, A. Lukyanov, K. Kremer, D. Andrienko, | |
23 | J. Chem. Theo. Comp. 5 (12), 3211 (2009) | |
24 | ||
25 | In case of questions, please post them in the google discussion group | |
26 | for votca at http://groups.google.com/group/votca-xtp | |
27 | ||
28 | You can contact the VOTCA Development Team at devs@votca.org. | |
29 | ||
30 | ||
31 |
0 | configure_file(votca_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/votca_config.h) | |
1 | ||
2 | file(GLOB_RECURSE VOTCA_HEADERS *.h ${CMAKE_CURRENT_BINARY_DIR}/votca_config.h) | |
3 | install(FILES ${VOTCA_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/votca/xtp) |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_ERIS_H | |
20 | #define VOTCA_XTP_ERIS_H | |
21 | ||
22 | ||
23 | #include <votca/xtp/threecenter.h> | |
24 | #include <votca/xtp/fourcenter.h> | |
25 | ||
26 | namespace votca { namespace xtp { | |
27 | ||
28 | /** | |
29 | * \brief Takes a density matrix and and an auxillary basis set and calculates the electron repulsion integrals. | |
30 | * | |
31 | * | |
32 | * | |
33 | */ | |
34 | class ERIs{ | |
35 | ||
36 | public: | |
37 | ||
38 | void Initialize(AOBasis &_dftbasis, AOBasis &_auxbasis, const Eigen::MatrixXd& inverse_Coulomb); | |
39 | void Initialize_4c_small_molecule(AOBasis &_dftbasis); | |
40 | void Initialize_4c_screening(AOBasis &_dftbasis, double eps); // Pre-screening | |
41 | ||
42 | const Eigen::MatrixXd& getEXX() const{return _EXXs;} | |
43 | ||
44 | const Eigen::MatrixXd& getERIs() const{return _ERIs;} | |
45 | double& getERIsenergy(){return _ERIsenergy;} | |
46 | double& getEXXsenergy(){return _EXXsenergy;} | |
47 | ||
48 | void CalculateERIs(const Eigen::MatrixXd &DMAT); | |
49 | void CalculateEXX(const Eigen::MatrixXd &DMAT); | |
50 | void CalculateEXX(const Eigen::Block<Eigen::MatrixXd>& occMos,const Eigen::MatrixXd &DMAT); | |
51 | void CalculateERIs_4c_small_molecule(const Eigen::MatrixXd &DMAT); | |
52 | void CalculateEXX_4c_small_molecule(const Eigen::MatrixXd &DMAT); | |
53 | ||
54 | void CalculateERIs_4c_direct(const AOBasis& dftbasis, const Eigen::MatrixXd& DMAT); | |
55 | ||
56 | int getSize1(){return _ERIs.rows();} | |
57 | int getSize2(){return _ERIs.cols();} | |
58 | ||
59 | void printERIs(); | |
60 | ||
61 | private: | |
62 | ||
63 | bool _with_screening = false; | |
64 | double _screening_eps; | |
65 | Eigen::MatrixXd _diagonals; // Square matrix containing <ab|ab> for all basis functions a, b | |
66 | ||
67 | void CalculateERIsDiagonals(const AOBasis& dftbasis); | |
68 | ||
69 | bool CheckScreen(double eps, | |
70 | const AOShell& shell_1, const AOShell& shell_2, | |
71 | const AOShell& shell_3, const AOShell& shell_4); | |
72 | ||
73 | TCMatrix_dft _threecenter; | |
74 | FCMatrix _fourcenter; | |
75 | ||
76 | Eigen::MatrixXd _ERIs; | |
77 | Eigen::MatrixXd _EXXs; | |
78 | ||
79 | double _ERIsenergy; | |
80 | double _EXXsenergy; | |
81 | ||
82 | void CalculateEnergy(const Eigen::MatrixXd &DMAT); | |
83 | void CalculateEXXEnergy(const Eigen::MatrixXd &DMAT); | |
84 | ||
85 | void FillERIsBlock(Eigen::MatrixXd& ERIsCur, const Eigen::MatrixXd& DMAT, | |
86 | const tensor4d& block, | |
87 | const AOShell& shell_1, const AOShell& shell_2, | |
88 | const AOShell& shell_3, const AOShell& shell_4); | |
89 | ||
90 | }; | |
91 | ||
92 | }} | |
93 | ||
94 | #endif // VOTCA_XTP_ERIS_H | |
95 |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_MD2QMENGINE_H | |
20 | #define VOTCA_XTP_MD2QMENGINE_H | |
21 | ||
22 | #include <votca/xtp/calculatorfactory.h> | |
23 | #include <votca/tools/property.h> | |
24 | #include <votca/xtp/statesaversqlite.h> | |
25 | #include <votca/xtp/topology.h> | |
26 | #include <votca/csg/topology.h> | |
27 | ||
28 | namespace XTP = votca::xtp; | |
29 | namespace CSG = votca::csg; | |
30 | namespace TOOLS = votca::tools; | |
31 | ||
32 | namespace votca{ | |
33 | namespace xtp{ | |
34 | ||
35 | ||
36 | class Md2QmEngine | |
37 | { | |
38 | public: | |
39 | ||
40 | Md2QmEngine() { }; | |
41 | ~Md2QmEngine(); | |
42 | ||
43 | void Initialize(const std::string &xmlfile); | |
44 | void PrintInfo(); | |
45 | ||
46 | // Converts atomistic to QM topology | |
47 | void Md2Qm(csg::Topology *mdtop, Topology *qmtop); | |
48 | // Creates an QM molecule container based on MD molecule and the xml std::map | |
49 | Molecule *MoleculeFactory(csg::Molecule *molMDTemplate); | |
50 | // Partitions the QM molecule on segments and fragments | |
51 | Molecule *ExportMolecule(Molecule *molQM, Topology *qmtop); | |
52 | ||
53 | private: | |
54 | ||
55 | tools::Property _typology; | |
56 | ||
57 | // Type std::vectors | |
58 | std::vector < Molecule* > _molecule_types; | |
59 | std::vector < Segment* > _segment_types; | |
60 | std::vector < SegmentType* > _qmUnits; | |
61 | std::vector < Fragment* > _fragment_types; | |
62 | std::vector < Atom* > _atom_types; | |
63 | ||
64 | // MD <-> QM Maps | |
65 | std::map < std::string, std::map < int, std::map < std::string, Atom* > > > | |
66 | _map_mol_resNr_atm_atmType; | |
67 | std::map < std::string, Molecule* > _map_MoleculeName_MoleculeType; | |
68 | std::map < std::string, std::string > _map_MoleculeMDName_MoleculeName; | |
69 | std::map < int, Segment* > _map_id_segment; | |
70 | ||
71 | ||
72 | // Type Creators | |
73 | Molecule *AddMoleculeType(int molecule_id, tools::Property *property); | |
74 | Segment *AddSegmentType(int segment_id, tools::Property *property); | |
75 | SegmentType *AddQMUnit(int unit_id, tools::Property *property); | |
76 | Fragment *AddFragmentType(int fragment_id, tools::Property *property); | |
77 | Atom *AddAtomType(Molecule *owner, | |
78 | std::string residue_name, int residue_number, | |
79 | std::string md_atom_name, int md_atom_id, | |
80 | bool hasQMPart, int qm_atom_id, | |
81 | tools::vec qmpos, std::string element, | |
82 | double weight); | |
83 | ||
84 | ||
85 | ||
86 | const std::string &getMoleculeName(const std::string &mdname); | |
87 | Molecule *getMoleculeType(const std::string &name); | |
88 | Atom *getAtomType(const std::string &molMdName, | |
89 | int resNr, const std::string &mdAtomName); | |
90 | void ReadXYZFile(std::string &file, | |
91 | std::map<int, std::pair<std::string,tools::vec> > &intCoords); | |
92 | ||
93 | ||
94 | }; | |
95 | ||
96 | } | |
97 | } | |
98 | ||
99 | ||
100 | #endif // VOTCA_XTP_MD2QMENGINE_H |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef _VOTCA_XTP_ADIIS__H | |
20 | #define _VOTCA_XTP_ADIIS__H | |
21 | ||
22 | ||
23 | ||
24 | #include <votca/xtp/eigen.h> | |
25 | #include <vector> | |
26 | ||
27 | namespace votca { namespace xtp { | |
28 | ||
29 | ||
30 | ||
31 | class ADIIS{ | |
32 | public: | |
33 | ||
34 | ADIIS():success(true) {}; | |
35 | ~ADIIS() {}; | |
36 | ||
37 | Eigen::VectorXd CalcCoeff(const std::vector< Eigen::MatrixXd* >& _dmathist,const std::vector< Eigen::MatrixXd* >& _mathist); | |
38 | ||
39 | ||
40 | bool Info(){return success;} | |
41 | private: | |
42 | ||
43 | bool success; | |
44 | ||
45 | }; | |
46 | ||
47 | }} | |
48 | ||
49 | #endif | |
50 |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_ADIIS_COSTFUNCTION_H | |
20 | #define VOTCA_XTP_ADIIS_COSTFUNCTION_H | |
21 | ||
22 | ||
23 | #include <votca/xtp/optimiser_costfunction.h> | |
24 | ||
25 | ||
26 | namespace votca { | |
27 | namespace xtp { | |
28 | ||
29 | class ADIIS_costfunction : public Optimiser_costfunction { | |
30 | public: | |
31 | ||
32 | ADIIS_costfunction(Eigen::VectorXd DiF, Eigen::MatrixXd DiFj) { | |
33 | _DiF = DiF; | |
34 | _DiFj = DiFj; | |
35 | } | |
36 | ||
37 | double EvaluateCost(const Eigen::VectorXd& parameters){ | |
38 | Eigen::VectorXd c = parameters.cwiseAbs2(); | |
39 | double xnorm = c.sum(); | |
40 | c /= xnorm; | |
41 | return (2 * c.transpose() * _DiF + c.transpose() * _DiFj * c).value(); | |
42 | } | |
43 | ||
44 | Eigen::VectorXd EvaluateGradient(const Eigen::VectorXd& parameters){ | |
45 | Eigen::VectorXd c = parameters.cwiseAbs2(); | |
46 | double xnorm = c.sum(); | |
47 | c /= xnorm; | |
48 | Eigen::VectorXd dEdc = 2.0 * _DiF + _DiFj * c + _DiFj.transpose() * c; | |
49 | Eigen::MatrixXd jac = Eigen::MatrixXd::Zero(c.size(), c.size()); | |
50 | for (int i = 0; i < jac.rows(); i++) { | |
51 | for (int j = 0; j < jac.cols(); j++) { | |
52 | jac(i, j) = -c(i)*2.0 * parameters(j) / xnorm; | |
53 | } | |
54 | // Extra term on diagonal | |
55 | jac(i, i) += 2.0 * parameters(i) / xnorm; | |
56 | } | |
57 | return jac.transpose() * dEdc; | |
58 | } | |
59 | ||
60 | int NumParameters() const { | |
61 | return _DiF.size(); | |
62 | } | |
63 | ||
64 | bool Converged(const Eigen::VectorXd& delta_parameters, | |
65 | double delta_cost, const Eigen::VectorXd& gradient){ | |
66 | return gradient.cwiseAbs().maxCoeff()<1.e-7; | |
67 | } | |
68 | ||
69 | ||
70 | private: | |
71 | Eigen::VectorXd _DiF; | |
72 | Eigen::MatrixXd _DiFj; | |
73 | ||
74 | ||
75 | }; | |
76 | ||
77 | } | |
78 | } | |
79 | #endif // VOTCA_XTP_ADIIS_COSTFUNCTION_H |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_AOBASIS_H | |
20 | #define VOTCA_XTP_AOBASIS_H | |
21 | ||
22 | ||
23 | #include <boost/math/constants/constants.hpp> | |
24 | #include <votca/xtp/basisset.h> | |
25 | #include <votca/xtp/qmmolecule.h> | |
26 | #include <votca/xtp/eigen.h> | |
27 | #include <votca/xtp/aoshell.h> | |
28 | ||
29 | ||
30 | namespace votca { namespace xtp { | |
31 | ||
32 | /** | |
33 | * \brief Container to hold Basisfunctions for all atoms | |
34 | * | |
35 | * It is constructed from a vector of QMAtoms and a BasisSet. | |
36 | */ | |
37 | class AOBasis | |
38 | { | |
39 | public: | |
40 | ||
41 | void ReorderMOs(Eigen::MatrixXd &v,const std::string& start, const std::string& target ); | |
42 | ||
43 | void ReorderMatrix(Eigen::MatrixXd &v,const std::string& start,const std::string& target ); | |
44 | ||
45 | void AOBasisFill( const BasisSet& bs , const QMMolecule& atoms, int fragbreak = -1); | |
46 | ||
47 | //returns element names for which no ecp was found | |
48 | std::vector<std::string> ECPFill( const BasisSet& bs , QMMolecule& atoms); | |
49 | ||
50 | int AOBasisSize() const {return _AOBasisSize; } | |
51 | ||
52 | typedef std::vector< AOShell >::const_iterator AOShellIterator; | |
53 | AOShellIterator begin() const{ return _aoshells.begin(); } | |
54 | AOShellIterator end() const{ return _aoshells.end(); } | |
55 | ||
56 | Eigen::MatrixXd getTransformationCartToSpherical(const std::string& package); | |
57 | ||
58 | const AOShell& getShell( int idx )const{ return _aoshells[idx] ;} | |
59 | ||
60 | const std::vector<const AOShell*> getShellsofAtom(int AtomId)const; | |
61 | ||
62 | int getNumofShells() const{return _aoshells.size();} | |
63 | ||
64 | int getAOBasisFragA() const{return _AOBasisFragA;} | |
65 | ||
66 | int getAOBasisFragB() const{return _AOBasisFragB;} | |
67 | ||
68 | int getFuncOfAtom(int AtomIndex)const{return _FuncperAtom[AtomIndex];} | |
69 | ||
70 | const std::vector<int>& getFuncPerAtom()const {return _FuncperAtom;} | |
71 | ||
72 | const AOShell& back()const{return _aoshells.back();} | |
73 | ||
74 | private: | |
75 | ||
76 | AOShell& addShell( const Shell& shell, const QMAtom& atom, int startIndex ); | |
77 | ||
78 | AOShell& addECPShell( const Shell& shell, const QMAtom& atom, int startIndex,bool nonlocal); | |
79 | ||
80 | void MultiplyMOs(Eigen::MatrixXd &v, std::vector<int> const &multiplier ); | |
81 | ||
82 | ||
83 | ||
84 | std::vector<int> invertOrder(const std::vector<int>& order ); | |
85 | ||
86 | std::vector<int> getReorderVector(const std::string& start,const std::string& target ); | |
87 | ||
88 | void addReorderShell(const std::string& start,const std::string& target,const std::string& shell, std::vector<int>& neworder ); | |
89 | ||
90 | std::vector<int> getMultiplierVector(const std::string& start,const std::string& target ); | |
91 | ||
92 | void addMultiplierShell(const std::string& start,const std::string& target,const std::string& shell, std::vector<int>& multiplier ); | |
93 | ||
94 | void addTrafoCartShell( const AOShell& shell , Eigen::Block<Eigen::MatrixXd>& submatrix ); | |
95 | std::vector<AOShell> _aoshells; | |
96 | ||
97 | std::vector<int> _FuncperAtom; | |
98 | ||
99 | int _AOBasisFragA; | |
100 | int _AOBasisFragB; | |
101 | int _AOBasisSize; | |
102 | ||
103 | }; | |
104 | ||
105 | ||
106 | ||
107 | }} | |
108 | ||
109 | #endif // VOTCA_XTP_AOBASIS_H | |
110 |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_AOMATRIX_H | |
20 | #define VOTCA_XTP_AOMATRIX_H | |
21 | ||
22 | #include <votca/xtp/aobasis.h> | |
23 | #include <votca/xtp/aoshell.h> | |
24 | #include <votca/xtp/mmregion.h> | |
25 | #include <votca/xtp/multiarray.h> | |
26 | ||
27 | namespace votca { namespace xtp { | |
28 | ||
29 | namespace Cart { | |
30 | enum Index { | |
31 | s, // s | |
32 | x, y, z, // p | |
33 | xx, xy, xz, yy, yz, zz, // d | |
34 | xxx, xxy, xxz, xyy, xyz, xzz, yyy, yyz, yzz, zzz, // f | |
35 | xxxx, xxxy, xxxz, xxyy, xxyz, xxzz, xyyy, xyyz, xyzz, xzzz, yyyy, yyyz, yyzz, yzzz, zzzz, // g | |
36 | xxxxx, xxxxy, xxxxz, xxxyy, xxxyz, xxxzz, xxyyy, xxyyz, xxyzz, xxzzz, xyyyy, xyyyz, xyyzz, xyzzz, xzzzz, yyyyy, yyyyz, yyyzz, yyzzz, yzzzz, zzzzz, // h | |
37 | ||
38 | xxxxxx, xxxxxy, xxxxxz, xxxxyy, xxxxyz, xxxxzz, xxxyyy, xxxyyz, xxxyzz, xxxzzz, xxyyyy, xxyyyz, xxyyzz, xxyzzz, // i | |
39 | xxzzzz, xyyyyy, xyyyyz, xyyyzz, xyyzzz, xyzzzz, xzzzzz, yyyyyy, yyyyyz, yyyyzz, yyyzzz, yyzzzz, yzzzzz, zzzzzz, | |
40 | ||
41 | xxxxxxx, xxxxxxy, xxxxxxz, xxxxxyy, xxxxxyz, xxxxxzz, xxxxyyy, xxxxyyz, xxxxyzz, xxxxzzz, xxxyyyy, xxxyyyz, // j | |
42 | xxxyyzz, xxxyzzz, xxxzzzz, xxyyyyy, xxyyyyz, xxyyyzz, xxyyzzz, xxyzzzz, xxzzzzz, xyyyyyy, xyyyyyz, xyyyyzz, | |
43 | xyyyzzz, xyyzzzz, xyzzzzz, xzzzzzz, yyyyyyy, yyyyyyz, yyyyyzz, yyyyzzz, yyyzzzz, yyzzzzz, yzzzzzz, zzzzzzz, | |
44 | ||
45 | xxxxxxxx, xxxxxxxy, xxxxxxxz, xxxxxxyy, xxxxxxyz, xxxxxxzz, xxxxxyyy, xxxxxyyz, xxxxxyzz, xxxxxzzz, xxxxyyyy, xxxxyyyz, xxxxyyzz, xxxxyzzz, xxxxzzzz, // k | |
46 | xxxyyyyy, xxxyyyyz, xxxyyyzz, xxxyyzzz, xxxyzzzz, xxxzzzzz, xxyyyyyy, xxyyyyyz, xxyyyyzz, xxyyyzzz, xxyyzzzz, xxyzzzzz, xxzzzzzz, xyyyyyyy, xyyyyyyz, | |
47 | xyyyyyzz, xyyyyzzz, xyyyzzzz, xyyzzzzz, xyzzzzzz, xzzzzzzz, yyyyyyyy, yyyyyyyz, yyyyyyzz, yyyyyzzz, yyyyzzzz, yyyzzzzz, yyzzzzzz, yzzzzzzz, zzzzzzzz, | |
48 | }; | |
49 | } | |
50 | ||
51 | ||
52 | /* "superclass" AOSuperMatrix contains all common functionality for | |
53 | * atomic orbital matrix types | |
54 | */ | |
55 | class AOSuperMatrix{ | |
56 | public: | |
57 | static int getBlockSize( int _lmax ); | |
58 | static Eigen::MatrixXd getTrafo( const AOGaussianPrimitive& gaussian); | |
59 | void PrintIndexToFunction(const AOBasis& aobasis); | |
60 | }; | |
61 | ||
62 | ||
63 | // base class for 1D atomic orbital matrix types (overlap, Coulomb, ESP) | |
64 | template< class T> | |
65 | class AOMatrix : public AOSuperMatrix { | |
66 | public: | |
67 | // Access functions | |
68 | int Dimension(){ return _aomatrix.rows();} | |
69 | const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &Matrix() const{ return _aomatrix ;} | |
70 | void Fill(const AOBasis& aobasis); | |
71 | void Print( std::string ident); | |
72 | void FreeMatrix(){ | |
73 | _aomatrix.resize(0,0); | |
74 | } | |
75 | // integrate F | |
76 | static std::vector<double> XIntegrate( int size, double U ); | |
77 | protected: | |
78 | virtual void FillBlock(Eigen::Block< Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> >&matrix,const AOShell& shell_row,const AOShell& shell_col)=0 ; | |
79 | Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> _aomatrix; | |
80 | }; | |
81 | ||
82 | ||
83 | ||
84 | /* base class class for 3D atomic orbital matrix types | |
85 | * (in principle, we could make nD and 1D and 3D are just special types) | |
86 | */ | |
87 | class AOMatrix3D : public AOSuperMatrix { | |
88 | public: | |
89 | const std::array<Eigen::MatrixXd,3 > &Matrix() const{ return _aomatrix ;} | |
90 | void Print( std::string _ident); | |
91 | void Fill(const AOBasis& aobasis ); | |
92 | // block fill prototype | |
93 | void FreeMatrix(); | |
94 | protected: | |
95 | std::array<Eigen::MatrixXd,3 > _aomatrix; | |
96 | virtual void FillBlock(std::vector<Eigen::Block<Eigen::MatrixXd> >& matrix,const AOShell& shell_row,const AOShell& shell_col)=0 ; | |
97 | }; | |
98 | ||
99 | ||
100 | ||
101 | /* derived class for atomic orbital gradient matrices, required for | |
102 | * momentum transition dipoles | |
103 | */ | |
104 | class AOMomentum : public AOMatrix3D { | |
105 | protected: | |
106 | void FillBlock(std::vector< Eigen::Block<Eigen::MatrixXd> >& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
107 | }; | |
108 | ||
109 | /* derived class for atomic orbital electrical dipole matrices, required for | |
110 | * electical transition dipoles | |
111 | */ | |
112 | class AODipole : public AOMatrix3D { | |
113 | public: | |
114 | void setCenter(const Eigen::Vector3d& r){ _r=r;}// definition of a center around which the moment should be calculated | |
115 | protected: | |
116 | void FillBlock(std::vector< Eigen::Block<Eigen::MatrixXd> >& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
117 | private: | |
118 | Eigen::Vector3d _r=Eigen::Vector3d::Zero(); | |
119 | }; | |
120 | ||
121 | // derived class for atomic orbital nuclear potential | |
122 | class AOESP : public AOMatrix<double>{ | |
123 | public: | |
124 | ||
125 | void Fillnucpotential(const AOBasis& aobasis,const QMMolecule& atoms); | |
126 | void Fillextpotential(const AOBasis& aobasis, const std::shared_ptr<MMRegion> & sites); | |
127 | const Eigen::MatrixXd &getNuclearpotential()const{ return _nuclearpotential;} | |
128 | const Eigen::MatrixXd &getExternalpotential()const{ return _externalpotential;} | |
129 | void setPosition(const Eigen::Vector3d& r){ _r=r;}; | |
130 | protected: | |
131 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix ,const AOShell& shell_row,const AOShell& shell_col); | |
132 | private: | |
133 | ||
134 | Eigen::Vector3d _r; | |
135 | Eigen::MatrixXd _nuclearpotential; | |
136 | Eigen::MatrixXd _externalpotential; | |
137 | }; | |
138 | ||
139 | // derived class for Effective Core Potentials | |
140 | class AOECP : public AOMatrix<double>{ | |
141 | public: | |
142 | void setECP(const AOBasis* ecp){_ecp=ecp;} | |
143 | protected: | |
144 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
145 | private: | |
146 | ||
147 | const AOBasis* _ecp; | |
148 | Eigen::MatrixXd calcVNLmatrix(int _lmax_ecp,const Eigen::Vector3d& posC, | |
149 | const AOGaussianPrimitive& _g_row,const AOGaussianPrimitive& _g_col, | |
150 | const Eigen::Matrix<int,4,5>& power_ecp,const Eigen::Matrix<double,4,5>& gamma_ecp, | |
151 | const Eigen::Matrix<double,4,5>& pref_ecp ); | |
152 | ||
153 | void getBLMCOF(int lmax_ecp, int lmax_dft, const Eigen::Vector3d& pos, tensor3d& BLC, tensor3d& C ); | |
154 | Eigen::VectorXd CalcNorms( double decay,int size); | |
155 | Eigen::VectorXd CalcInt_r_exp( int nmax, double decay ); | |
156 | }; | |
157 | ||
158 | // derived class for kinetic energy | |
159 | class AOKinetic : public AOMatrix<double>{ | |
160 | protected: | |
161 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix , const AOShell& shell_row, const AOShell& shell_col); | |
162 | }; | |
163 | ||
164 | ||
165 | // derived class for atomic orbital overlap | |
166 | class AOOverlap : public AOMatrix<double>{ | |
167 | public: | |
168 | Eigen::MatrixXd FillShell(const AOShell& shell); | |
169 | int Removedfunctions()const{return removedfunctions;} | |
170 | double SmallestEigenValue()const{return smallestEigenvalue;} | |
171 | ||
172 | Eigen::MatrixXd Pseudo_InvSqrt(double etol); | |
173 | Eigen::MatrixXd Sqrt(); | |
174 | protected: | |
175 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
176 | private: | |
177 | int removedfunctions; | |
178 | double smallestEigenvalue; | |
179 | }; | |
180 | ||
181 | class AODipole_Potential : public AOMatrix<double>{ | |
182 | public: | |
183 | void Fillextpotential(const AOBasis& aobasis, const std::shared_ptr<MMRegion> & sites); | |
184 | Eigen::MatrixXd &getExternalpotential(){ return _externalpotential;} | |
185 | const Eigen::MatrixXd &getExternalpotential()const{ return _externalpotential;} | |
186 | protected: | |
187 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
188 | private: | |
189 | void setPolarSite(const PolarSite* site){polarsite=site;}; | |
190 | const PolarSite* polarsite; | |
191 | Eigen::MatrixXd _externalpotential; | |
192 | }; | |
193 | ||
194 | class AOQuadrupole_Potential : public AOMatrix<double>{ | |
195 | public: | |
196 | void Fillextpotential(const AOBasis& aobasis, const std::shared_ptr<MMRegion> & sites); | |
197 | Eigen::MatrixXd &getExternalpotential(){ return _externalpotential;} | |
198 | const Eigen::MatrixXd &getExternalpotential()const{ return _externalpotential;} | |
199 | protected: | |
200 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
201 | private: | |
202 | void setPolarSite(const PolarSite* site){polarsite=site;}; | |
203 | ||
204 | const PolarSite* polarsite; | |
205 | Eigen::MatrixXd _externalpotential; | |
206 | }; | |
207 | ||
208 | //derived class for atomic orbital Coulomb interaction | |
209 | class AOCoulomb : public AOMatrix<double>{ | |
210 | public: | |
211 | Eigen::MatrixXd Pseudo_InvSqrt_GWBSE(const AOOverlap& auxoverlap,double etol); | |
212 | Eigen::MatrixXd Pseudo_InvSqrt(double etol); | |
213 | int Removedfunctions(){return removedfunctions;} | |
214 | protected: | |
215 | void FillBlock( Eigen::Block<Eigen::MatrixXd>& matrix,const AOShell& shell_row,const AOShell& shell_col); | |
216 | private: | |
217 | int removedfunctions; | |
218 | }; | |
219 | ||
220 | class AOPlanewave : public AOMatrix<std::complex<double> >{ | |
221 | public: | |
222 | void Fillextpotential(const AOBasis& aobasis, const std::vector< Eigen::Vector3d>& kpoints); | |
223 | Eigen::MatrixXd getExternalpotential(){ return _externalpotential.real();} | |
224 | protected: | |
225 | void FillBlock(Eigen::Block<Eigen::MatrixXcd>& matrix, | |
226 | const AOShell& shell_row, const AOShell& shell_col); | |
227 | private: | |
228 | void setkVector(const Eigen::Vector3d& k){_k=k;}; | |
229 | Eigen::Vector3d _k; | |
230 | Eigen::MatrixXcd _externalpotential; | |
231 | }; | |
232 | ||
233 | ||
234 | }} | |
235 | ||
236 | #endif // VOTCA_XTP_AOMATRIX_H | |
237 |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_AOSHELL_H | |
20 | #define VOTCA_XTP_AOSHELL_H | |
21 | ||
22 | ||
23 | #include <boost/math/constants/constants.hpp> | |
24 | #include <votca/xtp/eigen.h> | |
25 | #include <votca/tools/constants.h> | |
26 | ||
27 | #include <votca/xtp/basisset.h> | |
28 | #include "qmatom.h" | |
29 | ||
30 | namespace votca { namespace xtp { | |
31 | ||
32 | class AOBasis; | |
33 | class AOShell; | |
34 | ||
35 | class AOGaussianPrimitive | |
36 | { | |
37 | friend class AOShell; | |
38 | public: | |
39 | ||
40 | double getPowfactor()const {return _powfactor;} | |
41 | int getPower()const{return _power;} | |
42 | double getDecay()const {return _decay;} | |
43 | const std::vector<double>& getContraction()const {return _contraction;} | |
44 | const AOShell& getShell() const{return _aoshell;} | |
45 | private: | |
46 | ||
47 | int _power; // used in pseudopotenials only | |
48 | double _decay; | |
49 | std::vector<double> _contraction; | |
50 | const AOShell& _aoshell; | |
51 | double _powfactor;//used in evalspace to speed up DFT | |
52 | // private constructor, only a shell can create a primitive | |
53 | AOGaussianPrimitive( const GaussianPrimitive& gaussian, const AOShell& aoshell ) | |
54 | : _power(gaussian._power), | |
55 | _decay(gaussian._decay), | |
56 | _contraction(gaussian._contraction), | |
57 | _aoshell(aoshell) {_powfactor=std::pow(2.0 * _decay / boost::math::constants::pi<double>(), 0.75) ; } | |
58 | ||
59 | AOGaussianPrimitive( const AOGaussianPrimitive& gaussian, const AOShell &aoshell ) | |
60 | : _power(gaussian._power), | |
61 | _decay(gaussian._decay), | |
62 | _contraction(gaussian._contraction), | |
63 | _aoshell(aoshell), | |
64 | _powfactor(gaussian._powfactor){;} | |
65 | ||
66 | }; | |
67 | ||
68 | /* | |
69 | * shells in a Gaussian-basis expansion | |
70 | */ | |
71 | class AOShell | |
72 | { | |
73 | friend class AOBasis; | |
74 | public: | |
75 | ||
76 | AOShell(const AOShell& shell){ | |
77 | ||
78 | _type= shell._type; | |
79 | _Lmax= shell._Lmax; | |
80 | _scale= shell._scale; | |
81 | _numFunc= shell._numFunc; | |
82 | _mindecay= shell._mindecay; | |
83 | _startIndex= shell._startIndex; | |
84 | _offset= shell._offset; | |
85 | _pos= shell._pos; | |
86 | _atomindex=shell._atomindex; | |
87 | _nonlocal=shell._nonlocal; | |
88 | _gaussians.reserve(shell._gaussians.size()); | |
89 | for(const auto& gaus:shell._gaussians){ | |
90 | _gaussians.push_back(AOGaussianPrimitive(gaus,*this)); | |
91 | } | |
92 | ||
93 | } | |
94 | ||
95 | const std::string& getType() const{ return _type; } | |
96 | int getNumFunc() const{ return _numFunc ;} | |
97 | int getStartIndex() const{ return _startIndex ;} | |
98 | int getOffset() const{ return _offset ;} | |
99 | int getAtomIndex() const{ return _atomindex;} | |
100 | ||
101 | int getLmax() const{ return _Lmax;} | |
102 | ||
103 | bool isCombined()const{ | |
104 | return _type.length()>1; | |
105 | } | |
106 | ||
107 | bool isNonLocal( ) const{ return _nonlocal;} | |
108 | ||
109 | const Eigen::Vector3d& getPos() const{ return _pos; } | |
110 | double getScale() const{ return _scale; } | |
111 | ||
112 | int getSize() const{ return _gaussians.size(); } | |
113 | ||
114 | void CalcMinDecay(){ | |
115 | _mindecay=std::numeric_limits<double>::max(); | |
116 | for(auto& gaussian:_gaussians){ | |
117 | if(gaussian.getDecay()<_mindecay){ | |
118 | _mindecay=gaussian.getDecay(); | |
119 | } | |
120 | } | |
121 | return; | |
122 | } | |
123 | ||
124 | double getMinDecay() const{return _mindecay;} | |
125 | ||
126 | ||
127 | void EvalAOspace(Eigen::VectorBlock<Eigen::VectorXd>& AOvalues, const Eigen::Vector3d& grid_pos ) const; | |
128 | void EvalAOspace(Eigen::VectorBlock<Eigen::VectorXd>& AOvalues,Eigen::Block< Eigen::MatrixX3d >& AODervalues, const Eigen::Vector3d& grid_pos ) const; | |
129 | ||
130 | // iterator over pairs (decay constant; contraction coefficient) | |
131 | typedef std::vector< AOGaussianPrimitive >::const_iterator GaussianIterator; | |
132 | GaussianIterator begin() const{ return _gaussians.begin(); } | |
133 | GaussianIterator end()const{ return _gaussians.end(); } | |
134 | ||
135 | // adds a Gaussian | |
136 | void addGaussian( const GaussianPrimitive& gaussian ){ | |
137 | AOGaussianPrimitive aogaussian = AOGaussianPrimitive(gaussian, *this); | |
138 | _gaussians.emplace_back( aogaussian ); | |
139 | return; | |
140 | } | |
141 | ||
142 | void normalizeContraction(); | |
143 | ||
144 | friend std::ostream &operator<<(std::ostream &out, const AOShell& shell); | |
145 | ||
146 | private: | |
147 | ||
148 | // only class aobasis can construct shells | |
149 | AOShell( const Shell& shell, const QMAtom & atom, int startIndex) | |
150 | : _type(shell.getType()),_Lmax(shell.getLmax()), | |
151 | _scale(shell.getScale()), _numFunc(shell.getnumofFunc()), | |
152 | _startIndex(startIndex), _offset(shell.getOffset()), _pos(atom.getPos()) , | |
153 | _atomindex(atom.getAtomID()) { ; } | |
154 | // for ECPs | |
155 | AOShell( const Shell& shell, const QMAtom & atom, int startIndex, bool nonlocal) | |
156 | : _type(shell.getType()),_Lmax(shell.getLmax()), | |
157 | _scale(shell.getScale()), _numFunc(shell.getnumofFunc()), | |
158 | _startIndex(startIndex), _offset(shell.getOffset()), _pos(atom.getPos()) , | |
159 | _atomindex(atom.getAtomID()),_nonlocal(nonlocal) { ; } | |
160 | ||
161 | ||
162 | ||
163 | // shell type (S, P, D)) | |
164 | std::string _type; | |
165 | int _Lmax; | |
166 | // scaling factor | |
167 | double _scale; | |
168 | // number of functions in shell | |
169 | int _numFunc; | |
170 | double _mindecay; | |
171 | int _startIndex; | |
172 | int _offset; | |
173 | Eigen::Vector3d _pos; | |
174 | int _atomindex; | |
175 | //used for ecp calculations | |
176 | bool _nonlocal; | |
177 | ||
178 | // vector of pairs of decay constants and contraction coefficients | |
179 | std::vector< AOGaussianPrimitive > _gaussians; | |
180 | ||
181 | }; | |
182 | ||
183 | ||
184 | }} | |
185 | ||
186 | #endif // VOTCA_XTP_AOSHELL_H | |
187 | ||
188 |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | /// For earlier commit history see ctp commit 77795ea591b29e664153f9404c8655ba28dc14e9 | |
19 | ||
20 | #ifndef VOTCA_XTP_ATOM_H | |
21 | #define VOTCA_XTP_ATOM_H | |
22 | ||
23 | #include <string> | |
24 | #include <map> | |
25 | #include <votca/tools/vec.h> | |
26 | #include <votca/tools/matrix.h> | |
27 | #include <exception> | |
28 | #include <map> | |
29 | ||
30 | namespace votca { | |
31 | namespace xtp { | |
32 | ||
33 | class Topology; | |
34 | class Molecule; | |
35 | class Segment; | |
36 | class Fragment; | |
37 | ||
38 | /** | |
39 | \brief information about an atom | |
40 | ||
41 | The Atom class stores atom id, name, type, mass, charge, residue number | |
42 | ||
43 | */ | |
44 | class Atom { | |
45 | public: | |
46 | Atom(Molecule *owner, std::string residue_name, int resnr, | |
47 | std::string md_atom_name, int md_atom_id, bool hasQMPart, int qm_atom_id, | |
48 | tools::vec qmPos, std::string element, double weight) | |
49 | : _id(md_atom_id), | |
50 | _name(md_atom_name), | |
51 | _mol(owner), | |
52 | _resnr(resnr), | |
53 | _resname(residue_name), | |
54 | _weight(weight), | |
55 | _bPos(false), | |
56 | _hasQM(hasQMPart), | |
57 | _qmId(qm_atom_id), | |
58 | _qmPos(qmPos), | |
59 | _element(element) {} | |
60 | ||
61 | Atom(int atom_id, std::string atom_name) | |
62 | : _id(atom_id), _name(atom_name), _hasQM(false), _qmId(-1) {} | |
63 | ||
64 | // TODO This should be replaced from a constructor to an overloaded = operator | |
65 | Atom(Atom *stencil) | |
66 | : _id(stencil->getId()), | |
67 | _name(stencil->getName() + "_ghost"), | |
68 | _top(NULL), | |
69 | _mol(NULL), | |
70 | _resnr(stencil->getResnr()), | |
71 | _resname(stencil->getResname()), | |
72 | _weight(stencil->getWeight()), | |
73 | _pos(stencil->getPos()), | |
74 | _bPos(true), | |
75 | _hasQM(stencil->HasQMPart()), | |
76 | _qmId(stencil->getQMId()), | |
77 | _qmPos(stencil->getQMPos()), | |
78 | _element(stencil->getElement()) {} | |
79 | ||
80 | Atom() {}; | |
81 | ~Atom() { _Q.clear(); } | |
82 | ||
83 | const int &getId() const { return _id; } | |
84 | const std::string &getName() const { return _name; } | |
85 | const std::string &getType() const { return _type; } | |
86 | const int &getResnr() const { return _resnr; } | |
87 | ||
88 | inline void setTopology(Topology *container) { _top = container; } | |
89 | inline void setMolecule(Molecule *container) { _mol = container; } | |
90 | inline void setSegment(Segment *container) { _seg = container; } | |
91 | inline void setFragment(Fragment *container) { _frag = container; } | |
92 | ||
93 | Topology *getTopology() { return _top; } | |
94 | Molecule *getMolecule() { return _mol; } | |
95 | Segment *getSegment() { return _seg; } | |
96 | Fragment *getFragment() { return _frag; } | |
97 | ||
98 | inline void setResnr(const int &resnr) { _resnr = resnr; } | |
99 | inline void setResname(const std::string &resname) { _resname = resname; } | |
100 | inline void setWeight(const double &weight) { _weight = weight; } | |
101 | inline void setQMPart(const int &qmid, tools::vec qmPos); | |
102 | inline void setQMPos(const tools::vec &qmPos) { _qmPos = qmPos; } | |
103 | inline void setElement(const std::string &element) { _element = element; } | |
104 | inline void TranslateBy(const tools::vec &shift) { | |
105 | _pos = _pos + shift; | |
106 | } | |
107 | ||
108 | inline const int &getResnr() { return _resnr; } | |
109 | inline const std::string &getResname() { return _resname; } | |
110 | inline const double &getWeight() { return _weight; } | |
111 | inline const int &getQMId() { return _qmId; } | |
112 | inline const tools::vec &getQMPos() { return _qmPos; } | |
113 | inline const std::string &getElement() { return _element; } | |
114 | ||
115 | inline const double &getQ(int state) { return _Q.at(state); } | |
116 | inline const double &getQ() { return _q->second; } | |
117 | inline void setQ(std::map<int, double> Q) { _Q = Q; } | |
118 | void chrg(int state) { _q = _Q.find(state); } | |
119 | ||
120 | inline void setPTensor(tools::matrix &ptensor) { _ptensor = ptensor; } | |
121 | const tools::matrix &getPTensor() { return _ptensor; } | |
122 | ||
123 | /** | |
124 | * get the position of the atom | |
125 | * \return atom position | |
126 | */ | |
127 | const tools::vec &getPos() const; | |
128 | /** | |
129 | * set the position of the atom | |
130 | * \param r atom position | |
131 | */ | |
132 | void setPos(const tools::vec &r); | |
133 | /** | |
134 | * direct access (read/write) to the position of the atom | |
135 | * \return reference to position | |
136 | */ | |
137 | tools::vec &Pos() { return _pos; } | |
138 | /** does this configuration store positions? */ | |
139 | bool HasPos() { return _bPos; } | |
140 | /** dose the bead store a position */ | |
141 | void HasPos(bool b); | |
142 | ||
143 | bool HasQMPart() { return _hasQM; } | |
144 | /** | |
145 | * molecule the bead belongs to | |
146 | * \return Molecule object | |
147 | */ | |
148 | ||
149 | protected: | |
150 | int _id; | |
151 | std::string _name; | |
152 | ||
153 | Topology *_top; | |
154 | Molecule *_mol; | |
155 | Segment *_seg; | |
156 | Fragment *_frag; | |
157 | ||
158 | std::string _type; | |
159 | int _resnr; | |
160 | std::string _resname; | |
161 | double _weight; | |
162 | tools::vec _pos; | |
163 | bool _bPos; | |
164 | ||
165 | bool _hasQM; | |
166 | int _qmId; | |
167 | tools::vec _qmPos; | |
168 | std::string _element; | |
169 | ||
170 | // charge state of segment => partial charge | |
171 | std::map<int, double> _Q; | |
172 | std::map<int, double>::iterator _q; | |
173 | tools::matrix _ptensor; | |
174 | }; | |
175 | ||
176 | inline void Atom::setPos(const tools::vec &r) { | |
177 | _bPos = true; | |
178 | _pos = r; | |
179 | } | |
180 | ||
181 | inline const tools::vec &Atom::getPos() const { | |
182 | if (!_bPos) throw std::runtime_error("Position has not yet been set"); | |
183 | return _pos; | |
184 | } | |
185 | ||
186 | inline void Atom::HasPos(bool b) { _bPos = b; } | |
187 | ||
188 | inline void Atom::setQMPart(const int &qmid, tools::vec qmPos) { | |
189 | if (qmid > -1) { | |
190 | _hasQM = true; | |
191 | _qmId = qmid; | |
192 | _qmPos = qmPos; | |
193 | } else { | |
194 | _hasQM = false; | |
195 | _qmId = -1; | |
196 | } | |
197 | } | |
198 | } | |
199 | } | |
200 | ||
201 | #endif // VOTCA_XTP_ATOM_H |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_ATOMCONTAINER_H | |
20 | #define VOTCA_XTP_ATOMCONTAINER_H | |
21 | #include <votca/xtp/eigen.h> | |
22 | #include <votca/tools/elements.h> | |
23 | #include <votca/xtp/checkpoint.h> | |
24 | #include <limits> | |
25 | ||
26 | /** | |
27 | * \brief Basic Container for QMAtoms,PolarSites and Atoms | |
28 | * | |
29 | * | |
30 | * | |
31 | */ | |
32 | ||
33 | namespace votca { namespace xtp { | |
34 | ||
35 | template<class T> class AtomContainer{ | |
36 | public: | |
37 | ||
38 | AtomContainer(std::string name,int id):_name(name),_id(id),_position_valid(false){}; | |
39 | ||
40 | const std::string& getName()const{return _name;} | |
41 | ||
42 | int getId()const{return _id;} | |
43 | ||
44 | int size()const{return _atomlist.size();} | |
45 | ||
46 | void push_back(const T& atom){_atomlist.push_back(atom);_position_valid=false;} | |
47 | void push_back(T&& atom){_atomlist.push_back(atom);_position_valid=false;} | |
48 | ||
49 | const T& at(int index)const{return _atomlist.at(index);} | |
50 | T& at(int index){return _atomlist.at(index);} | |
51 | ||
52 | const T& operator[](int index)const{return _atomlist[index];} | |
53 | T& operator[](int index){return _atomlist[index];} | |
54 | ||
55 | typename std::vector<T>::iterator begin(){return _atomlist.begin();} | |
56 | typename std::vector<T>::iterator end(){return _atomlist.end();} | |
57 | ||
58 | typename std::vector<T>::const_iterator begin()const{return _atomlist.begin();} | |
59 | typename std::vector<T>::const_iterator end()const{return _atomlist.end();} | |
60 | ||
61 | ||
62 | ||
63 | const Eigen::Vector3d& getPos()const{ | |
64 | if(!_position_valid){calcPos();} | |
65 | return _pos; | |
66 | } | |
67 | ||
68 | //calculates the lowest and highest point in the cube, sorrounding the molecule | |
69 | std::pair<Eigen::Vector3d,Eigen::Vector3d> CalcSpatialMinMax() const{ | |
70 | std::pair<Eigen::Vector3d,Eigen::Vector3d> result; | |
71 | Eigen::Vector3d min=std::numeric_limits<double>::max()*Eigen::Vector3d::Ones(); | |
72 | Eigen::Vector3d max=std::numeric_limits<double>::min()*Eigen::Vector3d::Ones(); | |
73 | for (const T& atom : _atomlist){ | |
74 | const Eigen::Vector3d& pos=atom.getPos(); | |
75 | if (pos.x()<min.x()) min.x()=pos.x(); | |
76 | if (pos.x()>max.x()) max.x()=pos.x(); | |
77 | if (pos.y()<min.y()) min.y()=pos.y(); | |
78 | if (pos.y()>max.y()) max.y()=pos.y(); | |
79 | if (pos.z()<min.z()) min.z()=pos.z(); | |
80 | if (pos.z()>max.z()) max.z()=pos.z(); | |
81 | } | |
82 | result.first=min; | |
83 | result.second=max; | |
84 | return result; | |
85 | } | |
86 | ||
87 | std::vector<std::string> FindUniqueElements()const{ | |
88 | std::vector<std::string> result; | |
89 | for (const T& atom : _atomlist){ | |
90 | if(std::find(result.begin(), result.end(), atom.getElement()) == result.end()) { | |
91 | result.push_back(atom.getElement()); | |
92 | } | |
93 | } | |
94 | return result; | |
95 | } | |
96 | ||
97 | ||
98 | void Translate(const Eigen::Vector3d& shift){ | |
99 | for(const T& atom:_atomlist){ | |
100 | atom.Translate(shift); | |
101 | } | |
102 | calcPos(); | |
103 | } | |
104 | ||
105 | void Rotate(const Eigen::Matrix3d& R, const Eigen::Vector3d& ref_pos){ | |
106 | for(const T& atom:_atomlist){ | |
107 | atom.Rotate(R,ref_pos); | |
108 | } | |
109 | calcPos(); | |
110 | } | |
111 | ||
112 | void WriteToCpt(CheckpointWriter& w)const{ | |
113 | w(_name,"name"); | |
114 | w(_id,"id"); | |
115 | for (unsigned i=0;i<_atomlist.size();i++) { | |
116 | CheckpointWriter s = w.openChild( T::Identify() + std::to_string(i)); | |
117 | _atomlist[i].WriteToCpt(s); | |
118 | } | |
119 | } | |
120 | ||
121 | void ReadFromCpt(CheckpointReader& r){ | |
122 | r(_name,"name"); | |
123 | r(_id,"id"); | |
124 | size_t count = r.getNumDataSets(); | |
125 | _atomlist.clear(); | |
126 | _atomlist.reserve(count); | |
127 | for (size_t i = 0; i < count; ++i) { | |
128 | CheckpointReader c = r.openChild( T::Identify() + std::to_string(i)); | |
129 | _atomlist.emplace_back(T(c)); | |
130 | } | |
131 | } | |
132 | ||
133 | protected: | |
134 | ||
135 | std::vector<T> _atomlist; | |
136 | std::string _name; | |
137 | int _id; | |
138 | ||
139 | private: | |
140 | mutable bool _position_valid; | |
141 | mutable Eigen::Vector3d _pos; | |
142 | ||
143 | void calcPos() const{ | |
144 | tools::Elements element; | |
145 | _pos=Eigen::Vector3d::Zero(); | |
146 | double totalmass=0.0; | |
147 | for (const T& atom:_atomlist){ | |
148 | double mass=element.getMass(atom.getElement()); | |
149 | totalmass+=mass; | |
150 | _pos+=mass*atom.getPos(); | |
151 | } | |
152 | _pos/=totalmass; | |
153 | _position_valid=true; | |
154 | } | |
155 | ||
156 | }; | |
157 | ||
158 | ||
159 | }} | |
160 | ||
161 | #endif // VOTCA_XTP_ATOMCONTAINER_H |
0 | /* | |
1 | * Copyright 2009-2018 The VOTCA Development Team | |
2 | * (http://www.votca.org) | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License") | |
5 | * | |
6 | * You may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | * | |
17 | */ | |
18 | ||
19 | #ifndef VOTCA_XTP_BASISSET_H | |
20 | #define VOTCA_XTP_BASISSET_H | |
21 | ||
22 | #include <string> | |
23 | #include <map> | |
24 | #include <vector> | |
25 | #include <memory> | |
26 | #include <iostream> | |
27 | ||
28 | ||
29 | ||
30 | namespace votca { namespace xtp { | |
31 | // shell type (S, P, D)) | |
32 | ||
33 | ||
34 | ||
35 | int FindLmax(const std::string& type); | |
36 | ||
37 | int FindLmin(const std::string& type); | |
38 | ||
39 | int OffsetFuncShell(const std::string& shell_type); | |
40 | ||
41 | int NumFuncShell(const std::string& shell_type); | |
42 | int NumFuncShell_cartesian(const std::string& shell_type); | |
43 | ||
44 | int OffsetFuncShell_cartesian(const std::string& shell_type); | |
45 | ||
46 | std::vector<int> NumFuncSubShell(const std::string& shell_type); | |
47 | ||
48 | ||
49 | ||
50 | class Shell; | |
51 | class Element; | |
52 | class BasisSet; | |
53 | ||
54 | // Gaussian function: contraction*exp(-decay*r^2) | |
55 | class GaussianPrimitive | |
56 | { | |
57 | friend class Shell; | |
58 | public: | |
59 | int _power; // used in pseudopotenials only | |
60 | double _decay; | |
61 | std::vector<double> _contraction; | |
62 | private: | |
63 | // private constructor, only a shell can create a primitive | |
64 | GaussianPrimitive( double decay, std::vector<double> contraction ) | |
65 | : _decay(decay), | |
66 | _contraction(contraction){ ; } | |
67 | ||
68 | GaussianPrimitive( int power, double decay, std::vector<double> contraction ) | |
69 | : _power(power), | |
70 | _decay(decay), | |
71 | _contraction(contraction){ ; } | |
72 | }; | |
73 | ||
74 | ||
75 | class Shell | |
76 | { | |
77 | friend class Element; | |
78 | public: | |
79 | ||
80 | const std::string& getType() const{ return _type; } | |
81 | ||
82 | bool isCombined()const{ | |
83 | return (_type.length()>1); | |
84 | } | |
85 | ||
86 | int getLmax() const{ | |
87 | return FindLmax(_type); | |
88 | } | |
89 | ||
90 | int getnumofFunc() const{ | |
91 | return NumFuncShell(_type); | |
92 | }; | |
93 | ||
94 | int getOffset()const{ | |
95 | return OffsetFuncShell(_type); | |
96 | } | |
97 | ||
98 | double getScale() const{ return _scale; } | |
99 | ||
100 | int getSize() const{ return _gaussians.size(); } | |
101 | ||
102 | std::vector< GaussianPrimitive >::const_iterator begin() const{ return _gaussians.begin(); } | |
103 | std::vector< GaussianPrimitive >::const_iterator end() const{ return _gaussians.end(); } | |
104 | ||
105 | // adds a Gaussian | |
106 | GaussianPrimitive& addGaussian( double decay, std::vector<double> contraction ); | |
107 | ||
108 | ||
109 | // adds a Gaussian of a pseudopotential | |
110 | GaussianPrimitive& addGaussian( int power, double decay, std::vector<double> contraction ); | |
111 | ||
112 | ||
113 | friend std::ostream &operator<<(std::ostream &out, const Shell& shell); | |
114 | private: | |
115 | ||
116 | // only class Element can construct shells | |
117 | Shell( std::string type, double scale) : _type(type), _scale(scale) { ; } | |
118 | ||
119 | std::string _type; | |
120 | // scaling factor | |
121 | double _scale; | |
122 | ||
123 | // vector of pairs of decay constants and contraction coefficients | |
124 | std::vector< GaussianPrimitive > _gaussians; | |
125 | ||
126 | }; | |
127 | ||
128 | /* | |
129 | * A collection of shells associated with a specific element | |
130 | */ | |
131 | class Element | |
132 | { | |
133 | friend class BasisSet; | |
134 | public: | |
135 | ||
136 | typedef std::vector< Shell >::const_iterator ShellIterator; | |
137 | ShellIterator begin() const{ return _shells.begin(); } | |
138 | ShellIterator end() const{ return _shells.end(); } | |
139 | ||
140 | const std::string& getType()const{ return _type; } | |
141 | ||
142 | int getLmax() const{ return _lmax; } | |
143 | ||
144 | int getNcore() const{ return _ncore; } | |
145 | ||
146 |