If you change a unimolecular rate for a reaction between checkpoints, the new rate will not be used. This is because the molecule already has a set lifetime computed from the previous checkpoint.
It would be easy enough to recompute lifetimes at the start of the checkpoint. However, if we do this, then that means results from a simulation using checkpointing won't be identical to those run without checkpointing if unimolecular reactions are involved.
For example, assume you have two identical simulations (aside from the checkpoint iterations value) that have unimolecular reactions. The one is checkpointed after 100 iterations. After this, the checkpoint file is loaded and the simulation runs for another 100 iterations for a total of 200 iterations. Then imagine you run a separate but essentially identical simulation for 200 iterations without checkpointing. Currently, the results would be identical, but, if we change it so that the lifetimes are always recomputed when checkpointing, then they will no longer be identical.
Another option would be to provide some input flag or keyword that forces MCell to recompute lifetimes. This would also be relatively easy to do, but it puts the burden on the user to know when they should or should not use this flag.
Lastly, we could try to automate this, so that lifetimes are only recomputed if unimolecular reactions have changed between checkpoints. This would require us to somehow store this information in the checkpoint file.
This issue was fixed in commit b7d26efe (also see 380c50c5 and 380c50c5). The current solution involves simply recomputing lifetimes at the start of the checkpoint.
If you change a unimolecular rate for a reaction between checkpoints, the new rate will not be used. This is because the molecule already has a set lifetime computed from the previous checkpoint.
It would be easy enough to recompute lifetimes at the start of the checkpoint. However, if we do this, then that means results from a simulation using checkpointing won't be identical to those run without checkpointing if unimolecular reactions are involved.
For example, assume you have two identical simulations (aside from the checkpoint iterations value) that have unimolecular reactions. The one is checkpointed after 100 iterations. After this, the checkpoint file is loaded and the simulation runs for another 100 iterations for a total of 200 iterations. Then imagine you run a separate but essentially identical simulation for 200 iterations without checkpointing. Currently, the results would be identical, but, if we change it so that the lifetimes are always recomputed when checkpointing, then they will no longer be identical.
Another option would be to provide some input flag or keyword that forces MCell to recompute lifetimes. This would also be relatively easy to do, but it puts the burden on the user to know when they should or should not use this flag.
Lastly, we could try to automate this, so that lifetimes are only recomputed if unimolecular reactions have changed between checkpoints. This would require us to somehow store this information in the checkpoint file.