QMCPACK
GamesAsciiParser.cpp File Reference
+ Include dependency graph for GamesAsciiParser.cpp:

Go to the source code of this file.

Functions

void Cartesian2Spherical (int n, double *Cart, double *Sphe)
 

Function Documentation

◆ Cartesian2Spherical()

void Cartesian2Spherical ( int  n,
double *  Cart,
double *  Sphe 
)

Definition at line 892 of file GamesAsciiParser.cpp.

References qmcplusplus::n, and qmcplusplus::sqrt().

893 {
894  switch (n)
895  {
896  case 1: {
897  *Sphe = *Cart;
898  break;
899  }
900  case 3: {
901  // m = -1
902  *(Sphe) = *(Cart + 1);
903  // m = 0
904  *(Sphe + 1) = *(Cart + 2);
905  // m = 1
906  *(Sphe + 2) = *(Cart);
907  break;
908  }
909  case 5: {
910  // m = -2
911  *(Sphe) = *(Cart + 3);
912  // m = -1
913  *(Sphe + 1) = *(Cart + 5);
914  // m = 0
915  *(Sphe + 2) = *(Cart + 2) - 0.5 * (*(Cart) + *(Cart + 1));
916  // m = 1
917  *(Sphe + 3) = *(Cart + 4);
918  // m = 2
919  *(Sphe + 4) = std::sqrt(0.75) * (*(Cart) - *(Cart + 1));
920  break;
921  }
922  case 7: {
923  // m = -3
924  *(Sphe) = -1.0 * std::sqrt(5.0 / 8.0) * (*(Cart + 1)) + std::sqrt(9.0 / 8.0) * (*(Cart + 3));
925  // m = -2
926  *(Sphe + 1) = *(Cart + 9);
927  // m = -1
928  *(Sphe + 2) = std::sqrt(6.0 / 5.0) * (*(Cart + 8)) - std::sqrt(3.0 / 8.0) * (*(Cart + 1)) -
929  std::sqrt(6.0 / 5.0) * (*(Cart + 3)) / 4.0;
930  // m = 0
931  *(Sphe + 3) = *(Cart + 2) - 3.0 / std::sqrt(10.0) * (*(Cart + 4) + *(Cart + 6));
932  // m = 1
933  *(Sphe + 4) = std::sqrt(6.0 / 5.0) * (*(Cart + 7)) - std::sqrt(3.0 / 8.0) * (*(Cart)) -
934  std::sqrt(6.0 / 5.0) * (*(Cart + 5)) / 4.0;
935  // m = 2
936  *(Sphe + 5) = std::sqrt(3.0 / 4.0) * (*(Cart + 4) - *(Cart + 6));
937  // m = 3
938  *(Sphe + 6) = -1.0 * std::sqrt(5.0 / 8.0) * (*(Cart)) + std::sqrt(9.0 / 8.0) * (*(Cart + 5));
939  break;
940  }
941  case 9: {
942  // m = -4
943  *(Sphe) = std::sqrt(5.0 / 4.0) * (*(Cart + 3) - *(Cart + 5));
944  // m = -3
945  *(Sphe + 1) = -1.0 * std::sqrt(5.0 / 8.0) * (*(Cart + 6)) + std::sqrt(9.0 / 8.0) * (*(Cart + 12));
946  // m = -2
947  *(Sphe + 2) = std::sqrt(9.0 / 7.0) * (*(Cart + 14)) - std::sqrt(5.0 / 28.0) * (*(Cart + 3) + *(Cart + 5));
948  // m = -1
949  *(Sphe + 3) = std::sqrt(10.0 / 7.0) * (*(Cart + 8)) - 0.75 * std::sqrt(10.0 / 7.0) * (*(Cart + 6)) -
950  0.75 * std::sqrt(2.0 / 7.0) * (*(Cart + 12));
951  // m = 0
952  *(Sphe + 4) = *(Cart + 2) + std::sqrt(9.0 / 32.0) * (*(Cart) + *(Cart + 1)) -
953  3.0 * std::sqrt(6.0 / 35.0) * (*(Cart + 10) + *(Cart + 11) - 0.25 * (*(Cart + 9)));
954  // m = 1
955  *(Sphe + 5) = std::sqrt(10.0 / 7.0) * (*(Cart + 7)) - 0.75 * std::sqrt(10.0 / 7.0) * (*(Cart + 4)) -
956  0.75 * std::sqrt(2.0 / 7.0) * (*(Cart + 13));
957  // m = 2
958  *(Sphe + 6) =
959  1.5 * std::sqrt(3.0 / 7.0) * (*(Cart + 10) - *(Cart + 11)) - std::sqrt(5.0 / 16.0) * (*(Cart) - *(Cart + 1));
960  // m = 3
961  *(Sphe + 7) = std::sqrt(5.0 / 8.0) * (*(Cart + 4)) - std::sqrt(9.0 / 8.0) * (*(Cart + 13));
962  // m = 4
963  *(Sphe + 8) = std::sqrt(35.0) / 8.0 * (*(Cart) + *(Cart + 1)) - std::sqrt(3.0) * 0.75 * (*(Cart + 9));
964  break;
965  }
966  /* GAMESS doesn't allow H or higher
967  case 11:
968  {
969  // m = -5
970  *(Sphe) = 0.75*std::sqrt(7.0/8.0)*(*(Cart)+*(Cart))+std::sqrt()*(*(Cart)+*(Cart))-std::sqrt()*(*(Cart)+*(Cart));
971  // m = -4
972  *(Sphe+1) = std::sqrt()*(*(Cart)+*(Cart));
973  // m = -3
974  *(Sphe+2) = std::sqrt()*(*(Cart)+*(Cart));
975  // m = -2
976  *(Sphe+3) = std::sqrt()*(*(Cart)+*(Cart));
977  // m = -1
978  *(Sphe+4) = std::sqrt()*(*(Cart)+*(Cart));
979  // m = 0
980  *(Sphe+5) = std::sqrt()*(*(Cart)+*(Cart));
981  // m = 1
982  *(Sphe+6) = std::sqrt()*(*(Cart)+*(Cart));
983  // m = 2
984  *(Sphe+7) = std::sqrt()*(*(Cart)+*(Cart));
985  // m = 3
986  *(Sphe+8) = std::sqrt()*(*(Cart)+*(Cart));
987  // m = 4
988  *(Sphe+9) = std::sqrt()*(*(Cart)+*(Cart));
989  // m = 5
990  *(Sphe+10) = std::sqrt()*(*(Cart)+*(Cart));
991  }
992  */
993  default: {
994  std::cerr << "Error in Cartesian2Spherical. Invalid n: " << n << std::endl;
995  abort();
996  }
997  }
998 }
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)