Comments (10)
@aeantipov
So, what exactly has to be changed? Only Symmetrizer::compute()
?
How much effort would it take?
from pomerol.
@krivenko
Thank you for your work, Igor.
Best,
Junya
from pomerol.
General integrals of motion make Pomerol crash.
Further investigation is required.
from pomerol.
Igor, can you upload a failing test?
from pomerol.
I'm now preparing a test for pomerol2triqs (5 orbital atom, no bath) and it segfaults somewhere in libpomerol.so
. I admit, this could be a problem of pomerol2triqs, so I need a bit of time to rule this possibility out.
from pomerol.
Okay, here is what I've been able to find so far.
-
The crash is triggered by use of a non-abelian integral of motion, such as
S^2
. Those guys are more tricky thanN
orS_z
, because they partition Hilbert space so thatc
/c^+
are not necessarily one-to-one mappings between subspaces. -
Eigen reports a failed assertion in
HamiltonianPart::prepare()
.
/usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:337: Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(Eigen::DenseCoeffsBase<Derived, 1>::Index, Eigen::DenseCoeffsBase<Derived, 1>::Index) [with Derived = Eigen::Matrix<std::complex<double>, -1, -1, 1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = std::complex<double>; Eigen::DenseCoeffsBase<Derived, 1>::Index = long int]: Assertion `row >= 0 && row < rows() && col >= 0 && col < cols()' failed.
This is from line 45 of src/pomerol/HamiltonianPart.cpp
, I guess.
- It's very likely that we have a problem in
Operator::actRight()
and/orStatesClassification::getInnerState()
.
from pomerol.
I can now see this being a conceptual problem, rather than a coding issue.
Here is the point: One cannot use non-abelian integrals of motion to partition the Hilbert space. In other words, an integral of motion Q can only be used if all initial basis states (Fock states) are its eigenstates.
Let's say H
is our Hamiltonian, Q
is an integral of motion we want to use for partitioning, and |\psi_n>
is the orthonormal basis of Fock states. We characterize every basis state by an expectation value of Q
computed in this state, q_n = <\psi_n|Q|\psi_n>
.
By definition of integral of motion,
<\psi_1| [Q, H] |\psi_2> = <\psi_1| Q H |\psi_2> - <\psi_1| H Q |\psi_2> = 0.
In general we have Q|\psi_n> = q_n |\psi_n> + |\tilde\psi_n>
, where |\tilde\psi_n>
is orthogonal to |\psi_n>
.
Let |\psi_1>
and |\psi_2>
be two different basis states with q_1 != q_2
.
q_1 <\psi_1| H |\psi_2> - q_2 <\psi_1| H |\psi_2> +
<\tilde\psi_1| H |\psi_2> - <\psi_1| H |\tilde\psi_2> = 0
From this equation it follows that <\psi_1| H |\psi_2> = 0
(Hamiltonian does not connect subspaces characterized by different quantum numbers), only under an extra assumption |\tilde\psi_1> = |\tilde\psi_2> = 0
. And the assumption is equivalent to saying that |\psi_1>
, |\psi_2>
are eigenvectors of Q
.
Now the question is how we detect the inappropriate integrals of motion in Pomerol?
from pomerol.
from pomerol.
Basically what we need to do is to rotate the basis, such as to have the eigenstates of operators as basis states.
Rotation of the basis makes a little sense, as we would effectively need to diagonalize two operators, the Hamiltonian, and the integral of motion in question. And, in fact, even more if we have multiple integrals of motion.
I'd say checkSymmetry()
should simply ignore IOM operators that don't commute with all occupation number operators.
from pomerol.
To be reopened if we have any idea how to do better.
from pomerol.
Related Issues (20)
- Error while compiling tutorial files HOT 3
- Computing two-particle GF in imaginary time HOT 2
- Disabling MPI in computing two-particle Green's function HOT 3
- Failing Build HOT 3
- Susceptibility HOT 10
- ZeroPoleWeight is not necessarily real HOT 3
- Problem linking boost_mpi and boost_serialization HOT 5
- Problem with exported pomerol::pomerol target on MacOS HOT 7
- Remove boost::program options HOT 4
- Code formatting checker HOT 1
- Deprecate gtest? HOT 1
- Employ libcommute to define Hamiltonians HOT 2
- Use libcommute to find Hamiltonian blocks HOT 1
- Deprecate POMEROL_COMPLEX_MATRIX_ELEMENTS ? HOT 1
- Move away from travis to github actions? HOT 3
- Non-zero imaginary part in the latest release HOT 1
- Tutorial example gives zero-valued TwoParticleGF? HOT 2
- MPI Freeze HOT 1
- Worker didn't calculate this part.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pomerol.