.. _sphx_glr_dimer_lattice_plot_docc_transition.py: Landau Theory of the Mott transition ==================================== Perform a fit of the order parameter, linked to double occupation to match a Landau theory formulation in correspondence to Kotliar, G., Lange, E., & Rozenberg, M. J. (2000). Landau Theory of the Finite Temperature Mott Transition. Phys. Rev. Lett., 84(22), 5180–5183. http://dx.doi.org/10.1103/PhysRevLett.84.5180 Study above the critical point .. rst-class:: sphx-glr-horizontal * .. image:: /dimer_lattice/images/sphx_glr_plot_docc_transition_001.png :scale: 47 * .. image:: /dimer_lattice/images/sphx_glr_plot_docc_transition_002.png :scale: 47 .. rst-class:: sphx-glr-script-out Out:: [67 61 62 61 59 57 55 53 51 49 47 45 44 42 41 39 38 37 37 37 38 38 38 39 39 39 39 39 39 40 40 40 40 40 40 40 40 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 43 43 43 43 43 43 43 43 43 43 44 44 44 44 44 44 44 44 44 44 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 44 44 44 43 43 42 42 41 40 39 38 37 36 35 33 32 30 28 27 25 23 21] [68 64 66 67 66 65 64 62 60 58 56 54 52 50 49 47 46 44 43 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 49 50 50 51 51 51 52 52 53 53 53 54 54 54 55 55 55 56 56 56 57 57 57 58 58 58 59 59 59 59 60 60 60 60 61 61 61 61 61 62 62 62 62 62 62 62 62 62 62 61 61 61 61 60 60 59 59 58 57 57 56 55 54 53 52 51 49 48 47 45 44 42 41 39 38 36 34 33 31 29 28 26 24 22 21 19] [67 64 68 70 71 71 71 70 68 67 65 63 61 59 58 56 54 53 51 50 48 47 47 49 49 50 51 52 53 54 55 56 57 58 60 61 62 63 64 65 66 67 68 70 71 72 73 75 76 77 78 80 81 82 83 85 86 87 88 89 90 91 92 93 94 95 95 95 96 96 95 95 94 94 93 92 91 89 88 86 84 83 81 79 77 75 73 71 69 67 65 63 61 59 57 55 53 51 50 48 46 45 43 41 40 38 37 35 34 32 31 30 28 27 25 24 23 21 20 18 17] [ 67 64 68 71 72 73 73 73 72 71 69 68 66 64 63 61 59 58 56 54 53 51 50 49 51 52 53 54 56 57 58 60 61 62 64 66 67 69 70 72 74 76 78 80 82 84 86 89 91 94 97 99 102 105 108 111 113 116 119 122 124 126 127 128 129 129 129 127 126 124 121 118 115 111 108 104 100 97 93 89 86 83 80 77 74 71 69 66 64 61 59 57 55 53 51 50 48 46 45 43 42 40 39 37 36 35 33 32 31 30 28 27 26 25 24 22 21 20 19 17 16] [ 65 63 67 70 73 74 75 76 75 75 74 72 71 70 68 67 65 63 62 60 59 57 56 54 53 52 53 54 55 57 58 60 61 63 65 67 69 71 73 75 78 80 83 86 89 92 96 100 104 109 114 120 126 132 139 147 155 164 172 180 187 193 195 195 192 185 177 168 158 148 139 130 122 114 108 102 96 91 87 83 79 75 72 69 66 63 61 59 57 55 53 51 49 47 46 44 43 41 40 39 37 36 35 34 33 32 31 29 28 27 26 25 24 23 22 21 20 19 18 17 15] [ 63 61 65 69 72 74 76 77 77 77 77 76 75 74 73 72 71 69 68 66 65 64 62 61 60 58 57 56 55 55 56 57 59 61 63 65 66 69 71 73 76 79 82 85 88 92 97 102 107 113 120 129 139 150 164 182 204 233 270 316 364 387 363 313 262 222 191 168 149 135 123 113 105 98 92 86 81 77 73 70 67 64 62 59 57 55 53 51 49 48 46 45 43 42 41 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 24 23 22 21 20 19 18 17 16 15] [ 63 60 65 69 72 74 76 77 78 78 78 78 77 76 75 74 73 71 70 69 67 66 65 63 62 61 60 58 57 56 55 57 58 60 61 63 65 67 69 72 74 77 80 83 87 91 95 100 106 112 120 129 140 153 170 191 222 266 336 454 604 554 393 290 229 191 164 144 129 118 108 100 93 87 82 78 74 70 67 64 62 59 57 55 53 51 49 48 46 45 44 42 41 40 39 38 36 35 34 33 33 32 31 30 29 28 27 26 25 25 24 23 22 21 20 19 19 18 17 16 15] [ -3.86528847e+04 -2.47024433e+01 1.76230198e+01 -6.76142889e-04] [ -5.66140107e+04 -1.90645920e+01 6.03415912e+00 -1.03353073e-04] [ -9.29427951e+04 -1.32890339e+01 1.65847125e+00 -2.43110956e-04] [ -1.25002557e+05 -1.01922703e+01 -3.05401520e-01 -1.92401678e-04] [ -1.58468430e+05 -7.01333087e+00 1.42348154e+00 -3.21099956e-04] [ -1.93447631e+05 -3.76601834e+00 9.68173850e+00 -5.89656130e-04] [ -2.14218382e+05 -2.43545432e+00 4.22759934e+01 -4.49653695e-04] | .. code-block:: python from scipy.optimize import curve_fit import numpy as np import matplotlib.pyplot as plt import dmft.dimer as dimer import dmft.common as gf import dmft.ipt_imag as ipt def loop_u_tp(u_range, tprange, beta, seed='mott gap'): tau, w_n = gf.tau_wn_setup(dict(BETA=beta, N_MATSUBARA=256)) giw_d, giw_o = dimer.gf_met(w_n, 0., 0., 0.5, 0.) if seed == 'ins': giw_d, giw_o = 1 / (1j * w_n + 4j / w_n), np.zeros_like(w_n) + 0j giw_s = [] sigma_iw = [] ekin, epot = [], [] iterations = [] for u_int, tp in zip(u_range, tprange): giw_d, giw_o, loops = dimer.ipt_dmft_loop( beta, u_int, tp, giw_d, giw_o, tau, w_n) giw_s.append((giw_d, giw_o)) iterations.append(loops) g0iw_d, g0iw_o = dimer.self_consistency( 1j * w_n, 1j * giw_d.imag, giw_o.real, 0., tp, 0.25) siw_d, siw_o = ipt.dimer_sigma(u_int, tp, g0iw_d, g0iw_o, tau, w_n) sigma_iw.append((siw_d.copy(), siw_o.copy())) ekin.append(dimer.ekin(giw_d, giw_o, w_n, tp, beta)) epot.append(dimer.epot(giw_d, w_n, beta, u_int ** 2 / 4 + tp**2, ekin[-1], u_int)) print(np.array(iterations)) # last division in energies because I want per spin epot return np.array(giw_s), np.array(sigma_iw), np.array(ekin) / 4, np.array(epot) / 4, w_n # calculating multiple regions fac = np.arctan(.55 * np.sqrt(3) / .15) udelta = np.tan(np.linspace(-fac, fac, 121)) * .15 / np.sqrt(3) dudelta = np.diff(udelta) bet_uc = [(18, 3.312), (19, 3.258), (20, 3.214), (20.5, 3.193), (21, 3.17), (21.5, 3.1467), (21.7, 3.138)] data = [] for beta, uc in bet_uc: urange = udelta + uc + .07 giw_s, sigma_iw, ekin, epot, w_n = loop_u_tp( urange, .3 * np.ones_like(urange), beta, 'met') data.append(2 * epot / urange - 0.003) plt.figure() bc = [b for b, _ in bet_uc] d_c = [dc[int(len(udelta) / 2)] for dc in data] for dd, dc, (beta, uc) in zip(data, d_c, bet_uc): plt.plot(uc + udelta, dd, '+-', label=r'$\beta={}$'.format(beta)) plt.plot([uc for _, uc in bet_uc], d_c, 'o') plt.gca().set_color_cycle(None) for dd, (beta, uc) in zip(data, bet_uc): chi = np.diff(dd) / dudelta plt.plot(uc + udelta[:-1], chi / np.min(chi) * .035, ':') plt.title(r'Double occupation') plt.ylabel(r'$\langle n_\uparrow n_\downarrow \rangle$') plt.xlabel(r'$U/D$') plt.legend() plt.savefig("dimer_tp0.3_docc.pdf", transparent=False, bbox_inches='tight', pad_inches=0.05) # effective scaling # cubic + linear over constant + linear def fit_cube_lin(eta, c, p, q, s): return (c * eta**3 + p * eta + s) / (1 + q * eta) plt.figure() for dd, dc, (beta, uc) in zip(data, d_c, bet_uc): plt.plot(udelta, dd - dc, lw=2) plt.gca().set_color_cycle(None) bb = [10, 30, 35, 42, 45, 48, 50] fits = [] for dd, dc, bound, (beta, uc) in zip(data, d_c, bb, bet_uc): rd = dd - dc popt, pcov = curve_fit( fit_cube_lin, rd[bound:-bound], udelta[bound:-bound], p0=[-4e4, -3, 3, 1]) fits.append((popt, pcov)) ft = fit_cube_lin(rd, *popt) plt.plot(ft, rd, label=r'$\beta={}$'.format(beta)) plt.plot(ft[bound:-bound], rd[bound:-bound], "k+") print(popt) plt.xlim([-.08, .08]) plt.ylim([-.007, .01]) plt.title(r'Reduced Double occupation fitted to theory') plt.ylabel(r'$\eta$') plt.xlabel(r'$U-U_c$') plt.legend() plt.savefig("dimer_tp0.3_eta_landau.pdf", transparent=False, bbox_inches='tight', pad_inches=0.05) **Total running time of the script:** ( 1 minutes 17.737 seconds) .. container:: sphx-glr-footer .. container:: sphx-glr-download :download:`Download Python source code: plot_docc_transition.py ` .. container:: sphx-glr-download :download:`Download Jupyter notebook: plot_docc_transition.ipynb ` .. rst-class:: sphx-glr-signature `Generated by Sphinx-Gallery `_