quant-met 0.0.8__py3-none-any.whl → 0.0.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- quant_met/cli/__init__.py +2 -5
- quant_met/cli/main.py +30 -3
- quant_met/cli/scf.py +40 -10
- quant_met/geometry/__init__.py +1 -1
- quant_met/geometry/base_lattice.py +18 -4
- quant_met/geometry/graphene.py +10 -2
- quant_met/geometry/square.py +11 -3
- quant_met/mean_field/__init__.py +3 -5
- quant_met/mean_field/_utils.py +0 -11
- quant_met/mean_field/hamiltonians/__init__.py +7 -8
- quant_met/mean_field/hamiltonians/base_hamiltonian.py +202 -176
- quant_met/mean_field/hamiltonians/dressed_graphene.py +21 -108
- quant_met/mean_field/hamiltonians/graphene.py +14 -93
- quant_met/mean_field/hamiltonians/one_band_tight_binding.py +17 -97
- quant_met/mean_field/hamiltonians/three_band_tight_binding.py +84 -0
- quant_met/mean_field/hamiltonians/two_band_tight_binding.py +75 -0
- quant_met/mean_field/quantum_metric.py +18 -57
- quant_met/mean_field/self_consistency.py +54 -20
- quant_met/mean_field/superfluid_weight.py +6 -3
- quant_met/parameters/__init__.py +28 -5
- quant_met/parameters/hamiltonians.py +146 -16
- quant_met/parameters/main.py +35 -6
- quant_met/plotting/__init__.py +0 -3
- quant_met/plotting/plotting.py +0 -34
- {quant_met-0.0.8.dist-info → quant_met-0.0.10.dist-info}/METADATA +1 -1
- quant_met-0.0.10.dist-info/RECORD +33 -0
- quant_met-0.0.8.dist-info/RECORD +0 -31
- {quant_met-0.0.8.dist-info → quant_met-0.0.10.dist-info}/LICENSE.txt +0 -0
- {quant_met-0.0.8.dist-info → quant_met-0.0.10.dist-info}/LICENSES/MIT.txt +0 -0
- {quant_met-0.0.8.dist-info → quant_met-0.0.10.dist-info}/WHEEL +0 -0
- {quant_met-0.0.8.dist-info → quant_met-0.0.10.dist-info}/entry_points.txt +0 -0
@@ -8,26 +8,36 @@ import numpy as np
|
|
8
8
|
import numpy.typing as npt
|
9
9
|
|
10
10
|
from quant_met.mean_field.hamiltonians.base_hamiltonian import BaseHamiltonian
|
11
|
+
from quant_met.parameters import GenericParameters
|
11
12
|
|
12
13
|
|
13
14
|
def quantum_metric(
|
14
|
-
h: BaseHamiltonian, k_grid: npt.NDArray[np.float64], bands: list[int]
|
15
|
+
h: BaseHamiltonian[GenericParameters], k_grid: npt.NDArray[np.float64], bands: list[int]
|
15
16
|
) -> npt.NDArray[np.float64]:
|
16
|
-
"""Calculate the quantum metric
|
17
|
+
"""Calculate the quantum metric (geometric tensor) for specified bands.
|
18
|
+
|
19
|
+
This function computes the quantum geometric tensor associated with
|
20
|
+
the specified bands of a given Hamiltonian over a grid of k-points.
|
21
|
+
The output is a 2x2 matrix representing the quantum metric.
|
17
22
|
|
18
23
|
Parameters
|
19
24
|
----------
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
h : BaseHamiltonian
|
26
|
+
Hamiltonian object used to compute Bloch states and their derivatives.
|
27
|
+
k_grid : numpy.ndarray
|
28
|
+
Array of k points in the Brillouin zone.
|
29
|
+
bands : list of int
|
30
|
+
Indices of the bands for which the quantum metric is to be calculated.
|
25
31
|
|
26
32
|
Returns
|
27
33
|
-------
|
28
34
|
:class:`numpy.ndarray`
|
29
|
-
|
35
|
+
A 2x2 matrix representing the quantum metric.
|
30
36
|
|
37
|
+
Raises
|
38
|
+
------
|
39
|
+
ValueError
|
40
|
+
If `bands` contains invalid indices or `k_grid` is empty.
|
31
41
|
"""
|
32
42
|
energies, bloch = h.diagonalize_nonint(k_grid)
|
33
43
|
|
@@ -57,52 +67,3 @@ def quantum_metric(
|
|
57
67
|
)
|
58
68
|
|
59
69
|
return np.real(quantum_geom_tensor) / number_k_points
|
60
|
-
|
61
|
-
|
62
|
-
def quantum_metric_bdg(
|
63
|
-
h: BaseHamiltonian, k_grid: npt.NDArray[np.float64], bands: list[int]
|
64
|
-
) -> npt.NDArray[np.float64]:
|
65
|
-
"""Calculate the quantum metric in the BdG state.
|
66
|
-
|
67
|
-
Parameters
|
68
|
-
----------
|
69
|
-
bands
|
70
|
-
h : :class:`~quant_met.BaseHamiltonian`
|
71
|
-
Hamiltonian object.
|
72
|
-
k_grid : :class:`numpy.ndarray`
|
73
|
-
List of k points.
|
74
|
-
|
75
|
-
Returns
|
76
|
-
-------
|
77
|
-
:class:`numpy.ndarray`
|
78
|
-
Quantum metric in the normal state.
|
79
|
-
|
80
|
-
"""
|
81
|
-
energies, bdg_functions = h.diagonalize_bdg(k_grid)
|
82
|
-
|
83
|
-
number_k_points = len(k_grid)
|
84
|
-
|
85
|
-
quantum_geom_tensor = np.zeros(shape=(2, 2), dtype=np.complex64)
|
86
|
-
|
87
|
-
for band in bands:
|
88
|
-
for i, direction_1 in enumerate(["x", "y"]):
|
89
|
-
h_derivative_dir_1 = h.bdg_hamiltonian_derivative(k=k_grid, direction=direction_1)
|
90
|
-
for j, direction_2 in enumerate(["x", "y"]):
|
91
|
-
h_derivative_dir_2 = h.bdg_hamiltonian_derivative(k=k_grid, direction=direction_2)
|
92
|
-
for k_index in range(len(k_grid)):
|
93
|
-
for n in [i for i in range(2 * h.number_of_bands) if i != band]:
|
94
|
-
quantum_geom_tensor[i, j] += (
|
95
|
-
(
|
96
|
-
bdg_functions[k_index][:, band].conjugate()
|
97
|
-
@ h_derivative_dir_1[k_index]
|
98
|
-
@ bdg_functions[k_index][:, n]
|
99
|
-
)
|
100
|
-
* (
|
101
|
-
bdg_functions[k_index][:, n].conjugate()
|
102
|
-
@ h_derivative_dir_2[k_index]
|
103
|
-
@ bdg_functions[k_index][:, band]
|
104
|
-
)
|
105
|
-
/ (energies[k_index][band] - energies[k_index][n]) ** 2
|
106
|
-
)
|
107
|
-
|
108
|
-
return np.real(quantum_geom_tensor) / number_k_points
|
@@ -4,46 +4,80 @@
|
|
4
4
|
|
5
5
|
"""Self-consistency loop."""
|
6
6
|
|
7
|
+
import logging
|
8
|
+
|
7
9
|
import numpy as np
|
8
10
|
import numpy.typing as npt
|
9
11
|
|
10
12
|
from quant_met.mean_field.hamiltonians.base_hamiltonian import BaseHamiltonian
|
13
|
+
from quant_met.parameters import GenericParameters
|
14
|
+
|
15
|
+
logger = logging.getLogger(__name__)
|
11
16
|
|
12
17
|
|
13
18
|
def self_consistency_loop(
|
14
|
-
h: BaseHamiltonian,
|
19
|
+
h: BaseHamiltonian[GenericParameters],
|
15
20
|
k_space_grid: npt.NDArray[np.float64],
|
16
|
-
beta: np.float64,
|
17
21
|
epsilon: float,
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
) -> BaseHamiltonian[GenericParameters]:
|
23
|
+
"""Self-consistently solves the gap equation for a given Hamiltonian.
|
24
|
+
|
25
|
+
This function performs a self-consistency loop to solve the gap equation
|
26
|
+
for a Hamiltonian `h`.
|
27
|
+
The gaps in the orbital basis are iteratively updated until the change is within
|
28
|
+
a specified tolerance `epsilon`.
|
21
29
|
|
22
30
|
Parameters
|
23
31
|
----------
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
32
|
+
h : :class:`BaseHamiltonian<quant_met.mean_field.hamiltonians.BaseHamiltonian>`
|
33
|
+
The Hamiltonian object with the parameters for the calculation.
|
34
|
+
|
35
|
+
k_space_grid : :class:`numpy.ndarray`
|
36
|
+
A grid of points in the Brillouin zone at which the gap equation is evaluated.
|
37
|
+
See
|
38
|
+
|
39
|
+
epsilon : float
|
40
|
+
The convergence criterion. The loop will terminate when the change
|
41
|
+
in the delta orbital basis is less than this value.
|
42
|
+
|
43
|
+
Returns
|
44
|
+
-------
|
45
|
+
:class:`quant_met.mean_field.BaseHamiltonian`
|
46
|
+
The updated Hamiltonian object with the new gaps.
|
47
|
+
|
48
|
+
Notes
|
49
|
+
-----
|
50
|
+
The function initializes the gaps with random complex numbers before entering the
|
51
|
+
self-consistency loop.
|
52
|
+
The mixing parameter is set to 0.2, which controls how much of the new gaps is taken
|
53
|
+
relative to the previous value in each iteration.
|
30
54
|
"""
|
31
|
-
|
32
|
-
q = np.array([0, 0])
|
55
|
+
logger.info("Starting self-consistency loop.")
|
33
56
|
|
34
57
|
rng = np.random.default_rng()
|
35
58
|
delta_init = np.zeros(shape=h.delta_orbital_basis.shape, dtype=np.complex64)
|
36
|
-
delta_init += (
|
37
|
-
2 * rng.random(size=h.delta_orbital_basis.shape)
|
38
|
-
- 1
|
39
|
-
+ 1.0j * (2 * rng.random(size=h.delta_orbital_basis.shape) - 1)
|
59
|
+
delta_init += (0.2 * rng.random(size=h.delta_orbital_basis.shape) - 1) + 1.0j * (
|
60
|
+
0.2 * rng.random(size=h.delta_orbital_basis.shape) - 1
|
40
61
|
)
|
41
62
|
h.delta_orbital_basis = delta_init
|
63
|
+
logger.debug("Initial gaps set to: %s", h.delta_orbital_basis)
|
42
64
|
|
65
|
+
iteration_count = 0
|
43
66
|
while True:
|
44
|
-
|
45
|
-
|
67
|
+
iteration_count += 1
|
68
|
+
logger.debug("Iteration %d: Computing new gaps.", iteration_count)
|
69
|
+
|
70
|
+
new_gap = h.gap_equation(k=k_space_grid)
|
71
|
+
|
72
|
+
delta_change = np.abs(h.delta_orbital_basis - new_gap)
|
73
|
+
logger.debug("New gaps computed: %s", new_gap)
|
74
|
+
|
75
|
+
if (delta_change < epsilon).all():
|
46
76
|
h.delta_orbital_basis = new_gap
|
77
|
+
logger.info("Convergence achieved after %d iterations.", iteration_count)
|
47
78
|
return h
|
48
|
-
|
79
|
+
|
80
|
+
mixing_greed = 0.2
|
49
81
|
h.delta_orbital_basis = mixing_greed * new_gap + (1 - mixing_greed) * h.delta_orbital_basis
|
82
|
+
logger.debug("Updated gaps: %s", h.delta_orbital_basis)
|
83
|
+
logger.debug("Change in gaps: %s", delta_change)
|
@@ -8,10 +8,11 @@ import numpy as np
|
|
8
8
|
import numpy.typing as npt
|
9
9
|
|
10
10
|
from quant_met.mean_field.hamiltonians.base_hamiltonian import BaseHamiltonian
|
11
|
+
from quant_met.parameters import GenericParameters
|
11
12
|
|
12
13
|
|
13
14
|
def superfluid_weight(
|
14
|
-
h: BaseHamiltonian,
|
15
|
+
h: BaseHamiltonian[GenericParameters],
|
15
16
|
k_grid: npt.NDArray[np.float64],
|
16
17
|
) -> tuple[npt.NDArray[np.complex64], npt.NDArray[np.complex64]]:
|
17
18
|
"""Calculate the superfluid weight.
|
@@ -54,7 +55,7 @@ def superfluid_weight(
|
|
54
55
|
|
55
56
|
|
56
57
|
def _current_operator(
|
57
|
-
h: BaseHamiltonian, direction: str, k: npt.NDArray[np.float64]
|
58
|
+
h: BaseHamiltonian[GenericParameters], direction: str, k: npt.NDArray[np.float64]
|
58
59
|
) -> npt.NDArray[np.complex64]:
|
59
60
|
j = np.zeros(shape=(h.number_of_bands, h.number_of_bands), dtype=np.complex64)
|
60
61
|
|
@@ -71,7 +72,9 @@ def _current_operator(
|
|
71
72
|
return j
|
72
73
|
|
73
74
|
|
74
|
-
def _c_factor(
|
75
|
+
def _c_factor(
|
76
|
+
h: BaseHamiltonian[GenericParameters], k: npt.NDArray[np.float64]
|
77
|
+
) -> npt.NDArray[np.complex64]:
|
75
78
|
bdg_energies, bdg_functions = h.diagonalize_bdg(k)
|
76
79
|
c_mnpq = np.zeros(
|
77
80
|
shape=(
|
quant_met/parameters/__init__.py
CHANGED
@@ -3,19 +3,42 @@
|
|
3
3
|
# SPDX-License-Identifier: MIT
|
4
4
|
|
5
5
|
"""
|
6
|
-
|
7
|
-
|
6
|
+
Parameter Classes
|
7
|
+
=================
|
8
|
+
|
9
|
+
Main class holding all the parameters for the calculation.
|
10
|
+
|
11
|
+
- :class:`Parameters<quant_met.parameters.Parameters>`
|
12
|
+
|
13
|
+
Classes holding the configuration for the Hamiltonians.
|
8
14
|
|
9
15
|
.. autosummary::
|
10
16
|
:toctree: generated/parameters/
|
11
17
|
|
18
|
+
Parameters # noqa
|
12
19
|
DressedGrapheneParameters
|
13
20
|
GrapheneParameters
|
14
21
|
OneBandParameters
|
15
|
-
|
22
|
+
TwoBandParameters
|
23
|
+
ThreeBandParameters
|
16
24
|
""" # noqa: D205, D400
|
17
25
|
|
18
|
-
from .hamiltonians import
|
26
|
+
from .hamiltonians import (
|
27
|
+
DressedGrapheneParameters,
|
28
|
+
GenericParameters,
|
29
|
+
GrapheneParameters,
|
30
|
+
OneBandParameters,
|
31
|
+
ThreeBandParameters,
|
32
|
+
TwoBandParameters,
|
33
|
+
)
|
19
34
|
from .main import Parameters
|
20
35
|
|
21
|
-
__all__ = [
|
36
|
+
__all__ = [
|
37
|
+
"Parameters",
|
38
|
+
"DressedGrapheneParameters",
|
39
|
+
"GrapheneParameters",
|
40
|
+
"OneBandParameters",
|
41
|
+
"TwoBandParameters",
|
42
|
+
"ThreeBandParameters",
|
43
|
+
"GenericParameters",
|
44
|
+
]
|
@@ -4,44 +4,174 @@
|
|
4
4
|
|
5
5
|
"""Pydantic models to hold parameters for Hamiltonians."""
|
6
6
|
|
7
|
-
from typing import Literal
|
7
|
+
from typing import Literal, TypeVar
|
8
8
|
|
9
9
|
import numpy as np
|
10
10
|
from numpydantic import NDArray, Shape
|
11
|
-
from pydantic import BaseModel
|
11
|
+
from pydantic import BaseModel, Field, field_validator
|
12
|
+
from pydantic_core.core_schema import ValidationInfo
|
12
13
|
|
14
|
+
GenericParameters = TypeVar("GenericParameters", bound="HamiltonianParameters")
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
|
17
|
+
def check_positive_values(value: float, info: ValidationInfo) -> float:
|
18
|
+
"""Check for positive values."""
|
19
|
+
if value < 0:
|
20
|
+
msg = f"{info.field_name} must be positive"
|
21
|
+
raise ValueError(msg)
|
22
|
+
return value
|
23
|
+
|
24
|
+
|
25
|
+
def validate_float(value: float, info: ValidationInfo) -> float:
|
26
|
+
"""Check for valid floats."""
|
27
|
+
if np.isinf(value):
|
28
|
+
msg = f"{info.field_name} must not be Infinity"
|
29
|
+
raise ValueError(msg)
|
30
|
+
if np.isnan(value):
|
31
|
+
msg = f"{info.field_name} must not be NaN"
|
32
|
+
raise ValueError(msg)
|
33
|
+
return value
|
34
|
+
|
35
|
+
|
36
|
+
class HamiltonianParameters(BaseModel):
|
37
|
+
"""Base class for Hamiltonian parameters.
|
38
|
+
|
39
|
+
Attributes
|
40
|
+
----------
|
41
|
+
name : str
|
42
|
+
The name of the Hamiltonian model (e.g., "Graphene", "DressedGraphene").
|
43
|
+
beta : float
|
44
|
+
The inverse temperature; default is set to infinity.
|
45
|
+
q : :class:`numpy.ndarray` | None
|
46
|
+
An optional numpy array representing the momentum of Cooper pairs.
|
47
|
+
hubbard_int_orbital_basis : :class:`numpy.ndarray`
|
48
|
+
A numpy array representing the Hubbard interactions in the orbital basis.
|
49
|
+
"""
|
50
|
+
|
51
|
+
name: str
|
52
|
+
beta: float = Field(default=np.inf, description="Inverse temperature")
|
53
|
+
q: NDArray[Shape["2"], int | float] | None = Field(
|
54
|
+
default=None, description="Momentum of Cooper pairs"
|
55
|
+
)
|
56
|
+
hubbard_int_orbital_basis: NDArray = Field(
|
57
|
+
..., description="Hubbard interaction in orbital basis"
|
58
|
+
)
|
59
|
+
|
60
|
+
|
61
|
+
class DressedGrapheneParameters(HamiltonianParameters):
|
62
|
+
"""Parameters for the Dressed Graphene model.
|
63
|
+
|
64
|
+
Attributes
|
65
|
+
----------
|
66
|
+
hopping_gr : float
|
67
|
+
Hopping parameter in the graphene layer.
|
68
|
+
hopping_x : float
|
69
|
+
Hopping parameter at the impurity site.
|
70
|
+
hopping_x_gr_a : float
|
71
|
+
Hybridization parameter.
|
72
|
+
lattice_constant : float
|
73
|
+
The lattice constant of the model.
|
74
|
+
chemical_potential : float
|
75
|
+
The chemical potential.
|
76
|
+
hubbard_int_orbital_basis : npt.NDArray[np.float64]
|
77
|
+
Hubbard interaction in the orbital basis.
|
78
|
+
delta : npt.NDArray[np.complex64] | None
|
79
|
+
Initial value for gaps in orbital space.
|
80
|
+
"""
|
16
81
|
|
17
82
|
name: Literal["DressedGraphene"] = "DressedGraphene"
|
18
|
-
hopping_gr: float
|
19
|
-
hopping_x: float
|
20
|
-
hopping_x_gr_a: float
|
21
|
-
lattice_constant: float
|
22
|
-
chemical_potential: float
|
23
|
-
|
24
|
-
|
25
|
-
|
83
|
+
hopping_gr: float = Field(..., description="Hopping in graphene")
|
84
|
+
hopping_x: float = Field(..., description="Hopping in impurity")
|
85
|
+
hopping_x_gr_a: float = Field(..., description="Hybridization")
|
86
|
+
lattice_constant: float = Field(..., description="Lattice constant")
|
87
|
+
chemical_potential: float = Field(..., description="Chemical potential")
|
88
|
+
hubbard_int_orbital_basis: NDArray[Shape["3"], np.float64] = Field(
|
89
|
+
..., description="Hubbard interaction in orbital basis"
|
90
|
+
)
|
91
|
+
delta: NDArray[Shape["3"], np.complex64] | None = Field(
|
92
|
+
default=None, description="Initial value for gaps in orbital space"
|
93
|
+
)
|
94
|
+
|
95
|
+
_check_positive_values = field_validator(
|
96
|
+
"hopping_gr", "hopping_x", "hopping_x_gr_a", "lattice_constant"
|
97
|
+
)(check_positive_values)
|
98
|
+
|
99
|
+
_check_valid_floats = field_validator(
|
100
|
+
"hopping_gr", "hopping_x", "hopping_x_gr_a", "lattice_constant", "chemical_potential"
|
101
|
+
)(validate_float)
|
26
102
|
|
27
103
|
|
28
|
-
class GrapheneParameters(
|
104
|
+
class GrapheneParameters(HamiltonianParameters):
|
29
105
|
"""Parameters for Graphene model."""
|
30
106
|
|
31
107
|
name: Literal["Graphene"] = "Graphene"
|
32
108
|
hopping: float
|
33
109
|
lattice_constant: float
|
34
110
|
chemical_potential: float
|
35
|
-
|
111
|
+
hubbard_int_orbital_basis: NDArray[Shape["2"], np.float64] = Field(
|
112
|
+
..., description="Hubbard interaction in orbital basis"
|
113
|
+
)
|
36
114
|
delta: NDArray[Shape["2"], np.complex64] | None = None
|
37
115
|
|
116
|
+
_check_positive_values = field_validator("hopping", "lattice_constant")(check_positive_values)
|
38
117
|
|
39
|
-
|
118
|
+
_check_valid_floats = field_validator("hopping", "lattice_constant", "chemical_potential")(
|
119
|
+
validate_float
|
120
|
+
)
|
121
|
+
|
122
|
+
|
123
|
+
class OneBandParameters(HamiltonianParameters):
|
40
124
|
"""Parameters for Graphene model."""
|
41
125
|
|
42
126
|
name: Literal["OneBand"] = "OneBand"
|
43
127
|
hopping: float
|
44
128
|
lattice_constant: float
|
45
129
|
chemical_potential: float
|
46
|
-
|
130
|
+
hubbard_int_orbital_basis: NDArray[Shape["1"], np.float64] = Field(
|
131
|
+
..., description="Hubbard interaction in orbital basis"
|
132
|
+
)
|
47
133
|
delta: NDArray[Shape["1"], np.complex64] | None = None
|
134
|
+
|
135
|
+
_check_positive_values = field_validator("hopping", "lattice_constant")(check_positive_values)
|
136
|
+
|
137
|
+
_check_valid_floats = field_validator("hopping", "lattice_constant", "chemical_potential")(
|
138
|
+
validate_float
|
139
|
+
)
|
140
|
+
|
141
|
+
|
142
|
+
class TwoBandParameters(HamiltonianParameters):
|
143
|
+
"""Parameters for Graphene model."""
|
144
|
+
|
145
|
+
name: Literal["TwoBand"] = "TwoBand"
|
146
|
+
hopping: float
|
147
|
+
lattice_constant: float
|
148
|
+
chemical_potential: float
|
149
|
+
hubbard_int_orbital_basis: NDArray[Shape["2"], np.float64] = Field(
|
150
|
+
..., description="Hubbard interaction in orbital basis"
|
151
|
+
)
|
152
|
+
delta: NDArray[Shape["2"], np.complex64] | None = None
|
153
|
+
|
154
|
+
_check_positive_values = field_validator("hopping", "lattice_constant")(check_positive_values)
|
155
|
+
|
156
|
+
_check_valid_floats = field_validator("hopping", "lattice_constant", "chemical_potential")(
|
157
|
+
validate_float
|
158
|
+
)
|
159
|
+
|
160
|
+
|
161
|
+
class ThreeBandParameters(HamiltonianParameters):
|
162
|
+
"""Parameters for Graphene model."""
|
163
|
+
|
164
|
+
name: Literal["ThreeBand"] = "ThreeBand"
|
165
|
+
hopping: float
|
166
|
+
lattice_constant: float
|
167
|
+
chemical_potential: float
|
168
|
+
hubbard_int_orbital_basis: NDArray[Shape["3"], np.float64] = Field(
|
169
|
+
..., description="Hubbard interaction in orbital basis"
|
170
|
+
)
|
171
|
+
delta: NDArray[Shape["3"], np.complex64] | None = None
|
172
|
+
|
173
|
+
_check_positive_values = field_validator("hopping", "lattice_constant")(check_positive_values)
|
174
|
+
|
175
|
+
_check_valid_floats = field_validator("hopping", "lattice_constant", "chemical_potential")(
|
176
|
+
validate_float
|
177
|
+
)
|
quant_met/parameters/main.py
CHANGED
@@ -6,32 +6,61 @@
|
|
6
6
|
|
7
7
|
import pathlib
|
8
8
|
|
9
|
-
from numpydantic import NDArray, Shape
|
10
9
|
from pydantic import BaseModel, Field
|
11
10
|
|
12
11
|
from .hamiltonians import DressedGrapheneParameters, GrapheneParameters, OneBandParameters
|
13
12
|
|
14
13
|
|
15
14
|
class Control(BaseModel):
|
16
|
-
"""Control for the calculation.
|
15
|
+
"""Control for the calculation.
|
16
|
+
|
17
|
+
Attributes
|
18
|
+
----------
|
19
|
+
calculation : str
|
20
|
+
Specifies the type of calculation to be performed.
|
21
|
+
prefix : str
|
22
|
+
A string used as a prefix for naming output files generated by the simulation.
|
23
|
+
outdir : :class:`pathlib.Path`
|
24
|
+
A path indicating the output directory where results will be saved.
|
25
|
+
conv_treshold : float
|
26
|
+
A float value representing the convergence threshold.
|
27
|
+
The calculation will stop when changes in the results drop below this threshold.
|
28
|
+
"""
|
17
29
|
|
18
30
|
calculation: str
|
19
31
|
prefix: str
|
20
32
|
outdir: pathlib.Path
|
21
33
|
conv_treshold: float
|
22
|
-
beta: float
|
23
|
-
q: NDArray[Shape["2"], int | float] | None = None
|
24
34
|
|
25
35
|
|
26
36
|
class KPoints(BaseModel):
|
27
|
-
"""Control for k points.
|
37
|
+
"""Control for k points.
|
38
|
+
|
39
|
+
Attributes
|
40
|
+
----------
|
41
|
+
nk1 : int
|
42
|
+
The number of k-points in the first dimension of the k-space grid.
|
43
|
+
nk2 : int
|
44
|
+
The number of k-points in the second dimension of the k-space grid.
|
45
|
+
"""
|
28
46
|
|
29
47
|
nk1: int
|
30
48
|
nk2: int
|
31
49
|
|
32
50
|
|
33
51
|
class Parameters(BaseModel):
|
34
|
-
"""Class to hold the parameters for a calculation.
|
52
|
+
"""Class to hold the parameters for a calculation.
|
53
|
+
|
54
|
+
Attributes
|
55
|
+
----------
|
56
|
+
control : Control
|
57
|
+
An instance of the `Control` class containing settings for the calculation.
|
58
|
+
model :
|
59
|
+
An instance of one of the Hamiltonian parameter classes, holding the specific parameters
|
60
|
+
of the selected Hamiltonian model.
|
61
|
+
k_points : KPoints
|
62
|
+
An instance of the `KPoints` class that specifies the number of k-points for the simulation.
|
63
|
+
"""
|
35
64
|
|
36
65
|
control: Control
|
37
66
|
model: DressedGrapheneParameters | GrapheneParameters | OneBandParameters = Field(
|
quant_met/plotting/__init__.py
CHANGED
@@ -18,13 +18,11 @@ Functions
|
|
18
18
|
scatter_into_bz
|
19
19
|
plot_bandstructure
|
20
20
|
plot_superfluid_weight
|
21
|
-
plot_quantum_metric
|
22
21
|
""" # noqa: D205, D400
|
23
22
|
|
24
23
|
from .plotting import (
|
25
24
|
format_plot,
|
26
25
|
plot_bandstructure,
|
27
|
-
plot_quantum_metric,
|
28
26
|
plot_superfluid_weight,
|
29
27
|
scatter_into_bz,
|
30
28
|
)
|
@@ -34,5 +32,4 @@ __all__ = [
|
|
34
32
|
"format_plot",
|
35
33
|
"plot_bandstructure",
|
36
34
|
"plot_superfluid_weight",
|
37
|
-
"plot_quantum_metric",
|
38
35
|
]
|
quant_met/plotting/plotting.py
CHANGED
@@ -212,37 +212,3 @@ def plot_superfluid_weight(
|
|
212
212
|
ax.set_ylabel(r"$D_S\ [t]$")
|
213
213
|
|
214
214
|
return fig
|
215
|
-
|
216
|
-
|
217
|
-
def plot_quantum_metric(
|
218
|
-
x_data: npt.NDArray[np.float64],
|
219
|
-
quantum_metric: npt.NDArray[np.float64],
|
220
|
-
fig_in: matplotlib.figure.Figure | None = None,
|
221
|
-
ax_in: matplotlib.axes.Axes | None = None,
|
222
|
-
) -> matplotlib.figure.Figure:
|
223
|
-
"""Plot quantum metric against some parameter.
|
224
|
-
|
225
|
-
Parameters
|
226
|
-
----------
|
227
|
-
x_data : :class:`numpy.ndarray`
|
228
|
-
quantum_metric : :class:`numpy.ndarray`
|
229
|
-
fig_in : :class:`matplotlib.figure.Figure`, optional
|
230
|
-
ax_in : :class:`matplotlib.axes.Axes`, optional
|
231
|
-
|
232
|
-
Returns
|
233
|
-
-------
|
234
|
-
:obj:`matplotlib.figure.Figure`
|
235
|
-
Figure with the data plotted onto the axis.
|
236
|
-
|
237
|
-
"""
|
238
|
-
if fig_in is None or ax_in is None:
|
239
|
-
fig, ax = plt.subplots()
|
240
|
-
else:
|
241
|
-
fig, ax = fig_in, ax_in
|
242
|
-
|
243
|
-
ax.plot(x_data, quantum_metric, "x--")
|
244
|
-
|
245
|
-
ax = format_plot(ax)
|
246
|
-
ax.set_ylabel(r"$M\ [t]$")
|
247
|
-
|
248
|
-
return fig
|
@@ -0,0 +1,33 @@
|
|
1
|
+
quant_met/__init__.py,sha256=ZO1UFz1awUYTI7B9ZkBwucvDz7GMGXnLLUGnEwLBhkc,155
|
2
|
+
quant_met/cli/__init__.py,sha256=nGFXhK8zWyEKQtsQTyJWfEOLFOHTCjZnfEcrVb2dARc,254
|
3
|
+
quant_met/cli/main.py,sha256=VyOu4FhpDR_CsSDaFcY4FlYrRxnRRCBFpwhLLB2GP2Y,1729
|
4
|
+
quant_met/cli/scf.py,sha256=8Ph13lcJcRg5vhqT4Ugf0HJ9FSt6huK0oS4SvTPgnVw,2355
|
5
|
+
quant_met/geometry/__init__.py,sha256=5BLliTnMzlzPrjzmphQ_EpTE6f6dF-uXgQU_Qj8sBoI,592
|
6
|
+
quant_met/geometry/base_lattice.py,sha256=dUBk3167cppy5nUNSEbXq57rwgbVnIen20jC_vrhomA,2642
|
7
|
+
quant_met/geometry/bz_path.py,sha256=q_eNhKYjhKLeFNjio8BdKVsseO6slQKlwKKSQQYTVJQ,2497
|
8
|
+
quant_met/geometry/graphene.py,sha256=AIKI2ice7LiKk5LHS27w97FkUds0UFV7EVNML3W5D28,1623
|
9
|
+
quant_met/geometry/square.py,sha256=lAEJ2R_2VBBPI_Bc-x-KhPE5r8AGoY1RgAx8GdoqdNY,1561
|
10
|
+
quant_met/mean_field/__init__.py,sha256=JgF26LUDI6LqOZdws6uZnilqdrEhj_3ysq-zElsL4DU,645
|
11
|
+
quant_met/mean_field/_utils.py,sha256=7hr0DDSdIqjft5Jjluvbw_HGoNLWgYJTxyuPJJvhBnc,356
|
12
|
+
quant_met/mean_field/hamiltonians/__init__.py,sha256=kLe31GiWYvPshl2-tpjEz0AHct2S1AuwRakAK2XDNSg,681
|
13
|
+
quant_met/mean_field/hamiltonians/base_hamiltonian.py,sha256=_GZLmNAcRAu6NGCM8PnwacPV9AlOxrGLo0vdgrcoBvM,18295
|
14
|
+
quant_met/mean_field/hamiltonians/dressed_graphene.py,sha256=sTApzorTj0jeXdEzeDxNUxuvSWq44UtVPwDzRawbvXs,4035
|
15
|
+
quant_met/mean_field/hamiltonians/graphene.py,sha256=tnmaaBka3G_vAMrg8ZsVcNGYjPPMPB3Z3NQfTbGRJNM,3263
|
16
|
+
quant_met/mean_field/hamiltonians/one_band_tight_binding.py,sha256=SXHPoVd_zyevNvUvmHuK85cfs2Y-_8phBbE7qM62RIE,2499
|
17
|
+
quant_met/mean_field/hamiltonians/three_band_tight_binding.py,sha256=MuOxUTPPBENjKBotPVQH-8343y4dv73jtZXo-w8mJsA,3282
|
18
|
+
quant_met/mean_field/hamiltonians/two_band_tight_binding.py,sha256=Vk01wY1UP4V1yYHZ9RmlbB0cybPJjGlrBUkR8d3o3j8,2852
|
19
|
+
quant_met/mean_field/quantum_metric.py,sha256=jjttOnLKR18oqX5yweHdgn17nfJCFbp932lq3yRh1pE,2615
|
20
|
+
quant_met/mean_field/self_consistency.py,sha256=MNPDopLcPs8v77AQCJot54SIWVazqaMxVIc4w4JgS6w,2906
|
21
|
+
quant_met/mean_field/superfluid_weight.py,sha256=c7fNcq7JQQBpKt0R5JjkGlO-pAoznblPkA__5rNCyVw,4118
|
22
|
+
quant_met/parameters/__init__.py,sha256=Pt2iI2y0donTs3IMVo30pQdMFChSciqxhwD_Gs-zysQ,917
|
23
|
+
quant_met/parameters/hamiltonians.py,sha256=c-POY9q38CBMzEnlUzkx17uH4lGnFa8dbX4h-QOiS08,6115
|
24
|
+
quant_met/parameters/main.py,sha256=acLuOLn5KD9_h5cbnd5H3akkF9XwcwAhLqV7jYJh0OA,1932
|
25
|
+
quant_met/plotting/__init__.py,sha256=HEt2KKhUOR1he2cKL9GLfGfqN87Q6jl_AKylGC20U4g,544
|
26
|
+
quant_met/plotting/plotting.py,sha256=ueFKhGK2mo-_JKifhRlgT6WDuEbKSMwDaTNnl70tCZQ,6583
|
27
|
+
quant_met/utils.py,sha256=JG_tShSL1JIi-Fn-N6mVD6J0sl7Egf-zuHnOSEKu7VA,1666
|
28
|
+
quant_met-0.0.10.dist-info/LICENSE.txt,sha256=QO_duPQihSJlaxSLxPAXo52X3esROP5wBkhxqBd1Z4E,1104
|
29
|
+
quant_met-0.0.10.dist-info/LICENSES/MIT.txt,sha256=QO_duPQihSJlaxSLxPAXo52X3esROP5wBkhxqBd1Z4E,1104
|
30
|
+
quant_met-0.0.10.dist-info/METADATA,sha256=xSLhNGqt2f7KGpg-Yj74M_h6QpFYr3PDbv0YFwNt798,2954
|
31
|
+
quant_met-0.0.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
32
|
+
quant_met-0.0.10.dist-info/entry_points.txt,sha256=fuVnEk5wiqPMEhn-Cc7q0Hdk2s_OniOn0zfdFPicH4Y,47
|
33
|
+
quant_met-0.0.10.dist-info/RECORD,,
|
quant_met-0.0.8.dist-info/RECORD
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
quant_met/__init__.py,sha256=ZO1UFz1awUYTI7B9ZkBwucvDz7GMGXnLLUGnEwLBhkc,155
|
2
|
-
quant_met/cli/__init__.py,sha256=If5Jdi7mG-5PbIyjQGxnt9o2bsY5VyE3qtdcO5yTGnQ,321
|
3
|
-
quant_met/cli/main.py,sha256=EZTRRTfrN3z-srgbG2BoDg64iYBjzZLuuMtrxTdZU8s,698
|
4
|
-
quant_met/cli/scf.py,sha256=x9qxjQizXAKH7217dBuHTlA26eGenzcC2LDpN1q7030,1435
|
5
|
-
quant_met/geometry/__init__.py,sha256=uCLEDBrYuMUkEgJmPnLAvR2WlmvoM9X9_cV_Q2zMzoA,620
|
6
|
-
quant_met/geometry/base_lattice.py,sha256=QVHuZVy6bOvBSITY_mKhr7hYW1jHJ5UAm3sMCFClYZ0,2276
|
7
|
-
quant_met/geometry/bz_path.py,sha256=q_eNhKYjhKLeFNjio8BdKVsseO6slQKlwKKSQQYTVJQ,2497
|
8
|
-
quant_met/geometry/graphene.py,sha256=86C1LiYFunoSGSS1_A79dPq24FiiOxpHvOLUVrdRq_E,1271
|
9
|
-
quant_met/geometry/square.py,sha256=1fSrHab07uB6ildNzlbTwINJvPa5C2Az0B0uuOVJmMc,1216
|
10
|
-
quant_met/mean_field/__init__.py,sha256=yH_UovKDaP5c06cb1uWPtvIO2WQ76pi6ZTsNBzE8oso,793
|
11
|
-
quant_met/mean_field/_utils.py,sha256=plkx6eYjyYV3CT3BWwlulqW7L-Q0t1TzZTLR4k7u0dg,666
|
12
|
-
quant_met/mean_field/hamiltonians/__init__.py,sha256=FcqhV5fG_gzngVuiVfBucripdbNTzOxPRafu7sZ4ueA,644
|
13
|
-
quant_met/mean_field/hamiltonians/base_hamiltonian.py,sha256=fL1dl1ZX3I_4gzARiQl5o2eCTIr-udRA23qZo4VWq0k,13622
|
14
|
-
quant_met/mean_field/hamiltonians/dressed_graphene.py,sha256=zzHRVmp8749I2ll5N-wjks8l5dJLdtmhWR7smR7ezM0,6542
|
15
|
-
quant_met/mean_field/hamiltonians/graphene.py,sha256=Zg_S9xTMYi_7v_6PBK7NUdiwgmyqyCPElUfezuiozm0,5611
|
16
|
-
quant_met/mean_field/hamiltonians/one_band_tight_binding.py,sha256=kBYqthKUPby754PhOwf0mzHLTHNVbdKZbtJhvp2yc3E,4766
|
17
|
-
quant_met/mean_field/quantum_metric.py,sha256=5FC3NU_ObbHlUUZMCAP1DyZuyifgnEr3s2cSH6cA8-8,3903
|
18
|
-
quant_met/mean_field/self_consistency.py,sha256=xkZIWkOopekhDufJnSGK6ARsro6XaIuVhhrnJmb6sk8,1291
|
19
|
-
quant_met/mean_field/superfluid_weight.py,sha256=m_x2uVYcEVdbItwEV3-Ml80Qad7X-YWLgb38fJKLJsY,4004
|
20
|
-
quant_met/parameters/__init__.py,sha256=DvzEtTAnHcRcJufZV7bwYGZUeA-0Q2B8N9syGA9uNRM,552
|
21
|
-
quant_met/parameters/hamiltonians.py,sha256=Q5uGTzxM8kIdUnRuIpEJNPmSHF27Zj7LBV3kgKd5dP4,1213
|
22
|
-
quant_met/parameters/main.py,sha256=yrDME_KfDZ_9xf3ofTt7V8kw_8qbgD9EfVlxLcymcNE,899
|
23
|
-
quant_met/plotting/__init__.py,sha256=s-DS22impzozKiS7p-v3yCmeccDQfXmBbtPiYMKwH0Y,620
|
24
|
-
quant_met/plotting/plotting.py,sha256=_SqL8GrDqlBtccHnUWpZPqdSJy0Yd_4dhFdUOxOzPpY,7447
|
25
|
-
quant_met/utils.py,sha256=JG_tShSL1JIi-Fn-N6mVD6J0sl7Egf-zuHnOSEKu7VA,1666
|
26
|
-
quant_met-0.0.8.dist-info/LICENSE.txt,sha256=QO_duPQihSJlaxSLxPAXo52X3esROP5wBkhxqBd1Z4E,1104
|
27
|
-
quant_met-0.0.8.dist-info/LICENSES/MIT.txt,sha256=QO_duPQihSJlaxSLxPAXo52X3esROP5wBkhxqBd1Z4E,1104
|
28
|
-
quant_met-0.0.8.dist-info/METADATA,sha256=vh99nVcyAhUECV32kkXxfDjne2LvBufs6ekW60m8pYs,2953
|
29
|
-
quant_met-0.0.8.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
30
|
-
quant_met-0.0.8.dist-info/entry_points.txt,sha256=fuVnEk5wiqPMEhn-Cc7q0Hdk2s_OniOn0zfdFPicH4Y,47
|
31
|
-
quant_met-0.0.8.dist-info/RECORD,,
|
File without changes
|