Skip to content

Commit 864267e

Browse files
committed
[doc] backport some of the changes from 3c2821f to address issue #270
1 parent 4b018a2 commit 864267e

File tree

4 files changed

+111
-118
lines changed

4 files changed

+111
-118
lines changed

doc/tutorials/nio_csc_vasp/NiO_local_lattice_GF.py

+2-8
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,11 @@
1313

1414
filename = 'vasp'
1515
beta = 5.0
16-
mesh = MeshImFreq(beta=beta, S='Fermion', n_iw=1000)
16+
mesh = MeshImFreq(beta=beta, S='Fermion', n_iw=500)
1717

1818
SK = SumkDFT(hdf_file = filename+'.h5', use_dft_blocks = False, mesh=mesh)
1919

2020

21-
# We analyze the block structure of the Hamiltonian
22-
Sigma = SK.block_structure.create_gf(mesh=mesh)
23-
24-
SK.put_Sigma([Sigma])
25-
26-
2721
# Setup CTQMC Solver
2822
n_orb = SK.corr_shells[0]['dim']
2923
spin_names = ['up','down']
@@ -56,7 +50,7 @@
5650
if block_structure:
5751
SK.block_structure = block_structure
5852
else:
59-
G = SK.extract_G_loc()
53+
G = SK.extract_G_loc(transform_to_solver_blocks=False, with_Sigma=False)
6054
SK.analyse_block_structure_from_gf(G, threshold = 1e-3)
6155

6256
SK.put_Sigma(Sigma_imp = [Sigma_iw])

doc/tutorials/nio_csc_vasp/maxent.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
gf = gf + G_latt['up'][iO,iO]
3030
tm.set_G_iw(gf)
3131
tm.omega =LinearOmegaMesh(omega_min=-20, omega_max=20, n_points=201)
32-
tm.alpha_mesh = LogAlphaMesh(alpha_min=0.01, alpha_max=20000, n_points=60)
32+
tm.alpha_mesh = LogAlphaMesh(alpha_min=0.01, alpha_max=20000, n_points=30)
3333

3434
tm.set_error(1.e-3)
3535
result=tm.run()
3636
result.get_A_out('LineFitAnalyzer')
37-
37+
3838
if 'iteration_count' in ar['DMFT_results']:
3939
iteration_offset = ar['DMFT_results']['iteration_count']+1
4040
for oo in orb:

doc/tutorials/nio_csc_vasp/nio.py

+53-53
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from itertools import *
2-
import numpy as np
32
import triqs.utility.mpi as mpi
4-
from h5 import *
3+
from h5 import HDFArchive
54
from triqs.gf import *
65
import sys, triqs.version as triqs_version
76
from triqs_dft_tools.sumk_dft import *
@@ -18,14 +17,11 @@
1817
filename = 'vasp'
1918

2019
beta = 5.0
21-
mesh = MeshImFreq(beta=beta, S='Fermion', n_iw=1000)
20+
mesh = MeshImFreq(beta=beta, S='Fermion', n_iw=500)
2221

2322
SK = SumkDFT(hdf_file=filename+'.h5', use_dft_blocks=False, mesh=mesh)
2423

25-
26-
Sigma = SK.block_structure.create_gf(mesh=mesh)
27-
SK.put_Sigma([Sigma])
28-
G = SK.extract_G_loc()
24+
G = SK.extract_G_loc(transform_to_solver_blocks=False, with_Sigma=False)
2925
SK.analyse_block_structure_from_gf(G, threshold=1e-3)
3026
for i_sh in range(len(SK.deg_shells)):
3127
num_block_deg_orbs = len(SK.deg_shells[i_sh])
@@ -46,7 +42,7 @@
4642
mpi.report('GF struct sumk: %s' % SK.gf_struct_sumk)
4743
mpi.report('GF struct solver: %s' % SK.gf_struct_solver)
4844

49-
S = Solver(beta=beta, gf_struct=gf_struct, n_iw=1000)
45+
S = Solver(beta=beta, gf_struct=gf_struct, n_iw=500)
5046

