diff --git a/src/aiidalab_qe/app/configuration/advanced.py b/src/aiidalab_qe/app/configuration/advanced.py index 343be6134..31a9c004e 100644 --- a/src/aiidalab_qe/app/configuration/advanced.py +++ b/src/aiidalab_qe/app/configuration/advanced.py @@ -209,6 +209,10 @@ def __init__(self, default_protocol=None, **kwargs): (self.etot_conv_thr, "disabled"), lambda override: not override, ) + + #Max electron SCF steps widget + self._create_electron_maxstep_widgets() + # Spin-Orbit calculation self.spin_orbit = ipw.ToggleButtons( options=[ @@ -260,6 +264,8 @@ def __init__(self, default_protocol=None, **kwargs): [self.forc_conv_thr, self.etot_conv_thr, self.scf_conv_thr], layout=ipw.Layout(height="50px", justify_content="flex-start"), ), + # Max electron SCF steps widget + self.electron_maxstep, # smearing setting widget self.smearing, # Kpoints setting widget @@ -278,6 +284,22 @@ def __init__(self, default_protocol=None, **kwargs): # Default settings to trigger the callback self.reset() + + def _create_electron_maxstep_widgets(self): + self.electron_maxstep = ipw.BoundedIntText( + min=20, + max=1000, + step=1, + value=80, + description="Max. electron steps:", + style={"description_width": "initial"}, + ) + ipw.dlink( + (self.override, "value"), + (self.electron_maxstep, "disabled"), + lambda override: not override, + ) + self.electron_maxstep.observe(self._callback_value_set, "value") def set_value_and_step(self, attribute, value): """ @@ -459,6 +481,11 @@ def get_panel_value(self): self.etot_conv_thr.value ) + #Max electron SCF steps + parameters["pw"]["parameters"]["ELECTRONS"]["electron_maxstep"] = ( + self.electron_maxstep.value + ) + # Spin-Orbit calculation if self.spin_orbit.value == "soc": parameters["pw"]["parameters"]["SYSTEM"]["lspinorb"] = True @@ -542,6 +569,14 @@ def set_panel_value(self, parameters): .get("conv_thr", 0.0) ) + #Max electron SCF steps + self.electron_maxstep.value = ( + parameters.get("pw", {}) + .get("parameters", {}) + .get("ELECTRONS", {}) + .get("electron_maxstep", 80) + ) + # Logic to set the magnetization if parameters.get("initial_magnetic_moments"): self.magnetization._set_magnetization_values( diff --git a/tests/conftest.py b/tests/conftest.py index 316445d32..665ace7cc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -357,6 +357,7 @@ def _submit_app_generator( tot_charge=0.0, vdw_corr="none", initial_magnetic_moments=0.0, + electron_maxstep=80, ): configure_step = app.configure_step # Settings diff --git a/tests/test_submit_qe_workchain.py b/tests/test_submit_qe_workchain.py index 140d6a3b7..3f2b7b6aa 100644 --- a/tests/test_submit_qe_workchain.py +++ b/tests/test_submit_qe_workchain.py @@ -58,6 +58,9 @@ def test_create_builder_advanced_settings( -collinear -tot_charge -initial_magnetic_moments + -vdw_corr + -electron_maxstep + -properties: bands, pdos """ app = submit_app_generator( @@ -66,6 +69,7 @@ def test_create_builder_advanced_settings( tot_charge=1.0, vdw_corr="dft-d3bj", initial_magnetic_moments=0.1, + electron_maxstep=100, properties=["bands", "pdos"], ) submit_step = app.submit_step @@ -85,6 +89,7 @@ def test_create_builder_advanced_settings( assert parameters["pw"]["parameters"]["SYSTEM"]["tot_charge"] == 1.0 assert parameters["pw"]["parameters"]["SYSTEM"]["vdw_corr"] == "dft-d3" assert parameters["pw"]["parameters"]["SYSTEM"]["dftd3_version"] == 4 + assert parameters["pw"]["parameters"]["ELECTRONS"]["electron_maxstep"] == 100 # test initial_magnetic_moments set 'starting_magnetization' in pw.in assert (