Skip to content

Commit 9de605e

Browse files
authored
Merge pull request #284 from OpenBioSim/fix_283
Fix issue #283
2 parents a5278e9 + 77a4447 commit 9de605e

File tree

1 file changed

+47
-2
lines changed

1 file changed

+47
-2
lines changed

src/sire/mol/_dynamics.py

+47-2
Original file line numberDiff line numberDiff line change
@@ -1001,28 +1001,42 @@ def run(
10011001
save_frequency = 25
10021002
else:
10031003
save_frequency = save_frequency.to(picosecond)
1004+
no_save = False
1005+
else:
1006+
no_save = True
1007+
save_frequency = steps_to_run + 1
10041008

10051009
if energy_frequency != 0:
1010+
no_save_energy = False
10061011
if energy_frequency is None:
10071012
if self._map.specified("energy_frequency"):
10081013
energy_frequency = (
10091014
self._map["energy_frequency"].value().to(picosecond)
10101015
)
10111016
else:
10121017
energy_frequency = save_frequency
1018+
no_save_energy = no_save
10131019
else:
10141020
energy_frequency = energy_frequency.to(picosecond)
1021+
else:
1022+
energy_frequency = steps_to_run + 1
1023+
no_save_energy = True
10151024

10161025
if frame_frequency != 0:
1026+
no_save_frame = False
10171027
if frame_frequency is None:
10181028
if self._map.specified("frame_frequency"):
10191029
frame_frequency = (
10201030
self._map["frame_frequency"].value().to(picosecond)
10211031
)
10221032
else:
10231033
frame_frequency = save_frequency
1034+
no_save_frame = no_save
10241035
else:
10251036
frame_frequency = frame_frequency.to(picosecond)
1037+
else:
1038+
frame_frequency = steps_to_run + 1
1039+
no_save_frame = True
10261040

10271041
completed = 0
10281042

@@ -1095,9 +1109,38 @@ class NeedsMinimiseError(Exception):
10951109
pass
10961110

10971111
nsteps_before_run = self._current_step
1112+
# if this is the first call, then set the save frequencies
10981113
if nsteps_before_run == 0:
10991114
self._next_save_frame = frame_frequency_steps
11001115
self._next_save_energy = energy_frequency_steps
1116+
self._prev_frame_frequency_steps = frame_frequency_steps
1117+
self._prev_energy_frequency_steps = energy_frequency_steps
1118+
self._prev_no_frame = no_save_frame
1119+
self._prev_no_energy = no_save_energy
1120+
# handle adjustments to the save frequencies
1121+
else:
1122+
if frame_frequency_steps != self._prev_frame_frequency_steps:
1123+
if self._prev_no_frame:
1124+
self._next_save_frame = nsteps_before_run + frame_frequency_steps
1125+
else:
1126+
self._next_save_frame = (
1127+
self._next_save_frame
1128+
+ frame_frequency_steps
1129+
- self._prev_frame_frequency_steps
1130+
)
1131+
if energy_frequency_steps != self._prev_energy_frequency_steps:
1132+
if self._prev_no_energy:
1133+
self._next_save_energy = nsteps_before_run + energy_frequency_steps
1134+
else:
1135+
self._next_save_energy = (
1136+
self._next_save_energy
1137+
+ energy_frequency_steps
1138+
- self._prev_energy_frequency_steps
1139+
)
1140+
self._prev_no_frame = no_save_frame
1141+
self._prev_frame_frequency_steps = frame_frequency_steps
1142+
self._prev_no_energy = no_save_energy
1143+
self._prev_energy_frequency_steps = energy_frequency_steps
11011144

11021145
from ..base import ProgressBar
11031146
from ..units import second
@@ -1123,7 +1166,8 @@ class NeedsMinimiseError(Exception):
11231166
):
11241167
save_frame = True
11251168
self._next_save_frame += frame_frequency_steps
1126-
block_size = frame_frequency_steps
1169+
if frame_frequency_steps < block_size:
1170+
block_size = frame_frequency_steps
11271171
else:
11281172
save_frame = False
11291173

@@ -1136,7 +1180,8 @@ class NeedsMinimiseError(Exception):
11361180
):
11371181
save_energy = True
11381182
self._next_save_energy += energy_frequency_steps
1139-
block_size = energy_frequency_steps
1183+
if energy_frequency_steps < block_size:
1184+
block_size = energy_frequency_steps
11401185
else:
11411186
save_energy = False
11421187

0 commit comments

Comments
 (0)