Skip to content

Commit

Permalink
Merge branch 'main' into feature/add_custom_label
Browse files Browse the repository at this point in the history
  • Loading branch information
superstar54 authored Apr 23, 2024
2 parents b75e3ab + 5cc3952 commit c235854
Show file tree
Hide file tree
Showing 7 changed files with 554 additions and 6 deletions.
43 changes: 40 additions & 3 deletions src/aiidalab_qe/app/configuration/advanced.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from aiidalab_qe.app.parameters import DEFAULT_PARAMETERS
from aiidalab_qe.common.panel import Panel
from aiidalab_qe.common.setup_pseudos import PseudoFamily
from aiidalab_qe.common.widgets import HubbardWidget

from .pseudos import PseudoFamilySelector, PseudoSetter

Expand Down Expand Up @@ -112,6 +113,13 @@ def __init__(self, default_protocol=None, **kwargs):
)
self.kpoints_distance.observe(self._callback_value_set, "value")

# Hubbard setting widget
self.hubbard_widget = HubbardWidget()
ipw.dlink(
(self.override, "value"),
(self.hubbard_widget.activate_hubbard, "disabled"),
lambda override: not override,
)
# Total change setting widget
self.total_charge = ipw.BoundedFloatText(
min=-3,
Expand Down Expand Up @@ -184,6 +192,7 @@ def __init__(self, default_protocol=None, **kwargs):
# Kpoints setting widget
self.kpoints_description,
ipw.HBox([self.kpoints_distance, self.mesh_grid]),
self.hubbard_widget,
self.pseudo_family_selector,
self.pseudo_setter,
]
Expand All @@ -207,6 +216,7 @@ def _update_input_structure(self, change):
self.magnetization._update_widget(change)
self.pseudo_setter.structure = change["new"]
self._display_mesh()
self.hubbard_widget.update_widgets(change["new"])
else:
self.magnetization.input_structure = None
self.pseudo_setter.structure = None
Expand Down Expand Up @@ -269,7 +279,18 @@ def get_panel_value(self):
# Set total charge
parameters["pw"]["parameters"]["SYSTEM"]["tot_charge"] = self.total_charge.value

# Set the pseudos
if self.hubbard_widget.activate_hubbard.value:
parameters["hubbard_parameters"] = self.hubbard_widget.hubbard_dict
if self.hubbard_widget.eigenvalues_label.value:
parameters["pw"]["parameters"]["SYSTEM"].update(
self.hubbard_widget.eigenvalues_dict
)

# add clean_workdir to the parameters
parameters["clean_workdir"] = self.clean_workdir.value

# add the pseudo_family to the parameters
parameters["pseudo_family"] = self.pseudo_family_selector.value
if self.pseudo_setter.pseudos:
parameters["pw"]["pseudos"] = self.pseudo_setter.pseudos
parameters["pw"]["parameters"]["SYSTEM"]["ecutwfc"] = (
Expand All @@ -278,8 +299,6 @@ def get_panel_value(self):
parameters["pw"]["parameters"]["SYSTEM"]["ecutrho"] = (
self.pseudo_setter.ecutrho
)
# if override is not ticked, use the default value
parameters["pw"]["parameters"]["SYSTEM"]["tot_charge"] = self.total_charge.value

if self.van_der_waals.value in ["none", "ts-vdw"]:
parameters["pw"]["parameters"]["SYSTEM"]["vdw_corr"] = (
Expand Down Expand Up @@ -381,6 +400,22 @@ def set_panel_value(self, parameters):
parameters["pw"]["parameters"]["SYSTEM"]["tot_magnetization"]
)

if parameters.get("hubbard_parameters"):
self.hubbard_widget.activate_hubbard.value = True
self.hubbard_widget.set_hubbard_widget(
parameters["hubbard_parameters"]["hubbard_u"]
)
starting_ns_eigenvalue = (
parameters.get("pw", {})
.get("parameters", {})
.get("SYSTEM", {})
.get("starting_ns_eigenvalue")
)

if starting_ns_eigenvalue is not None:
self.hubbard_widget.eigenvalues_label.value = True
self.hubbard_widget.set_eigenvalues_widget(starting_ns_eigenvalue)

def reset(self):
"""Reset the widget and the traitlets"""

Expand Down Expand Up @@ -408,6 +443,8 @@ def reset(self):
self.pseudo_setter._reset()
# reset the magnetization
self.magnetization.reset()
# reset the hubbard widget
self.hubbard_widget.reset()
# reset mesh grid
if self.input_structure is None:
self.mesh_grid.value = " "
Expand Down
6 changes: 6 additions & 0 deletions src/aiidalab_qe/app/result/summary_viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,12 @@ def generate_report_parameters(qeapp_wc):
report["periodicity"] = PERIODICITY_MAPPING.get(
qeapp_wc.inputs.structure.pbc, "xyz"
)

# DFT+U
hubbard_dict = ui_parameters["advanced"].pop("hubbard_parameters", None)
if hubbard_dict:
hubbard_parameters = hubbard_dict["hubbard_u"]
report["hubbard_u"] = hubbard_parameters
report["tot_magnetization"] = pw_parameters["SYSTEM"].get(
"tot_magnetization", False
)
Expand Down
6 changes: 6 additions & 0 deletions src/aiidalab_qe/app/static/workflow_summary.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@
<td>{{ initial_magnetic_moments }}</td>
</tr>
{% endif %}
{% if hubbard_u %}
<tr>
<td>DFT+U</td>
<td>{{ hubbard_u }}</td>
</tr>
{% endif %}
</table>
</div>
</div>
Expand Down
Loading

0 comments on commit c235854

Please sign in to comment.