diff --git a/pqsetup/input_writer.py b/pqsetup/input_writer.py index adf12a6..4276ed5 100644 --- a/pqsetup/input_writer.py +++ b/pqsetup/input_writer.py @@ -256,6 +256,16 @@ def validate_setup( ), ) ) + if setup.job_type == "mm-opt" and setup.ensemble != "OPT": + diagnostics.append( + _error( + "workflow.mm_opt_ensemble", + ( + "mm-opt is an optimization job type and cannot use an " + "MD ensemble." + ), + ) + ) if setup.job_type == "qm-rpmd": beads = setup.extra_settings.get("rpmd_n_replica") if beads is None: diff --git a/tests/test_presets_and_input.py b/tests/test_presets_and_input.py index afa3a9c..248c90d 100644 --- a/tests/test_presets_and_input.py +++ b/tests/test_presets_and_input.py @@ -73,6 +73,18 @@ def test_incomplete_mm_optimization_package_is_rejected() -> None: assert {item.code for item in result.diagnostics} == {"workflow.unsupported"} +def test_mm_opt_with_md_ensemble_is_rejected() -> None: + result = render_input( + SimulationSetup( + job_type="mm-opt", + ensemble="NVT", + thermostat="berendsen", + runner=None, + ) + ) + + assert not result.valid + assert "workflow.mm_opt_ensemble" in {item.code for item in result.diagnostics} def test_qm_rpmd_requires_bead_count() -> None: missing = render_input( SimulationSetup(