5147
# Construct the Hamiltonian and save it in Hamiltonian_store.txt
5248
H = Operator()
@@ -70,14 +66,15 @@
7066
p = {}
7167
p["max_time"] = -1
7268
p["random_name"] = ""
73-
p["random_seed"] = 123 * mpi.rank + 567
74-
p["length_cycle"] = 100
75-
p["n_warmup_cycles"] = 8000
76-
p["n_cycles"] = 200000
69+
p["length_cycle"] = 400
70+
p["n_warmup_cycles"] = 2000
71+
p["n_cycles"] = 80000
7772
p["fit_max_moment"] = 4
78-
p["fit_min_n"] = 30
79-
p["fit_max_n"] = 50
73+
p["fit_min_w"] = 20
74+
p["fit_max_w"] = 30
8075
p["perform_tail_fit"] = True
76+
p["measure_density_matrix"] = True
77+
p["use_norm_as_weight"] = True
8178

8279
# Double Counting: 0 FLL, 1 Held, 2 AMF
8380
DC_type = 0
@@ -88,32 +85,33 @@
8885

8986
iteration_offset = 0
9087
if mpi.is_master_node():
91-
ar = HDFArchive(filename+'.h5', 'a')
92-
if not 'DMFT_results' in ar:
93-
ar.create_group('DMFT_results')
94-
if not 'Iterations' in ar['DMFT_results']:
95-
ar['DMFT_results'].create_group('Iterations')
96-
if not 'DMFT_input' in ar:
97-
ar.create_group('DMFT_input')
98-
if not 'Iterations' in ar['DMFT_input']:
99-
ar['DMFT_input'].create_group('Iterations')
100-
if not 'code_versions' in ar['DMFT_input']:
101-
ar['DMFT_input'].create_group('code_versions')
102-
ar['DMFT_input']['code_versions']["triqs_version"] = triqs_version.version
103-
ar['DMFT_input']['code_versions']["triqs_git"] = triqs_version.git_hash
104-
ar['DMFT_input']['code_versions']["cthyb_version"] = cthyb_version.version
105-
ar['DMFT_input']['code_versions']["cthyb_git"] = cthyb_version.triqs_cthyb_hash
106-
ar['DMFT_input']['code_versions']["dft_tools_version"] = dft_tools_version.version
107-
ar['DMFT_input']['code_versions']["dft_tools_version"] = dft_tools_version.triqs_dft_tools_hash
108-
ar['DMFT_input']['sumk_block_structure'] = SK.block_structure
109-
if 'iteration_count' in ar['DMFT_results']:
110-
iteration_offset = ar['DMFT_results']['iteration_count']+1
111-
S.Sigma_iw = ar['DMFT_results']['Iterations']['Sigma_it'+str(iteration_offset-1)]
112-
SK.dc_imp = ar['DMFT_results']['Iterations']['dc_imp'+str(iteration_offset-1)]
113-
SK.dc_energ = ar['DMFT_results']['Iterations']['dc_energ'+str(iteration_offset-1)]
114-
SK.chemical_potential = ar['DMFT_results']['Iterations']['chemical_potential' +
115-
str(iteration_offset-1)].real
116-
ar['DMFT_input']["dmft_script_it"+str(iteration_offset)] = open(sys.argv[0]).read()
88+
with HDFArchive(filename+'.h5', 'a') as ar:
89+
if 'DMFT_results' not in ar:
90+
ar.create_group('DMFT_results')
91+
if 'Iterations' not in ar['DMFT_results']:
92+
ar['DMFT_results'].create_group('Iterations')
93+
if 'DMFT_input' not in ar:
94+
ar.create_group('DMFT_input')
95+
if 'Iterations' not in ar['DMFT_input']:
96+
ar['DMFT_input'].create_group('Iterations')
97+
if 'code_versions' not in ar['DMFT_input']:
98+
ar['DMFT_input'].create_group('code_versions')
99+
ar['DMFT_input']['code_versions']["triqs_version"] = triqs_version.version
100+
ar['DMFT_input']['code_versions']["triqs_git"] = triqs_version.git_hash
101+
ar['DMFT_input']['code_versions']["cthyb_version"] = cthyb_version.version
102+
ar['DMFT_input']['code_versions']["cthyb_git"] = cthyb_version.triqs_cthyb_hash
103+
ar['DMFT_input']['code_versions']["dft_tools_version"] = dft_tools_version.version
104+
ar['DMFT_input']['code_versions']["dft_tools_version"] = dft_tools_version.triqs_dft_tools_hash
105+
ar['DMFT_input']['sumk_block_structure'] = SK.block_structure
106+
if 'iteration_count' in ar['DMFT_results']:
107+
iteration_offset = ar['DMFT_results']['iteration_count']+1
108+
S.Sigma_iw = ar['DMFT_results']['Iterations']['Sigma_it'+str(iteration_offset-1)]
109+
SK.dc_imp = ar['DMFT_results']['Iterations']['dc_imp'+str(iteration_offset-1)]
110+
SK.dc_energ = ar['DMFT_results']['Iterations']['dc_energ'+str(iteration_offset-1)]
111+
SK.chemical_potential = ar['DMFT_results']['Iterations']['chemical_potential' +
112+
str(iteration_offset-1)].real
113+
ar['DMFT_input']["dmft_script_it"+str(iteration_offset)] = open(sys.argv[0]).read()
114+
117115
iteration_offset = mpi.bcast(iteration_offset)
118116
S.Sigma_iw = mpi.bcast(S.Sigma_iw)
119117
SK.dc_imp = mpi.bcast(SK.dc_imp)
@@ -146,10 +144,11 @@
146144
# Solve the impurity problem
147145
S.solve(h_int=H, **p)
148146
if mpi.is_master_node():
149-
ar['DMFT_input']['Iterations']['solver_dict_it'+str(it)] = p
150-
ar['DMFT_results']['Iterations']['Gimp_it'+str(it)] = S.G_iw
151-
ar['DMFT_results']['Iterations']['Gtau_it'+str(it)] = S.G_tau
152-
ar['DMFT_results']['Iterations']['Sigma_uns_it'+str(it)] = S.Sigma_iw
147+
with HDFArchive(filename+'.h5', 'a') as ar:
148+
ar['DMFT_input']['Iterations']['solver_dict_it'+str(it)] = p
149+
ar['DMFT_results']['Iterations']['Gimp_it'+str(it)] = S.G_iw
150+
ar['DMFT_results']['Iterations']['Gtau_it'+str(it)] = S.G_tau
151+
ar['DMFT_results']['Iterations']['Sigma_uns_it'+str(it)] = S.Sigma_iw
153152
# Calculate double counting
154153
dm = S.G_iw.density()
155154
SK.calc_dc(dm, U_interact=U, J_hund=J, orb=0, use_dc_formula=DC_type, use_dc_value=DC_value)
@@ -165,13 +164,14 @@
165164
mpi.report('Total charge of Gloc : %.6f' % S.G_iw.total_density())
166165

