We have developed an operator-splitting library that optionally uses firedrake. In one of our examples, we noticed that with newer versions of firedrake, we are not able to get as small of errors as when we originally developed the example (by several orders of magnitude).
The old version that I know to achieve small errors is referenced by https://zenodo.org/records/10808419
The code for the operator-splitting library is available at https://github.com/uofs-simlab/pythOS, with the example available in that repository under examples/advection_diffusion_reaction/2D_ADR.py
Historically we achieved errors down to 2.6e-11 with the PP3_4A-3 in the script, and 3.0e-12 with the Yoshida-3 method in the script, while with the current version of firedrake, the error is limited at about 3e-9.
We have developed an operator-splitting library that optionally uses firedrake. In one of our examples, we noticed that with newer versions of firedrake, we are not able to get as small of errors as when we originally developed the example (by several orders of magnitude).
The old version that I know to achieve small errors is referenced by https://zenodo.org/records/10808419
The code for the operator-splitting library is available at https://github.com/uofs-simlab/pythOS, with the example available in that repository under examples/advection_diffusion_reaction/2D_ADR.py
Historically we achieved errors down to 2.6e-11 with the PP3_4A-3 in the script, and 3.0e-12 with the Yoshida-3 method in the script, while with the current version of firedrake, the error is limited at about 3e-9.