Skip to content

Commit 7f14906

Browse files
committed
[fix] afm mapping did not work with new moments and occupations attributes of cthyb
1 parent 21956dd commit 7f14906

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

python/solid_dmft/dmft_tools/afm_mapping.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ def apply(general_params, icrsh, gf_struct_solver, solvers):
8888
mpi.report('\ncopying the self-energy for shell {} from shell {}'.format(icrsh, imp_source))
8989
mpi.report('inverting spin channels: '+str(invert_spin))
9090

91+
if solvers[icrsh].solver_params.get('measure_density_matrix'):
92+
solvers[icrsh].density_matrix = solvers[imp_source].density_matrix
93+
solvers[icrsh].h_loc_diagonalization = solvers[imp_source].h_loc_diagonalization
94+
solvers[icrsh].Sigma_moments = solvers[imp_source].Sigma_moments
95+
solvers[icrsh].Sigma_Hartree = solvers[imp_source].Sigma_Hartree
96+
solvers[icrsh].G_moments = solvers[imp_source].G_moments
97+
# copy orbital occupations dict with deep copy of arrays
98+
solvers[icrsh].orbital_occupations = {key: occ.copy() for key, occ in solvers[imp_source].orbital_occupations.items()}
99+
91100
if invert_spin:
92101
for spin_channel in gf_struct_solver.keys():
93102
if 'up' in spin_channel:
@@ -101,28 +110,26 @@ def apply(general_params, icrsh, gf_struct_solver, solvers):
101110
solvers[icrsh].G0_freq[spin_channel] << solvers[imp_source].G0_freq[target_channel]
102111
solvers[icrsh].G_time[spin_channel] << solvers[imp_source].G_time[target_channel]
103112

104-
if solvers[icrsh].solver_params['measure_pert_order']:
105-
if not hasattr(solvers[icrsh], 'perturbation_order'):
106-
solvers[icrsh].perturbation_order = {}
113+
if solvers[icrsh].solver_params.get('measure_pert_order'):
107114
solvers[icrsh].perturbation_order[spin_channel] = solvers[imp_source].perturbation_order[target_channel]
108115
solvers[icrsh].perturbation_order_total = solvers[imp_source].perturbation_order_total
109116

117+
# we also need to swap the orbital occupations, but we skip moments since the whole self-energy is copied anyway
118+
if solvers[icrsh].solver_params.get('measure_density_matrix'):
119+
solvers[icrsh].orbital_occupations[spin_channel] = solvers[imp_source].orbital_occupations[target_channel]
120+
110121
else:
111122
solvers[icrsh].Sigma_freq << solvers[imp_source].Sigma_freq
112123
solvers[icrsh].G_freq << solvers[imp_source].G_freq
113124
solvers[icrsh].G_freq_unsym << solvers[imp_source].G_freq_unsym
114125
solvers[icrsh].G0_freq << solvers[imp_source].G0_freq
115126
solvers[icrsh].G_time << solvers[imp_source].G_time
116127

117-
if solvers[icrsh].solver_params['measure_pert_order']:
128+
if solvers[icrsh].solver_params.get('measure_pert_order'):
118129
solvers[icrsh].perturbation_order = solvers[imp_source].perturbation_order
119130
solvers[icrsh].perturbation_order_total = solvers[imp_source].perturbation_order_total
120131

121-
if solvers[icrsh].solver_params['measure_density_matrix']:
122-
solvers[icrsh].density_matrix = solvers[imp_source].density_matrix
123-
solvers[icrsh].h_loc_diagonalization = solvers[imp_source].h_loc_diagonalization
124-
125-
if 'measure_chi' in solvers[icrsh].solver_params and solvers[icrsh].solver_params['measure_chi'] is not None:
132+
if solvers[icrsh].solver_params.get('measure_chi'):
126133
solvers[icrsh].O_time = solvers[imp_source].O_time
127134

128135
return solvers

0 commit comments

Comments
 (0)