167166
if mpi.is_master_node():
168-
ar['DMFT_results']['iteration_count'] = it
169-
ar['DMFT_results']['Iterations']['Sigma_it'+str(it)] = S.Sigma_iw
170-
ar['DMFT_results']['Iterations']['Gloc_it'+str(it)] = S.G_iw
171-
ar['DMFT_results']['Iterations']['G0loc_it'+str(it)] = S.G0_iw
172-
ar['DMFT_results']['Iterations']['dc_imp'+str(it)] = SK.dc_imp
173-
ar['DMFT_results']['Iterations']['dc_energ'+str(it)] = SK.dc_energ
174-
ar['DMFT_results']['Iterations']['chemical_potential'+str(it)] = SK.chemical_potential
167+
with HDFArchive(filename+'.h5', 'a') as ar:
168+
ar['DMFT_results']['iteration_count'] = it
169+
ar['DMFT_results']['Iterations']['Sigma_it'+str(it)] = S.Sigma_iw
170+
ar['DMFT_results']['Iterations']['Gloc_it'+str(it)] = S.G_iw
171+
ar['DMFT_results']['Iterations']['G0loc_it'+str(it)] = S.G0_iw
172+
ar['DMFT_results']['Iterations']['dc_imp'+str(it)] = SK.dc_imp
173+
ar['DMFT_results']['Iterations']['dc_energ'+str(it)] = SK.dc_energ
174+
ar['DMFT_results']['Iterations']['chemical_potential'+str(it)] = SK.chemical_potential
175+
176+
mpi.report('-------------')
175177

