Hi,
I look through the source code of hybridization in alps/applications/dmft/qmc and have a question:
The template function construct_matrix in update.h is defined but NEVER used in the code.
I use grep to search for that: grep construct_matrix * -R
The result is only the definition in update.h. Now the question is: How is the matrix M (inverse of hybridization function) constructed? M is only initialized in the constructor of HybridizationRun but it is never assigned to any value after that. How is the code working without defining M?
Thank you,
Hi Kuang-Shing Chen,
yes, that function is only there for debug purposes. We start the simulation from expansion order zero, where we know the matrix, and then add and remove operators for a few steps (thermalize) be for we start measuring our observables.
So only the 'add' and 'remove' functions are needed for the incremental updates, but not the recompute function. You'll see that the functions insert_remove_antisegment and insert_remove_segment get 'M' passed to it.
Best, Emanuel
On Dec 13, 2011, at 7:46 AM, Kuangshing Chen wrote:
Hi,
I look through the source code of hybridization in alps/applications/dmft/qmc and have a question:
The template function construct_matrix in update.h is defined but NEVER used in the code.
I use grep to search for that: grep construct_matrix * -R
The result is only the definition in update.h. Now the question is: How is the matrix M (inverse of hybridization function) constructed? M is only initialized in the constructor of HybridizationRun but it is never assigned to any value after that. How is the code working without defining M?
Thank you,
Kuang-Shing Chen
Thank you Emanuel,
I have another question. In the constructor of HybridizationRun in impurity.C, for the case of Bethe lattice, you define f_time as
f_itime(i, f) = -t * t * green_itime(N - i, f); //this is the self consistency loop, for Bethe lattice!
Later you initialize the F function using f_itime:
F[j][i] = f_itime(i, j);
As we know the relation between the hybridization function and the Green's function for Bethe lattice: F_s(iwn) = t^2 * G_s(iwn).
Even if you use the inverse Fourier transform of the relation, you still get F_s(tau) = t^2 * G_s(tau), not F_s(tau) = - t^2 * G_s(beta - tau).
It sounds that you impose the particle-hole symmetry in G_s (the argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)? Is my explanation for that formula correct?
Regards, Kuang-Shing Chen
On Tue, Dec 13, 2011 at 6:30 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
Hi Kuang-Shing Chen,
yes, that function is only there for debug purposes. We start the simulation from expansion order zero, where we know the matrix, and then add and remove operators for a few steps (thermalize) be for we start measuring our observables.
So only the 'add' and 'remove' functions are needed for the incremental updates, but not the recompute function. You'll see that the functions insert_remove_antisegment and insert_remove_segment get 'M' passed to it.
Best, Emanuel
On Dec 13, 2011, at 7:46 AM, Kuangshing Chen wrote:
Hi,
I look through the source code of hybridization in
alps/applications/dmft/qmc and have a question:
The template function construct_matrix in update.h is defined but NEVER
used in the code.
I use grep to search for that: grep construct_matrix * -R
The result is only the definition in update.h. Now the question is: How
is the matrix M (inverse of hybridization function) constructed? M is only initialized in the constructor of HybridizationRun but it is never assigned to any value after that. How is the code working without defining M?
Thank you,
Kuang-Shing Chen
Hi Kuang-Shing Chen,
It sounds that you impose the particle-hole symmetry in G_s (the argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)?
this is a special case for the self-consistency condition and, as you mention, it is only valid for Bethe lattice. We have only implemented it in the paramagnetic phase. You can find the implementation of it in F_selfconsistency_loop in the file selfconsistency.C
F is not the hybridization function, but something like it up to a minus sign, see Rev. Lett. 97, 076405 (2006) for its exact definition.
It's probably best if you start by running some of the tutorials for the hybridization expansion code. Tutorial 02 runs DMFT on a Bethe lattice with the hybridization expansion code in the antiferromagnetic case, I think this is exactly what you want.
Best, Emanuel
Thank you Emanuel,
Now I understand the code deeper. If I want to calculate the DMFT Hubbard Model, how do I change to filling?
Regards, Kuang-Shing Chen
On Tue, Dec 13, 2011 at 8:43 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
Hi Kuang-Shing Chen,
It sounds that you impose the particle-hole symmetry in G_s (the
argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)?
this is a special case for the self-consistency condition and, as you mention, it is only valid for Bethe lattice. We have only implemented it in the paramagnetic phase. You can find the implementation of it in F_selfconsistency_loop in the file selfconsistency.C
F is not the hybridization function, but something like it up to a minus sign, see Rev. Lett. 97, 076405 (2006) for its exact definition.
It's probably best if you start by running some of the tutorials for the hybridization expansion code. Tutorial 02 runs DMFT on a Bethe lattice with the hybridization expansion code in the antiferromagnetic case, I think this is exactly what you want.
Best, Emanuel
Hi Kuang-Shing Chen,
first you need to change to the Hubbard model density of states (for 1d, 2d, 3d, …). You can do that, for example, by using the loop for the general density of states and specifying a DOS file that has the DOS for your lattice. The parameter name is "DOSFILE" (see class FSDOSHilbertTransformer).
To adjust the filling: there is a parameter 'MU' corresponding to the chemical potential. If you change mu you change the filling. The ALPS code does not have a self-consistency for constant particle number (but that's a small thing that we could add if you really need it).
Emanuel
On Dec 13, 2011, at 4:21 PM, Kuangshing Chen wrote:
Thank you Emanuel,
Now I understand the code deeper. If I want to calculate the DMFT Hubbard Model, how do I change to filling?
Regards, Kuang-Shing Chen
On Tue, Dec 13, 2011 at 8:43 AM, Emanuel Gull emanuel.gull@gmail.com wrote: Hi Kuang-Shing Chen,
It sounds that you impose the particle-hole symmetry in G_s (the argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)?
this is a special case for the self-consistency condition and, as you mention, it is only valid for Bethe lattice. We have only implemented it in the paramagnetic phase. You can find the implementation of it in F_selfconsistency_loop in the file selfconsistency.C
F is not the hybridization function, but something like it up to a minus sign, see Rev. Lett. 97, 076405 (2006) for its exact definition.
It's probably best if you start by running some of the tutorials for the hybridization expansion code. Tutorial 02 runs DMFT on a Bethe lattice with the hybridization expansion code in the antiferromagnetic case, I think this is exactly what you want.
Best, Emanuel
-- Kuang-Shing Chen
Thank you Dr. Gull,
Do you mean that the semi-circle DOS for the Hubbard Model does not work? (Acturally I tried, and it doesn't work) Should I prepare my own DOSFILE, or the code itself will generate one? (At least the class FSDOSHilbertTransformer only read in a DOSFILE)
Kuang-Shing Chen
On Tue, Dec 13, 2011 at 9:34 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
Hi Kuang-Shing Chen,
first you need to change to the Hubbard model density of states (for 1d, 2d, 3d, …). You can do that, for example, by using the loop for the general density of states and specifying a DOS file that has the DOS for your lattice. The parameter name is "DOSFILE" (see class FSDOSHilbertTransformer).
To adjust the filling: there is a parameter 'MU' corresponding to the chemical potential. If you change mu you change the filling. The ALPS code does not have a self-consistency for constant particle number (but that's a small thing that we could add if you really need it).
Emanuel
On Dec 13, 2011, at 4:21 PM, Kuangshing Chen wrote:
Thank you Emanuel,
Now I understand the code deeper. If I want to calculate the DMFT Hubbard Model, how do I change to filling?
Regards, Kuang-Shing Chen
On Tue, Dec 13, 2011 at 8:43 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
Hi Kuang-Shing Chen,
It sounds that you impose the particle-hole symmetry in G_s (the
argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)?
this is a special case for the self-consistency condition and, as you mention, it is only valid for Bethe lattice. We have only implemented it in the paramagnetic phase. You can find the implementation of it in F_selfconsistency_loop in the file selfconsistency.C
F is not the hybridization function, but something like it up to a minus sign, see Rev. Lett. 97, 076405 (2006) for its exact definition.
It's probably best if you start by running some of the tutorials for the hybridization expansion code. Tutorial 02 runs DMFT on a Bethe lattice with the hybridization expansion code in the antiferromagnetic case, I think this is exactly what you want.
Best, Emanuel
-- Kuang-Shing Chen
Oh no sorry I assumed you wanted to do the DMFT for a Hubbard model on a lattice different from the Bethe lattice. If you want to do the DMFT for the Hubbard model on a Bethe lattice then you're all set: just take the parameter file of Tutorial 2 and change MU and U.
what 'does not work'? Can you be more specific?
Emanuel
On Dec 13, 2011, at 10:54 AM, Kuangshing Chen wrote:
Thank you Dr. Gull,
Do you mean that the semi-circle DOS for the Hubbard Model does not work? (Acturally I tried, and it doesn't work) Should I prepare my own DOSFILE, or the code itself will generate one? (At least the class FSDOSHilbertTransformer only read in a DOSFILE)
Kuang-Shing Chen
On Tue, Dec 13, 2011 at 9:34 AM, Emanuel Gull emanuel.gull@gmail.com wrote: Hi Kuang-Shing Chen,
first you need to change to the Hubbard model density of states (for 1d, 2d, 3d, …). You can do that, for example, by using the loop for the general density of states and specifying a DOS file that has the DOS for your lattice. The parameter name is "DOSFILE" (see class FSDOSHilbertTransformer).
To adjust the filling: there is a parameter 'MU' corresponding to the chemical potential. If you change mu you change the filling. The ALPS code does not have a self-consistency for constant particle number (but that's a small thing that we could add if you really need it).
Emanuel
On Dec 13, 2011, at 4:21 PM, Kuangshing Chen wrote:
Thank you Emanuel,
Now I understand the code deeper. If I want to calculate the DMFT Hubbard Model, how do I change to filling?
Regards, Kuang-Shing Chen
On Tue, Dec 13, 2011 at 8:43 AM, Emanuel Gull emanuel.gull@gmail.com wrote: Hi Kuang-Shing Chen,
It sounds that you impose the particle-hole symmetry in G_s (the argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)?
this is a special case for the self-consistency condition and, as you mention, it is only valid for Bethe lattice. We have only implemented it in the paramagnetic phase. You can find the implementation of it in F_selfconsistency_loop in the file selfconsistency.C
F is not the hybridization function, but something like it up to a minus sign, see Rev. Lett. 97, 076405 (2006) for its exact definition.
It's probably best if you start by running some of the tutorials for the hybridization expansion code. Tutorial 02 runs DMFT on a Bethe lattice with the hybridization expansion code in the antiferromagnetic case, I think this is exactly what you want.
Best, Emanuel
-- Kuang-Shing Chen
-- Kuang-Shing Chen
I try to implement your solver in my dmft loop and try to compare the result from ALPS. It seems that something still stucks in the code. I have a question for the ALPS DMFT loop:
G0_init --> Solver --> G --> SC --> G0 --> ... (SC means self-consistency loop)
Since G0_init is obtained in the constructor of HybridizationRun, after the Solver you get G. Then inside the SC, you obtain G0 using
G0_{s}(iwn) = 1/(iwn + mu - t^2G_{-s}(iwn)) (defined in SemicircleHilbertTransformer::operator()).
The question is: Before going to the Solver, you construct F(tau) = -t^2 * G(beta - tau) in the very of beginning. In the next iteration, where is the relation between the new G0(tau) and the new F(tau)? (At least I do not see this relation except in the constructor of HybridizationRun)
Also, do you still start with the same time segment configuration as the one in the previous iteration?
Kuang-Shing Chen On Tue, Dec 13, 2011 at 9:58 AM, Emanuel Gull gull@itp.phys.ethz.ch wrote:
Oh no sorry I assumed you wanted to do the DMFT for a Hubbard model on a lattice different from the Bethe lattice. If you want to do the DMFT for the Hubbard model on a Bethe lattice then you're all set: just take the parameter file of Tutorial 2 and change MU and U.
what 'does not work'? Can you be more specific?
Emanuel
On Dec 13, 2011, at 10:54 AM, Kuangshing Chen wrote:
Thank you Dr. Gull,
Do you mean that the semi-circle DOS for the Hubbard Model does not work? (Acturally I tried, and it doesn't work) Should I prepare my own DOSFILE, or the code itself will generate one? (At least the class FSDOSHilbertTransformer only read in a DOSFILE)
Kuang-Shing Chen
On Tue, Dec 13, 2011 at 9:34 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
Hi Kuang-Shing Chen,
first you need to change to the Hubbard model density of states (for 1d, 2d, 3d, …). You can do that, for example, by using the loop for the general density of states and specifying a DOS file that has the DOS for your lattice. The parameter name is "DOSFILE" (see class FSDOSHilbertTransformer).
To adjust the filling: there is a parameter 'MU' corresponding to the chemical potential. If you change mu you change the filling. The ALPS code does not have a self-consistency for constant particle number (but that's a small thing that we could add if you really need it).
Emanuel
On Dec 13, 2011, at 4:21 PM, Kuangshing Chen wrote:
Thank you Emanuel,
Now I understand the code deeper. If I want to calculate the DMFT Hubbard Model, how do I change to filling?
Regards, Kuang-Shing Chen
On Tue, Dec 13, 2011 at 8:43 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
Hi Kuang-Shing Chen,
It sounds that you impose the particle-hole symmetry in G_s (the
argument of it is beta -tau) and the minus sign is just the convention for G_s and there is another minus sign in the multiple_G in the function get_result() to cancel it. Is the particle-hole symmetry only true for the initial condition (no interaction)?
this is a special case for the self-consistency condition and, as you mention, it is only valid for Bethe lattice. We have only implemented it in the paramagnetic phase. You can find the implementation of it in F_selfconsistency_loop in the file selfconsistency.C
F is not the hybridization function, but something like it up to a minus sign, see Rev. Lett. 97, 076405 (2006) for its exact definition.
It's probably best if you start by running some of the tutorials for the hybridization expansion code. Tutorial 02 runs DMFT on a Bethe lattice with the hybridization expansion code in the antiferromagnetic case, I think this is exactly what you want.
Best, Emanuel
-- Kuang-Shing Chen
-- Kuang-Shing Chen
On Dec 13, 2011, at 5:25 PM, Kuangshing Chen wrote:
I try to implement your solver in my dmft loop and try to compare the result from ALPS. It seems that something still stucks in the code. I have a question for the ALPS DMFT loop:
G0_init --> Solver --> G --> SC --> G0 --> ... (SC means self-consistency loop)
Since G0_init is obtained in the constructor of HybridizationRun, after the Solver you get G. Then inside the SC, you obtain G0 using
G0_{s}(iwn) = 1/(iwn + mu - t^2G_{-s}(iwn)) (defined in SemicircleHilbertTransformer::operator()).
yes.
The question is: Before going to the Solver, you construct F(tau) = -t^2 * G(beta - tau) in the very of beginning.
No. The solver gets G0(omega) in this case, it is read at line 91 in impurity.C. In a next step the hybridization function is constructed (line 96) and Fourier transformed to the time domain (line 99). Finally the minus sign convention is adjusted to what we use in the hybridization expansion code (102, see also your earlier comments)
In the next iteration, where is the relation between the new G0(tau) and the new F(tau)? (At least I do not see this relation except in the constructor of HybridizationRun)
Also, do you still start with the same time segment configuration as the one in the previous iteration?
No we start from scratch, all segments are empty. the code is then thermalized.
Cheers, Emanuel
On Tue, Dec 13, 2011 at 10:37 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
On Dec 13, 2011, at 5:25 PM, Kuangshing Chen wrote:
I try to implement your solver in my dmft loop and try to compare the
result from ALPS. It seems that something still stucks in the code. I have a question for the ALPS DMFT loop:
G0_init --> Solver --> G --> SC --> G0 --> ... (SC means
self-consistency loop)
Since G0_init is obtained in the constructor of HybridizationRun, after
the Solver you get G. Then inside the SC, you obtain G0 using
G0_{s}(iwn) = 1/(iwn + mu - t^2G_{-s}(iwn)) (defined in
SemicircleHilbertTransformer::operator()).
yes.
The question is: Before going to the Solver, you construct F(tau) = -t^2
- G(beta - tau) in the very of beginning.
If I turn the OMEGA_LOOP off. The code just reads in G0(tau), doesn't it?
So if the OMEGA_LOOP is false, the whole self-consistency loop only has Fourier transformations in the SemicircleHilbertTransformer::operator() and in the SemicircleHilbertTransformer::initial_G0(). After I measure G, I use SemicircleHilbertTransformer::operator() to transform the G(tau) to a new G0(tau), the new input for the next iteration. Thus I don't need G0(omega) in this case. Does it still work? Or is it necessary to use OMEGA_LOOP=true?
No. The solver gets G0(omega) in this case, it is read at line 91 in
impurity.C. In a next step the hybridization function is constructed (line 96) and Fourier transformed to the time domain (line 99). Finally the minus sign convention is adjusted to what we use in the hybridization expansion code (102, see also your earlier comments)
In the next iteration, where is the relation between the new G0(tau) and
the new F(tau)? (At least I do not see this relation except in the constructor of HybridizationRun)
Also, do you still start with the same time segment configuration as the
one in the previous iteration?
No we start from scratch, all segments are empty. the code is then thermalized.
Cheers, Emanuel
Dear All, I noticed that sparsediag was not built. Which option should be set so that it would be built?
Regards, Mateusz Łącki
WHy was it not build? The cmake output should tell - probably because you had no LAPACK
On Dec 14, 2011, at 6:08 AM, Mateusz Łącki wrote:
Dear All, I noticed that sparsediag was not built. Which option should be set so that it would be built?
Regards, Mateusz Łącki
comp-phys-alps-users@lists.phys.ethz.ch