From 8f7716ec628896009c44f3477d033c31245a0c0c Mon Sep 17 00:00:00 2001 From: Audrius Kalpokas Date: Mon, 30 Mar 2026 15:51:05 +0100 Subject: [PATCH 1/3] Replace original ring breaking schedule with DMR approach --- src/somd2/config/_config.py | 42 ++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/src/somd2/config/_config.py b/src/somd2/config/_config.py index 7082c9b..6ab8f54 100644 --- a/src/somd2/config/_config.py +++ b/src/somd2/config/_config.py @@ -1024,15 +1024,17 @@ def lambda_schedule(self, lambda_schedule): self._lambda_schedule = _LambdaSchedule.charge_scaled_morph(0.2) self._lambda_schedule_name = "charge_scaled_morph" elif lambda_schedule == "ring_break_morph": - self._lambda_schedule = _LambdaSchedule.standard_morph() self._lambda_schedule.prepend_stage( "restraints_off", self._lambda_schedule.initial() ) self._lambda_schedule.set_equation( stage="restraints_off", - lever="restraint", + lever="morse_soft", equation=1 - self._lambda_schedule.lam(), ) + self._lambda_schedule.set_equation( + stage="restraints_off", lever="morse_hard", equation=0 + ) self._lambda_schedule.set_equation( stage="restraints_off", lever="bond_k", @@ -1071,13 +1073,17 @@ def lambda_schedule(self, lambda_schedule): * self._lambda_schedule.initial() + self._lambda_schedule.lam() * self._lambda_schedule.final(), ) - self._lambda_schedule.prepend_stage( "potential_swap", self._lambda_schedule.initial() ) self._lambda_schedule.set_equation( stage="potential_swap", - lever="restraint", + lever="morse_hard", + equation=1 - self._lambda_schedule.lam(), + ) + self._lambda_schedule.set_equation( + stage="potential_swap", + lever="morse_soft", equation=0 + self._lambda_schedule.lam(), ) self._lambda_schedule.set_equation( @@ -1114,11 +1120,12 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.initial(), ) - self._lambda_schedule.set_equation( - stage="morph", lever="restraint", equation=0 + stage="morph", lever="morse_hard", equation=0 + ) + self._lambda_schedule.set_equation( + stage="morph", lever="morse_soft", equation=0 ) - self._lambda_schedule.set_equation( stage="morph", lever="bond_k", @@ -1149,13 +1156,13 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.final(), ) - self._lambda_schedule_name = "ring_break_morph" elif lambda_schedule == "reverse_ring_break_morph": - self._lambda_schedule = _LambdaSchedule.standard_morph() self._lambda_schedule.set_equation( - stage="morph", lever="restraint", equation=0 + stage="morph", lever="morse_hard", equation=0 + ) + self._lambda_schedule.set_equation( + stage="morph", lever="morse_soft", equation=0 ) - self._lambda_schedule.set_equation( stage="morph", lever="bond_k", @@ -1192,9 +1199,12 @@ def lambda_schedule(self, lambda_schedule): ) self._lambda_schedule.set_equation( stage="bonded_perturb", - lever="restraint", + lever="morse_soft", equation=0 + self._lambda_schedule.lam(), ) + self._lambda_schedule.set_equation( + stage="bonded_perturb", lever="morse_hard", equation=0 + ) self._lambda_schedule.set_equation( stage="bonded_perturb", lever="bond_k", @@ -1239,7 +1249,12 @@ def lambda_schedule(self, lambda_schedule): ) self._lambda_schedule.set_equation( stage="potential_swap", - lever="restraint", + lever="morse_hard", + equation=0 + self._lambda_schedule.lam(), + ) + self._lambda_schedule.set_equation( + stage="potential_swap", + lever="morse_soft", equation=1 - self._lambda_schedule.lam(), ) self._lambda_schedule.set_equation( @@ -1276,7 +1291,6 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.final(), ) - self._lambda_schedule_name = "reverse_ring_break_morph" else: try: self._lambda_schedule = self._from_hex(lambda_schedule) From 169bfd82b82725bb9f5ea22c33e2ff3a4cdbb2c7 Mon Sep 17 00:00:00 2001 From: Audrius Kalpokas Date: Mon, 30 Mar 2026 15:57:55 +0100 Subject: [PATCH 2/3] Fix missing fields --- src/somd2/config/_config.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/somd2/config/_config.py b/src/somd2/config/_config.py index 6ab8f54..b5cc0c5 100644 --- a/src/somd2/config/_config.py +++ b/src/somd2/config/_config.py @@ -1024,6 +1024,7 @@ def lambda_schedule(self, lambda_schedule): self._lambda_schedule = _LambdaSchedule.charge_scaled_morph(0.2) self._lambda_schedule_name = "charge_scaled_morph" elif lambda_schedule == "ring_break_morph": + self._lambda_schedule = _LambdaSchedule.standard_morph() self._lambda_schedule.prepend_stage( "restraints_off", self._lambda_schedule.initial() ) @@ -1032,9 +1033,6 @@ def lambda_schedule(self, lambda_schedule): lever="morse_soft", equation=1 - self._lambda_schedule.lam(), ) - self._lambda_schedule.set_equation( - stage="restraints_off", lever="morse_hard", equation=0 - ) self._lambda_schedule.set_equation( stage="restraints_off", lever="bond_k", @@ -1073,6 +1071,7 @@ def lambda_schedule(self, lambda_schedule): * self._lambda_schedule.initial() + self._lambda_schedule.lam() * self._lambda_schedule.final(), ) + self._lambda_schedule.prepend_stage( "potential_swap", self._lambda_schedule.initial() ) @@ -1120,6 +1119,7 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.initial(), ) + self._lambda_schedule.set_equation( stage="morph", lever="morse_hard", equation=0 ) @@ -1157,6 +1157,7 @@ def lambda_schedule(self, lambda_schedule): equation=self._lambda_schedule.final(), ) elif lambda_schedule == "reverse_ring_break_morph": + self._lambda_schedule = _LambdaSchedule.standard_morph() self._lambda_schedule.set_equation( stage="morph", lever="morse_hard", equation=0 ) @@ -1291,6 +1292,7 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.final(), ) + else: try: self._lambda_schedule = self._from_hex(lambda_schedule) From 8877f23ccea9b9f765af4066210874ebc7dacc25 Mon Sep 17 00:00:00 2001 From: Audrius Kalpokas Date: Mon, 30 Mar 2026 15:59:28 +0100 Subject: [PATCH 3/3] Re-add missing schedule names --- src/somd2/config/_config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/somd2/config/_config.py b/src/somd2/config/_config.py index b5cc0c5..6626168 100644 --- a/src/somd2/config/_config.py +++ b/src/somd2/config/_config.py @@ -1156,6 +1156,7 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.final(), ) + self._lambda_schedule_name = "ring_break_morph" elif lambda_schedule == "reverse_ring_break_morph": self._lambda_schedule = _LambdaSchedule.standard_morph() self._lambda_schedule.set_equation( @@ -1292,7 +1293,7 @@ def lambda_schedule(self, lambda_schedule): lever="torsion_phase", equation=self._lambda_schedule.final(), ) - + self._lambda_schedule_name = "reverse_ring_break_morph" else: try: self._lambda_schedule = self._from_hex(lambda_schedule)