176-
if mpi.is_master_node():
177-
del ar

doc/tutorials/nio_csc_vasp/nio_csc.py

+54-55
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from itertools import *
2-
import numpy as np
32
import triqs.utility.mpi as mpi
4-
from h5 import *
3+
from h5 import HDFArchive
54
from triqs.gf import *
65
import sys, triqs.version as triqs_version
76
from triqs_dft_tools.sumk_dft import *
@@ -25,13 +24,11 @@ def dmft_cycle():
2524
Converter.convert_dft_input()
2625

2726
beta = 5.0
28-
mesh = MeshImFreq(beta=beta, S='Fermion', n_iw=1000)
27+
mesh = MeshImFreq(beta=beta, S='Fermion', n_iw=500)
2928

3029
SK = SumkDFT(hdf_file=filename+'.h5', use_dft_blocks=False, mesh=mesh)
3130

32-
Sigma = SK.block_structure.create_gf(mesh=mesh)
33-
SK.put_Sigma([Sigma])
34-
G = SK.extract_G_loc()
31+
G = SK.extract_G_loc(transform_to_solver_blocks=False, with_Sigma=False)
3532
SK.analyse_block_structure_from_gf(G, threshold=1e-2)
3633
for i_sh in range(len(SK.deg_shells)):
3734
num_block_deg_orbs = len(SK.deg_shells[i_sh])
@@ -52,7 +49,7 @@ def dmft_cycle():
5249
mpi.report('GF struct sumk: %s' % SK.gf_struct_sumk)
5350
mpi.report('GF struct solver: %s' % SK.gf_struct_solver)
5451

55-
S = Solver(beta=beta, gf_struct=gf_struct, n_iw=1000)
52+
S = Solver(beta=beta, gf_struct=gf_struct, n_iw=500)
5653

5754
# Construct the Hamiltonian and save it in Hamiltonian_store.txt
5855
H = Operator()
@@ -75,14 +72,16 @@ def dmft_cycle():
7572
p = {}
7673
p["max_time"] = -1
7774
p["random_name"] = ""
78-
p["random_seed"] = 123 * mpi.rank + 567
79-
p["length_cycle"] = 100
75+
p["length_cycle"] = 400
8076
p["n_warmup_cycles"] = 2000
81-
p["n_cycles"] = 20000
77+
p["n_cycles"] = 80000
8278
p["fit_max_moment"] = 4
83-
p["fit_min_n"] = 30
84-
p["fit_max_n"] = 50
79+
p["fit_min_w"] = 20
80+
p["fit_max_w"] = 30
8581
p["perform_tail_fit"] = True
82+
p["measure_density_matrix"] = True
83+
p["use_norm_as_weight"] = True
84+
8685

8786
# Double Counting: 0 FLL, 1 Held, 2 AMF
8887
DC_type = 0
@@ -93,32 +92,32 @@ def dmft_cycle():
9392

