issp-center-dev / DCore

DMFT software for CORrelated Electrons
https://issp-center-dev.github.io/DCore/index.html
Other
44 stars 14 forks source link

Sparse modeling analytic continuation of self energy #135

Closed danielguterding closed 1 year ago

danielguterding commented 1 year ago

Open points:

shinaoka commented 1 year ago

Thank you for the PR. I need to fix the tests because Python 3.6 is no more supported. Please give me some time.

shinaoka commented 1 year ago

Now, the develop branch has been updated to new Python, numpy, scipy versions.

danielguterding commented 1 year ago

Thank you for the help with updating Python. I have merged your changes and will now also add some test cases.

Do you have any comments on the code?

shinaoka commented 1 year ago

Thank you! I still see some failure on GitHub Actions. Let me figure out what's wrong on my local machine.

Does your code only support diagonal self-energy or support off-diagonal elements?

For your information, I have an experimental Python implementation of analytic continuation for multi-orbital systems (with the correct treatment of semipositive definite condition).

https://github.com/shinaoka/spm_omega

This uses my general ADMM optimizer.

https://github.com/SpM-lab/admmsolver

I have been thinking merging it into DCore, but I have not done it yet. If your code does not support off-diagonal elements, we could consider to merge our efforts.

danielguterding commented 1 year ago

Thank you for the suggestion. My current code only supports self-energies that are diagonal in orbital and spin indices. However, I would like to finish the current project and move on to something else. I could integrate your code during the next semester break (Q1 2024).

Also, what is your motivation to write your own ADMM solver? There are many industrial-grade solvers for this type of problem. With the configuration I am using, the solver usually runs for only a couple of seconds on a single core.

I have yet to add some tests to this PR. Most likely I will be done tomorrow.

danielguterding commented 1 year ago

I believe we're complete now. Please have a look.

shinaoka commented 1 year ago

Thank you!

Yes, let us first merge your code.

@k-yoshimi Could you have a quick look?

Also, what is your motivation to write your own ADMM solver? There are many industrial-grade solvers for this type of problem. With the configuration I am using, the solver usually runs for only a couple of seconds on a single core. I am unaware of a Python library supporting semi-positive semidefinite constraints for complex matrices. If it exits, it'd make sense to use it.

danielguterding commented 1 year ago

That one failing test was unstable. I improved it. Please try again.

danielguterding commented 1 year ago

I don't understand this test failure. I think we need to debug locally with the exact container that runs the tests.

danielguterding commented 1 year ago

I simplified the test and removed explicit testing of U and VT matrices.

k-yoshimi commented 1 year ago

@danielguterding Thank you for improving the test.

I simplified the test and removed explicit testing of U and VT matrices.

I think there are phase degrees of freedom in U and VT and so different system or library versions may cause the discrepancy in U and VT. I think your simplification where only S is checked is a good modification.

k-yoshimi commented 1 year ago

@shinaoka I looked at the code and checked that it was safe to merge into develop branch.

@yomichi I think you verified the self-energy analysis connection, could you run a sample if you have one? If it is OK, it would be helpful if you could upload the input file you ran as a sample.

danielguterding commented 1 year ago

@yomichi I think you verified the self-energy analysis connection, could you run a sample if you have one? If it is OK, it would be helpful if you could upload the input file you ran as a sample.

Can I help with that somehow? I have run quite a few test cases on my side, but didn't find the place where end-to-end tests live in DCore.

shinaoka commented 1 year ago

Once @yomichi approves, it will be ready to merge the PR.

yomichi commented 1 year ago

I'm sorry for the late reply, but I did run the code. I think the results are fine. It would be good to have default values for some parameters such as spm.show_fit = false.

k-yoshimi commented 1 year ago

@yomichi Would you upload some samples, if you can?

danielguterding commented 1 year ago

I'm sorry for the late reply, but I did run the code. I think the results are fine. It would be good to have default values for some parameters such as spm.show_fit = false.

Thank you for this suggestion. I added reasonable default values for all non-physical parameters.

yomichi commented 1 year ago

I used U=4 Hubbard model on the square lattice with pomerol.

[model]
seedname = square
lattice = square
norb = 1
nelec = 1.0
t = -1.0
kanamori = [(4.0, 0.0, 0.0)]
nk0 = 8
nk1 = 8
nk2 = 1

[system]
T = 0.1
n_iw = 1000
fix_mu = True
mu = 2.0

[impurity_solver]
name = pomerol
exec_path{str} = /Users/yomichi/opt/pomerol/bin/pomerol2dcore
n_bath{int} = 3
fit_gtol{float} = 1e-6

[control]
max_step = 100
sigma_mix = 0.5
converge_tol = 1e-5

[tool]
knode = [(G,0,0,0),(X,0.5,0,0),(M,0.5,0.5,0),(G,0,0,0)]
nk_line = 100
omega_max = 6.0
omega_min = -6.0
Nomega = 401
broadening = 0.4
danielguterding commented 1 year ago

Are there any questions that are still open?

shinaoka commented 1 year ago

No, ready to merge! (Sorry, we were stuck in a conference). Thank you for your contributions!

k-yoshimi commented 1 year ago

@danielguterding Thank you for your contribution. We'll add the tutorial for analytical continuation.