56template <
typename _ExpansionScalar,
typename _Shell>
58 public SpinResolvedBase<USpinOrbitalBasisComponent<_ExpansionScalar, _Shell>, USpinOrbitalBasis<_ExpansionScalar, _Shell>>,
102 if (C.alpha().numberOfOrbitals() != alpha_scalar_basis.numberOfBasisFunctions()) {
103 throw std::invalid_argument(
"USpinOrbitalBasis(const ScalarBasis<Shell>&, const ScalarBasis<Shell>&, const UTransformation<ExpansionScalar>&): The given dimensions of the scalar basis and coefficient matrix for the alpha spin-orbitals are incompatible.");
106 if (C.beta().numberOfOrbitals() != beta_scalar_basis.numberOfBasisFunctions()) {
107 throw std::invalid_argument(
"USpinOrbitalBasis(const ScalarBasis<Shell>&, const ScalarBasis<Shell>&, const UTransformation<ExpansionScalar>&): The given dimensions of the scalar basis and coefficient matrix for the beta spin-orbitals are incompatible.");
205 template <
typename Z = Shell>
207 typename std::enable_if<std::is_same<Z, LondonGTOShell>::value>::type* = 0) :
224 const auto& scalar_basis = r_spinor_basis.
scalarBasis();
225 const auto& C = r_spinor_basis.
expansion();
251 return K_alpha + K_beta;
316 const auto S_z_a = 0.5 * S_a;
317 const auto S_z_b = -0.5 * S_b;
319 return ResultOperator {S_z_a, S_z_b};
345 const auto S_z2_a = 0.25 * S_a;
346 const auto S_z2_b = -0.25 * S_b;
353 const auto one_electron = S_z + S_mp + S_z2;
362 for (
size_t p = 0; p < dim; p++) {
363 for (
size_t q = 0; q < dim; q++) {
364 for (
size_t r = 0; r < dim; r++) {
365 for (
size_t s = 0; s < dim; s++) {
366 g_ab_par(p, q, r, s) = -1.0 * S_a.parameters()(p, r) * S_b.parameters()(q, s);
367 g_ba_par(p, q, r, s) = -1.0 * S_b.parameters()(p, r) * S_a.parameters()(q, s);
389 template <
typename Z = Shell>
392 const auto& B = fq_op.magneticField().strength();
394 throw std::invalid_argument(
"USpinOrbitalBasis::quantize(const FQMolecularPauliHamiltonian&): Only the spin Zeeman operator for a magnetic field along the z-axis can be quantized in an USpinOrbitalBasis.");
416 template <
typename Z = Shell>
433 for (
size_t i = 0; i < g_aa_par.dimension(0); i++) {
434 for (
size_t j = 0; j < g_aa_par.dimension(1); j++) {
435 for (
size_t k = 0; k < g_aa_par.dimension(2); k++) {
436 for (
size_t l = 0; l < g_aa_par.dimension(3); l++) {
437 g_aa(i, j, k, l) = g_aa_par(i, j, k, l);
438 g_ab(i, j, k, l) = g_ab_par(i, j, k, l);
439 g_ba(i, j, k, l) = g_ba_par(i, j, k, l);
440 g_bb(i, j, k, l) = g_bb_par(i, j, k, l);
447 ResultOperator g {g_aa, g_ab, g_ba, g_bb};
465 template <
typename Z = Shell>
485 for (
size_t i = 0; i < g_aa_par.dimension(0); i++) {
486 for (
size_t j = 0; j < g_aa_par.dimension(1); j++) {
487 for (
size_t k = 0; k < g_aa_par.dimension(2); k++) {
488 for (
size_t l = 0; l < g_aa_par.dimension(3); l++) {
489 g_aa(i, j, k, l) = g_aa_par(i, j, k, l);
490 g_ab(i, j, k, l) = g_ab_par(i, j, k, l);
491 g_ba(i, j, k, l) = g_ba_par(i, j, k, l);
492 g_bb(i, j, k, l) = g_bb_par(i, j, k, l);
499 ResultOperator g {g_aa, g_ab, g_ba, g_bb};
513 template <
typename Z = Shell>
535 template <
typename Z = Shell>
565 template <
typename FQOneElectronOperator>
575 return ResultOperator {f_a, f_b};
649template <
typename ExpansionScalar,
typename Shell>
660template <
typename _ExpansionScalar,
typename _Shell>
675template <
typename _ExpansionScalar,
typename _Shell>
Definition: CoulombRepulsionOperator.hpp:31
Definition: DenseVectorizer.hpp:49
Definition: ElectronicSpin_zOperator.hpp:31
Definition: ElectronicSpinSquaredOperator.hpp:32
Definition: FQMolecularHamiltonian.hpp:33
const KineticOperator & kinetic() const
Definition: FQMolecularHamiltonian.hpp:73
const NuclearAttractionOperator & nuclearAttraction() const
Definition: FQMolecularHamiltonian.hpp:78
const CoulombRepulsionOperator & coulombRepulsion() const
Definition: FQMolecularHamiltonian.hpp:83
Definition: FQMolecularMagneticHamiltonian.hpp:35
const DiamagneticOperator & diamagnetic() const
Definition: FQMolecularMagneticHamiltonian.hpp:80
const OrbitalZeemanOperator & orbitalZeeman() const
Definition: FQMolecularMagneticHamiltonian.hpp:75
Definition: FQMolecularPauliHamiltonian.hpp:32
const SpinZeemanOperator & spinZeeman() const
Definition: FQMolecularPauliHamiltonian.hpp:70
Definition: HomogeneousMagneticField.hpp:30
static Matrix< double > calculateLibintIntegrals(const FQOneElectronOperator &fq_one_op, const ScalarBasis< GTOShell > &left_scalar_basis, const ScalarBasis< GTOShell > &right_scalar_basis)
Definition: IntegralCalculator.hpp:181
static auto calculate(BaseOneElectronIntegralEngine< Shell, N, IntegralScalar > &engine, const ShellSet< Shell > &left_shell_set, const ShellSet< Shell > &right_shell_set) -> std::array< MatrixX< IntegralScalar >, N >
Definition: IntegralCalculator.hpp:61
Definition: MixedUSQTwoElectronOperatorComponent.hpp:40
Definition: Molecule.hpp:34
Definition: NuclearFramework.hpp:35
Definition: OverlapOperator.hpp:31
Definition: PureUSQTwoElectronOperatorComponent.hpp:39
Definition: RSpinOrbitalBasis.hpp:63
Definition: SQHamiltonian.hpp:54
Definition: ScalarBasis.hpp:41
Definition: USQTwoElectronOperator.hpp:380
const ScalarBasis< Shell > & scalarBasis() const
Definition: SimpleSpinOrbitalBasis.hpp:133
SQOverlapOperator overlap() const
Definition: SimpleSpinorBasis.hpp:118
void lowdinOrthonormalize()
Definition: SimpleSpinorBasis.hpp:149
const Transformation & expansion() const
Definition: SimpleSpinorBasis.hpp:98
Transformation lowdinOrthonormalization() const
Definition: SimpleSpinorBasis.hpp:138
bool isOrthonormal(const double precision=1.0e-08) const
Definition: SimpleSpinorBasis.hpp:127
size_t simpleDimension() const
Definition: SimpleSpinorBasis.hpp:108
Definition: SpinResolvedBase.hpp:39
USpinOrbitalBasisComponent< _ExpansionScalar, _Shell > Of
Definition: SpinResolvedBase.hpp:42
const Of & beta() const
Definition: SpinResolvedBase.hpp:140
const Of & alpha() const
Definition: SpinResolvedBase.hpp:130
static Derived FromEqual(const Of &equal)
Definition: SpinResolvedBase.hpp:118
Definition: SpinResolvedJacobiRotatable.hpp:35
USpinOrbitalBasis< _ExpansionScalar, _Shell > rotated(const JacobiRotationType &jacobi_rotation) const override
Definition: SpinResolvedJacobiRotatable.hpp:54
Definition: SpinZeemanOperator.hpp:30
static Self Zero(const size_t dim)
Definition: SquareMatrix.hpp:289
Definition: SquareRankFourTensor.hpp:36
static Self Zero(const size_t dim)
Definition: SquareRankFourTensor.hpp:147
Definition: UJacobiRotation.hpp:32
Definition: UMullikenDomain.hpp:37
Definition: USQOneElectronOperatorComponent.hpp:40
Definition: USQOneElectronOperator.hpp:48
Definition: USQTwoElectronOperator.hpp:50
Definition: USpinOrbitalBasisComponent.hpp:42
UMullikenDomainComponent< ExpansionScalar > mullikenDomain(const std::function< bool(const BasisFunction &)> &selector) const
Definition: USpinOrbitalBasisComponent.hpp:214
auto quantize(const FQOneElectronOperator &fq_one_op) const -> enable_if_t< std::is_same< Z, GTOShell >::value, USQOneElectronOperatorComponent< product_t< typename FQOneElectronOperator::Scalar, ExpansionScalar >, typename FQOneElectronOperator::Vectorizer > >
Definition: USpinOrbitalBasisComponent.hpp:80
Definition: USpinOrbitalBasis.hpp:60
static USpinOrbitalBasis< ExpansionScalar, Shell > FromRestricted(const RSpinOrbitalBasis< ExpansionScalar, Shell > &r_spinor_basis)
Definition: USpinOrbitalBasis.hpp:222
typename Shell::BasisFunction BasisFunction
Definition: USpinOrbitalBasis.hpp:75
auto quantize(const FQOneElectronOperator &fq_op) const -> USQOneElectronOperator< product_t< typename FQOneElectronOperator::Scalar, ExpansionScalar >, typename FQOneElectronOperator::Vectorizer >
Definition: USpinOrbitalBasis.hpp:566
typename Shell::Primitive Primitive
Definition: USpinOrbitalBasis.hpp:72
ScalarUSQOneElectronOperator< ExpansionScalar > overlap() const
Definition: USpinOrbitalBasis.hpp:406
_Shell Shell
Definition: USpinOrbitalBasis.hpp:66
USpinOrbitalBasis(const ScalarBasis< Shell > &scalar_basis, const UTransformationComponent< ExpansionScalar > &C)
Definition: USpinOrbitalBasis.hpp:118
UTransformation< ExpansionScalar > lowdinOrthonormalization() const
Definition: USpinOrbitalBasis.hpp:278
USpinOrbitalBasis(const NuclearFramework &nuclear_framework, const std::string &basisset_name)
Definition: USpinOrbitalBasis.hpp:152
typename SpinResolvedBase< USpinOrbitalBasisComponent< ExpansionScalar, Shell >, Self >::Of ComponentType
Definition: USpinOrbitalBasis.hpp:78
size_t numberOfSpinors() const
Definition: USpinOrbitalBasis.hpp:246
void lowdinOrthonormalize()
Definition: USpinOrbitalBasis.hpp:290
auto quantize(const CoulombRepulsionOperator &coulomb_op) const -> enable_if_t< std::is_same< Z, LondonGTOShell >::value, ScalarUSQTwoElectronOperator< product_t< typename CoulombRepulsionOperator::Scalar, ExpansionScalar > > >
Definition: USpinOrbitalBasis.hpp:466
UMullikenDomain< ExpansionScalar > mullikenDomain(const std::function< bool(const BasisFunction &)> &selector) const
Definition: USpinOrbitalBasis.hpp:608
USpinOrbitalBasis(const NuclearFramework &nuclear_framework, const std::string &basisset_name_alpha, const std::string &basisset_name_beta)
Definition: USpinOrbitalBasis.hpp:177
ScalarUSQOneElectronOperatorProduct< ExpansionScalar > quantize(const ElectronicSpinSquaredOperator &fq_op) const
Definition: USpinOrbitalBasis.hpp:330
USQHamiltonian< ExpansionScalar > quantize(const FQMolecularHamiltonian &fq_hamiltonian) const
Definition: USpinOrbitalBasis.hpp:586
size_t numberOfSpinOrbitals() const
Definition: USpinOrbitalBasis.hpp:258
UMullikenDomain< ExpansionScalar > mullikenDomain(const std::function< bool(const Shell &)> &selector) const
Definition: USpinOrbitalBasis.hpp:621
enable_if_t< std::is_same< Z, LondonGTOShell >::value, USQHamiltonian< ExpansionScalar > > quantize(const FQMolecularPauliHamiltonian &fq_hamiltonian) const
Definition: USpinOrbitalBasis.hpp:536
USpinOrbitalBasis(const Molecule &molecule, const std::string &basisset_name_alpha, const std::string &basisset_name_beta)
Definition: USpinOrbitalBasis.hpp:191
auto quantize(const CoulombRepulsionOperator &coulomb_op) const -> enable_if_t< std::is_same< Z, GTOShell >::value, ScalarUSQTwoElectronOperator< product_t< typename CoulombRepulsionOperator::Scalar, ExpansionScalar > > >
Definition: USpinOrbitalBasis.hpp:417
USpinOrbitalBasis(const Molecule &molecule, const std::string &basisset_name, const HomogeneousMagneticField &B, typename std::enable_if< std::is_same< Z, LondonGTOShell >::value >::type *=0)
Definition: USpinOrbitalBasis.hpp:206
USpinOrbitalBasis(const Molecule &molecule, const std::string &basisset_name)
Definition: USpinOrbitalBasis.hpp:164
USpinOrbitalBasis(const ScalarBasis< Shell > &scalar_basis)
Definition: USpinOrbitalBasis.hpp:140
bool isOrthonormal(const double precision=1.0e-08) const
Definition: USpinOrbitalBasis.hpp:272
UTransformation< ExpansionScalar > expansion() const
Definition: USpinOrbitalBasis.hpp:238
_ExpansionScalar ExpansionScalar
Definition: USpinOrbitalBasis.hpp:63
USQOneElectronOperator< product_t< ElectronicSpin_zOperator::Scalar, ExpansionScalar >, ElectronicSpin_zOperator::Vectorizer > quantize(const ElectronicSpin_zOperator &fq_op) const
Definition: USpinOrbitalBasis.hpp:307
USpinOrbitalBasis(const ScalarBasis< Shell > &alpha_scalar_basis, const ScalarBasis< Shell > &beta_scalar_basis, const UTransformation< ExpansionScalar > &C)
Definition: USpinOrbitalBasis.hpp:97
auto quantize(const SpinZeemanOperator &fq_op) const -> enable_if_t< std::is_same< Z, LondonGTOShell >::value, USQOneElectronOperator< product_t< SpinZeemanOperator::Scalar, ExpansionScalar >, SpinZeemanOperator::Vectorizer > >
Definition: USpinOrbitalBasis.hpp:390
USpinOrbitalBasis< ExpansionScalar, Shell > Self
Definition: USpinOrbitalBasis.hpp:69
enable_if_t< std::is_same< Z, LondonGTOShell >::value, USQHamiltonian< ExpansionScalar > > quantize(const FQMolecularMagneticHamiltonian &fq_hamiltonian) const
Definition: USpinOrbitalBasis.hpp:514
USpinOrbitalBasis(const ScalarBasis< Shell > &alpha_scalar_basis, const ScalarBasis< Shell > &beta_scalar_basis)
Definition: USpinOrbitalBasis.hpp:128
Definition: BaseOneElectronIntegralBuffer.hpp:25
typename std::enable_if< B, T >::type enable_if_t
Definition: type_traits.hpp:37
decltype(std::declval< T >() *std::declval< U >()) product_t
Definition: aliases.hpp:35
std::complex< double > complex
Definition: complex.hpp:31
@ z
Definition: CartesianDirection.hpp:30
@ x
Definition: CartesianDirection.hpp:28
@ y
Definition: CartesianDirection.hpp:29
Definition: JacobiRotatable.hpp:37