9493
iteration_offset = 0
9594
if mpi.is_master_node():
96-
ar = HDFArchive(filename+'.h5', 'a')
97-
if not 'DMFT_results' in ar:
98-
ar.create_group('DMFT_results')
99-
if not 'Iterations' in ar['DMFT_results']:
100-
ar['DMFT_results'].create_group('Iterations')
101-
if not 'DMFT_input' in ar:
102-
ar.create_group('DMFT_input')
103-
if not 'Iterations' in ar['DMFT_input']:
104-
ar['DMFT_input'].create_group('Iterations')
105-
if not 'code_versions' in ar['DMFT_input']:
106-
ar['DMFT_input'].create_group('code_versions')
107-
ar['DMFT_input']['code_versions']["triqs_version"] = triqs_version.version
108-
ar['DMFT_input']['code_versions']["triqs_git"] = triqs_version.git_hash
109-
ar['DMFT_input']['code_versions']["cthyb_version"] = cthyb_version.version
110-
ar['DMFT_input']['code_versions']["cthyb_git"] = cthyb_version.triqs_cthyb_hash
111-
ar['DMFT_input']['code_versions']["dft_tools_version"] = dft_tools_version.version
112-
ar['DMFT_input']['code_versions']["dft_tools_git"] = dft_tools_version.triqs_dft_tools_hash
113-
ar['DMFT_input']['sumk_block_structure'] = SK.block_structure
114-
if 'iteration_count' in ar['DMFT_results']:
115-
iteration_offset = ar['DMFT_results']['iteration_count']+1
116-
S.Sigma_iw = ar['DMFT_results']['Iterations']['Sigma_it'+str(iteration_offset-1)]
117-
SK.dc_imp = ar['DMFT_results']['Iterations']['dc_imp'+str(iteration_offset-1)]
118-
SK.dc_energ = ar['DMFT_results']['Iterations']['dc_energ'+str(iteration_offset-1)]
119-
SK.chemical_potential = ar['DMFT_results']['Iterations']['chemical_potential' +
120-
str(iteration_offset-1)].real
121-
ar['DMFT_input']["dmft_script_it"+str(iteration_offset)] = open(sys.argv[0]).read()
95+
with HDFArchive(filename+'.h5', 'a') as ar:
96+
if 'DMFT_results' not in ar:
97+
ar.create_group('DMFT_results')
98+
if 'Iterations' not in ar['DMFT_results']:
99+
ar['DMFT_results'].create_group('Iterations')
100+
if 'DMFT_input' not in ar:
101+
ar.create_group('DMFT_input')
102+
if 'Iterations' not in ar['DMFT_input']:
103+
ar['DMFT_input'].create_group('Iterations')
104+
if not 'code_versions' not in ar['DMFT_input']:
105+
ar['DMFT_input'].create_group('code_versions')
106+
ar['DMFT_input']['code_versions']["triqs_version"] = triqs_version.version
107+
ar['DMFT_input']['code_versions']["triqs_git"] = triqs_version.git_hash
108+
ar['DMFT_input']['code_versions']["cthyb_version"] = cthyb_version.version
109+
ar['DMFT_input']['code_versions']["cthyb_git"] = cthyb_version.triqs_cthyb_hash
110+
ar['DMFT_input']['code_versions']["dft_tools_version"] = dft_tools_version.version
111+
ar['DMFT_input']['code_versions']["dft_tools_git"] = dft_tools_version.triqs_dft_tools_hash
112+
ar['DMFT_input']['sumk_block_structure'] = SK.block_structure
113+
if 'iteration_count' in ar['DMFT_results']:
114+
iteration_offset = ar['DMFT_results']['iteration_count']+1
115+
S.Sigma_iw = ar['DMFT_results']['Iterations']['Sigma_it'+str(iteration_offset-1)]
116+
SK.dc_imp = ar['DMFT_results']['Iterations']['dc_imp'+str(iteration_offset-1)]
117+
SK.dc_energ = ar['DMFT_results']['Iterations']['dc_energ'+str(iteration_offset-1)]
118+
SK.chemical_potential = ar['DMFT_results']['Iterations']['chemical_potential' +
119+
str(iteration_offset-1)].real
120+
ar['DMFT_input']["dmft_script_it"+str(iteration_offset)] = open(sys.argv[0]).read()
122121
iteration_offset = mpi.bcast(iteration_offset)
123122
S.Sigma_iw = mpi.bcast(S.Sigma_iw)
124123
SK.dc_imp = mpi.bcast(SK.dc_imp)
@@ -151,10 +150,11 @@ def dmft_cycle():
151150
# Solve the impurity problem
152151
S.solve(h_int=H, **p)
153152
if mpi.is_master_node():
154-
ar['DMFT_input']['Iterations']['solver_dict_it'+str(it)] = p
155-
ar['DMFT_results']['Iterations']['Gimp_it'+str(it)] = S.G_iw
156-
ar['DMFT_results']['Iterations']['Gtau_it'+str(it)] = S.G_tau
157-
ar['DMFT_results']['Iterations']['Sigma_uns_it'+str(it)] = S.Sigma_iw
153+
with HDFArchive(filename+'.h5', 'a') as ar:
154+
ar['DMFT_input']['Iterations']['solver_dict_it'+str(it)] = p
155+
ar['DMFT_results']['Iterations']['Gimp_it'+str(it)] = S.G_iw
156+
ar['DMFT_results']['Iterations']['Gtau_it'+str(it)] = S.G_tau
157+
ar['DMFT_results']['Iterations']['Sigma_uns_it'+str(it)] = S.Sigma_iw
158158
# Calculate double counting
159159
dm = S.G_iw.density()
160160
SK.calc_dc(dm, U_interact=U, J_hund=J, orb=0,
@@ -171,20 +171,21 @@ def dmft_cycle():
171171
mpi.report('Total charge of Gloc : %.6f' % S.G_iw.total_density().real)
172172

173173
if mpi.is_master_node():
174-
ar['DMFT_results']['iteration_count'] = it
175-
ar['DMFT_results']['Iterations']['Sigma_it'+str(it)] = S.Sigma_iw
176-
ar['DMFT_results']['Iterations']['Gloc_it'+str(it)] = S.G_iw
177-
ar['DMFT_results']['Iterations']['G0loc_it'+str(it)] = S.G0_iw
178-
ar['DMFT_results']['Iterations']['dc_imp'+str(it)] = SK.dc_imp
179-
ar['DMFT_results']['Iterations']['dc_energ'+str(it)] = SK.dc_energ
180-
ar['DMFT_results']['Iterations']['chemical_potential'+str(it)] = SK.chemical_potential
174+
with HDFArchive(filename+'.h5', 'a') as ar:
175+
ar['DMFT_results']['iteration_count'] = it
176+
ar['DMFT_results']['Iterations']['Sigma_it'+str(it)] = S.Sigma_iw
177+
ar['DMFT_results']['Iterations']['Gloc_it'+str(it)] = S.G_iw
178+
ar['DMFT_results']['Iterations']['G0loc_it'+str(it)] = S.G0_iw
179+
ar['DMFT_results']['Iterations']['dc_imp'+str(it)] = SK.dc_imp
180+
ar['DMFT_results']['Iterations']['dc_energ'+str(it)] = SK.dc_energ
181+
ar['DMFT_results']['Iterations']['chemical_potential'+str(it)] = SK.chemical_potential
181182

182183
if mpi.is_master_node():
183184
print('calculating mu...')
184185
SK.chemical_potential = SK.calc_mu(precision=0.000001)
185186

186187
if mpi.is_master_node():
187-
print('calculating GAMMA')
188+
print('calculating charge density update')
188189
SK.calc_density_correction(dm_type='vasp')
189190

190191
if mpi.is_master_node():
@@ -196,10 +197,8 @@ def dmft_cycle():
196197
SK.calc_dc(dm, U_interact=U, J_hund=J, orb=0, use_dc_formula=DC_type, use_dc_value=DC_value)
197198

198199
if mpi.is_master_node():
199-
ar['DMFT_results']['Iterations']['corr_energy_it'+str(it)] = correnerg
200-
ar['DMFT_results']['Iterations']['dc_energy_it'+str(it)] = SK.dc_energ[0]
201-
202-
if mpi.is_master_node():
203-
del ar
200+
with HDFArchive(filename+'.h5', 'a') as ar:
201+
ar['DMFT_results']['Iterations']['corr_energy_it'+str(it)] = correnerg
202+
ar['DMFT_results']['Iterations']['dc_energy_it'+str(it)] = SK.dc_energ[0]
204203

205204
return correnerg, SK

0 commit comments

Comments
 (0)