1 /* 2 * Copyright 2009-2020 The VOTCA Development Team 3 * (http://www.votca.org) 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License") 6 * 7 * You may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 */ 19 20 #pragma once 21 #ifndef VOTCA_XTP_AOTRANSFORM_H 22 #define VOTCA_XTP_AOTRANSFORM_H 23 24 // Local VOTCA includes 25 #include "aoshell.h" 26 #include "eigen.h" 27 28 namespace votca { 29 namespace xtp { 30 // clang-format off 31 //clang format puts one entry on each line 32 namespace Cart{ 33 enum Cart { 34 s, // s 35 x, y, z, // p 36 xx, xy, xz, yy, yz, zz, // d 37 xxx, xxy, xxz, xyy, xyz, xzz, yyy, yyz, yzz, zzz, // f 38 39 xxxx, xxxy, xxxz, xxyy, xxyz, xxzz, xyyy, xyyz, xyzz, xzzz, yyyy, 40 yyyz, yyzz, yzzz, zzzz, // g 41 42 xxxxx, xxxxy, xxxxz, xxxyy, xxxyz, xxxzz, xxyyy, xxyyz, xxyzz, 43 xxzzz, xyyyy, xyyyz, xyyzz, xyzzz, xzzzz, yyyyy, yyyyz, yyyzz, 44 yyzzz, yzzzz, zzzzz, // h 45 46 xxxxxx, xxxxxy, xxxxxz, xxxxyy, xxxxyz, xxxxzz, xxxyyy, xxxyyz, 47 xxxyzz, xxxzzz, xxyyyy, xxyyyz, xxyyzz, xxyzzz, xxzzzz, xyyyyy, 48 xyyyyz, xyyyzz, xyyzzz, xyzzzz, xzzzzz, yyyyyy, yyyyyz, yyyyzz, 49 yyyzzz, yyzzzz, yzzzzz, zzzzzz, //i 50 51 xxxxxxx, xxxxxxy, xxxxxxz, xxxxxyy, xxxxxyz, xxxxxzz, xxxxyyy, 52 xxxxyyz, xxxxyzz, xxxxzzz, xxxyyyy, xxxyyyz, xxxyyzz, xxxyzzz, 53 xxxzzzz, xxyyyyy, xxyyyyz, xxyyyzz, xxyyzzz, xxyzzzz, xxzzzzz, 54 xyyyyyy, xyyyyyz, xyyyyzz, xyyyzzz, xyyzzzz, xyzzzzz, xzzzzzz, 55 yyyyyyy, yyyyyyz, yyyyyzz, yyyyzzz, yyyzzzz, yyzzzzz, yzzzzzz, 56 zzzzzzz, //j 57 58 xxxxxxxx, xxxxxxxy, xxxxxxxz, xxxxxxyy, xxxxxxyz, xxxxxxzz, xxxxxyyy, 59 xxxxxyyz, xxxxxyzz, xxxxxzzz, xxxxyyyy, xxxxyyyz, xxxxyyzz, xxxxyzzz, 60 xxxxzzzz, xxxyyyyy, xxxyyyyz, xxxyyyzz, xxxyyzzz, xxxyzzzz, xxxzzzzz, 61 xxyyyyyy, xxyyyyyz, xxyyyyzz, xxyyyzzz, xxyyzzzz, xxyzzzzz, xxzzzzzz, 62 xyyyyyyy, xyyyyyyz, xyyyyyzz, xyyyyzzz, xyyyzzzz, xyyzzzzz, xyzzzzzz, 63 xzzzzzzz, yyyyyyyy, yyyyyyyz, yyyyyyzz, yyyyyzzz, yyyyzzzz, yyyzzzzz, 64 yyzzzzzz, yzzzzzzz, zzzzzzzz, //k 65 }; 66 } 67 68 // clang-format on 69 70 /* contains cartesian to spherical conversion 71 */ 72 73 class AOTransform { 74 75 public: 76 static std::array<int, 9> n_orbitals(); 77 static std::array<int, 165> nx(); 78 static std::array<int, 165> ny(); 79 static std::array<int, 165> nz(); 80 static std::array<int, 165> i_less_x(); 81 static std::array<int, 165> i_less_y(); 82 static std::array<int, 165> i_less_z(); 83 static std::array<int, 120> i_more_x(); 84 static std::array<int, 120> i_more_y(); 85 static std::array<int, 120> i_more_z(); 86 87 static Index getBlockSize(Index lmax); 88 static Eigen::VectorXd XIntegrate(Index size, double U); 89 90 static double getNorm(L l, const AOGaussianPrimitive& gaussian); 91 92 /// transforms a cartesian shell to a spherical cartesian shell 93 template <typename Matrix> 94 static Matrix tform(L l_row, L l_col, const Matrix& cartesian); 95 }; 96 97 } // namespace xtp 98 } // namespace votca 99 100 #endif // VOTCA_XTP_AOTRANSFORM_H 101