diff --git a/.github/workflows/PaperDraft.yml b/.github/workflows/PaperDraft.yml new file mode 100644 index 00000000..0b85bc71 --- /dev/null +++ b/.github/workflows/PaperDraft.yml @@ -0,0 +1,33 @@ +name: Build JOSS paper draft PDF + +on: + push: + paths: + - paper/** + - .github/workflows/draft-pdf.yml + pull_request: + paths: + - paper/** + - .github/workflows/draft-pdf.yml + +jobs: + paper: + runs-on: ubuntu-latest + name: JOSS Paper Draft + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build draft PDF + uses: openjournals/openjournals-draft-action@master + with: + journal: joss + # This should be the path to the paper within your repo. + paper-path: paper/paper.md + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: paper + # This is the output path where Pandoc will write the compiled + # PDF. Note, this should be the same directory as the input + # paper.md + path: paper/paper.pdf diff --git a/.gitignore b/.gitignore index 0a9ff74a..e8693c92 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,6 @@ docs/contributing.md # environment. Manifest.toml -run -run/* +**/run* **/*.code-workspace +**/*.pb.gz diff --git a/.typos.toml b/.typos.toml new file mode 100644 index 00000000..12ac8609 --- /dev/null +++ b/.typos.toml @@ -0,0 +1,2 @@ +[default.extend-words] +sigal = "sigal" diff --git a/paper/paper.bib b/paper/paper.bib new file mode 100644 index 00000000..0b5dbaaf --- /dev/null +++ b/paper/paper.bib @@ -0,0 +1,484 @@ +@article{bartel2024structure, + title={Structure-preserving numerical methods for {F}okker-{P}lanck + equations}, + author={Bartel, Hanna and Lampert, Joshua and Ranocha, Hendrik}, + journal={Proceedings in Applied Mathematics and Mechanics}, + pages={e202400007}, + year={2024}, + month={11}, + doi={10.1002/pamm.202400007}, + eprint={2404.07641}, + eprinttype={arxiv}, + eprintclass={math.NA} +} + +@article{burchard2003, + title={A high-order conservative {P}atankar-type discretisation for + stiff systems of production--destruction equations}, + author={Burchard, Hans and Deleersnijder, Eric and Meister, Andreas}, + journal={Applied Numerical Mathematics}, + volume={47}, + number={1}, + pages={1--30}, + year={2003}, + publisher={Elsevier}, + doi={10.1016/S0168-9274(03)00101-6} +} + +@article{kopeczmeister2018order2, + title={On order conditions for modified {P}atankar-{R}unge-{K}utta + schemes}, + author={Kopecz, Stefan and Meister, Andreas}, + journal={Applied Numerical Mathematics}, + volume={123}, + pages={159--179}, + year={2018}, + publisher={Elsevier}, + doi={10.1016/j.apnum.2017.09.004} +} + +@article {kopeczmeister2018order3, + title={Unconditionally positive and conservative third order + modified {P}atankar-{R}unge-{K}utta discretizations of + production--destruction systems}, + author={Kopecz, Stefan and Meister, Andreas}, + journal={BIT Numerical Mathematics}, + volume={58}, + number={3}, + pages={691--728}, + year={2018}, + publisher={Springer}, + doi={10.1007/s10543-018-0705-1} +} + +@article {kopeczmeister2019, + title={On the existence of three-stage third-order modified + {P}atankar-{R}unge-{K}utta schemes}, + author={Kopecz, Stefan and Meister, Andreas}, + journal={Numerical Algorithms}, + pages={1--12}, + year={2019}, + publisher={Springer}, + doi={10.1007/s11075-019-00680-3} +} + +@article {izgin2022stability1, + title={On {L}yapunov stability of positive and conservative + time integrators and application to second order modified + {P}atankar-{R}unge-{K}utta schemes}, + author={Izgin, Thomas and Kopecz, Stefan and Meister, Andreas}, + journal={ESAIM: Mathematical Modelling and Numerical Analysis}, + volume={56}, + number={3}, + pages={1053--1080}, + year={2022}, + publisher={EDP Sciences}, + doi={10.1051/m2an/2022031}} +} + +@article {izgin2022stability2, + title={On the stability of unconditionally positive and linear invariants + preserving time integration schemes}, + author={Izgin, Thomas and Kopecz, Stefan and Meister, Andreas}, + journal={SIAM Journal on Numerical Analysis}, + volume={60}, + number={6}, + pages={3029--3051}, + year={2022}, + publisher={SIAM}, + doi={10.1137/22M1480318} +} + +@article {huang2023, + title={On the stability of strong-stability-preserving modified + {P}atankar-{R}unge-{K}utta schemes}, + author={Huang, Juntao and Izgin, Thomas and Kopecz, Stefan and + Meister, Andreas and Shu, Chi-Wang}, + journal={ESAIM: Mathematical Modelling and Numerical Analysis}, + volume={57}, + number={2}, + pages={1063--1086}, + year={2023}, + publisher={EDP Sciences}, + doi={10.1051/m2an/2023005} +} + + +@article {huang2019order3, + title={A Third-Order Unconditionally Positivity-Preserving Scheme for + Production-Destruction Equations with Applications to + Non-equilibrium Flows}, + author={Huang, Juntao and Zhao, Weifeng and Shu, Chi-Wang}, + journal={Journal of Scientific Computing}, + volume={79}, + number={2}, + pages={1015--1056}, + year={2019}, + publisher={Springer}, + doi={10.1007/s10915-018-0881-9} +} + +@article {huang2019order2, + title={Positivity-Preserving Time Discretizations for + Production-Destruction Equations with Applications to + Non-equilibrium Flows}, + author={Huang, Juntao and Shu, Chi-Wang}, + journal={Journal of Scientific Computing}, + volume={78}, + number={3}, + pages={1811--1839}, + year={2019}, + publisher={Springer}, + doi={10.1007/s10915-018-0852-1} +} + +@article {torlo2022, + title={Issues with Positivity-Preserving {P}atankar-type Schemes}, + author={Torlo, Davide and \"Offner, Philipp and Ranocha, Hendrik}, + journal={Applied Numerical Mathematics}, + year={2022}, + month={08}, + volume={182}, + pages={117--147}, + doi={10.1016/j.apnum.2022.07.014}, + eprint={2108.07347}, + eprinttype={arxiv}, + eprintclass={math.NA} +} + +@inbook{benzmeister2015, + author="Meister, Andreas and Benz, Joachim", + editor="Freeden, Willi and Nashed, M. Zuhair and Sonar, Thomas", + title="Phosphorus Cycles in Lakes and Rivers: Modeling, Analysis, and Simulation", + bookTitle="Handbook of Geomathematics", + year="2015", + publisher="Springer Berlin Heidelberg", + address="Berlin, Heidelberg", + pages="1387--1416", + isbn="978-3-642-54551-1", + doi="10.1007/978-3-642-54551-1_23", + url="https://doi.org/10.1007/978-3-642-54551-1_23" +} + +@article {izginoeffner2023, + AUTHOR = {Izgin, Thomas and \"Offner, Philipp}, + TITLE = {A study of the local dynamics of modified {P}atankar {D}e{C} + and higher order modified {P}atankar-{RK} methods}, + journal={ESAIM: Mathematical Modelling and Numerical Analysis}, + VOLUME = {57}, + YEAR = {2023}, + NUMBER = {4}, + PAGES = {2319--2348}, + ISSN = {2822-7840,2804-7214}, + MRCLASS = {65L05 (65L06 65L20)}, + MRNUMBER = {4612598}, + DOI = {10.1051/m2an/2023053}, + URL = {https://doi.org/10.1051/m2an/2023053}, +} + + +@article {OeffnerTorlo2020, + AUTHOR = {\"Offner, Philipp and Torlo, Davide}, + TITLE = {Arbitrary high-order, conservative and positivity preserving + {P}atankar-type deferred correction schemes}, + JOURNAL = {Applied Numerical Mathematics}, + VOLUME = {153}, + YEAR = {2020}, + PAGES = {15--34}, + ISSN = {0168-9274,1873-5460}, + MRCLASS = {65L06}, + MRNUMBER = {4064785}, + DOI = {10.1016/j.apnum.2020.01.025}, + URL = {https://doi.org/10.1016/j.apnum.2020.01.025}, +} + +@article {Shampine2005, + AUTHOR = {Shampine, L. F. and Thompson, S. and Kierzenka, J. A. and + Byrne, G. D.}, + TITLE = {Non-negative solutions of {ODE}s}, + JOURNAL = {Applied Mathematics and Computation}, + VOLUME = {170}, + YEAR = {2005}, + NUMBER = {1}, + PAGES = {556--569}, + ISSN = {0096-3003,1873-5649}, + MRCLASS = {34C11}, + MRNUMBER = {2177561}, + DOI = {10.1016/j.amc.2004.12.011}, + URL = {https://doi.org/10.1016/j.amc.2004.12.011}, +} + +@article{rackauckas2017differentialequations, + title={{DifferentialEquations.jl} {--} {A} Performant and Feature-Rich + Ecosystem for Solving Differential Equations in {J}ulia}, + author={Rackauckas, Christopher and Nie, Qing}, + journal={Journal of Open Research Software}, + volume={5}, + number={1}, + pages={15}, + year={2017}, + publisher={Ubiquity Press}, + doi={10.5334/jors.151} +} + +@article{bezanson2017julia, + title={Julia: {A} Fresh Approach to Numerical Computing}, + author={Bezanson, Jeff and Edelman, Alan and Karpinski, Stefan and + Shah, Viral B}, + journal={SIAM Review}, + volume={59}, + number={1}, + pages={65--98}, + year={2017}, + publisher={SIAM}, + eprint={1411.1607}, + eprinttype={arxiv}, + eprintclass={cs.MS}, + doi={10.1137/141000671} +} + +@article{christ2023plots, + author={Christ, Simon and Schwabeneder, Daniel and Rackauckas, Christopher + and Borregaard, Michael Krabbe and Breloff, Thomas}, + title={Plots.jl --- a user extendable plotting {API} for the {J}ulia + programming language}, + journal={Journal of Open Research Software}, + volume={11}, + number={1}, + pages={5}, + year={2023}, + doi={10.5334/jors.431}, + eprint={2204.08775}, + eprinttype={arxiv}, + eprintclass={cs.GR} +} + +@article{nusslein2021positivity, + title={Positivity-Preserving Adaptive {R}unge-{K}utta Methods}, + author={N\"u{\ss}lein, Stephan and Ranocha, Hendrik and Ketcheson, David I}, + journal={Communications in Applied Mathematics and Computational Science}, + year={2021}, + month={11}, + doi={10.2140/camcos.2021.16.155}, + volume={16}, + number={2}, + pages={155--179}, + eprint={2005.06268}, + eprinttype={arxiv}, + eprintclass={math.NA} +} + +@article{sandu2001positive, + title={Positive numerical integration methods for chemical + kinetic systems}, + author={Sandu, Adrian}, + journal={Journal of Computational Physics}, + volume={170}, + number={2}, + pages={589--602}, + year={2001}, + publisher={Elsevier}, + doi={10.1006/jcph.2001.6750} +} + +@article{bolley1978conservation, + title={Conservation de la positivit{\'e} lors de la discr{\'e}tisation + des probl{\`e}mes d'{\'e}volution paraboliques}, + author={Bolley, Catherine and Crouzeix, Michel}, + journal={RAIRO. Analyse num{\'e}rique}, + volume={12}, + number={3}, + pages={237--245}, + year={1978}, + publisher={EDP Sciences}, + doi = {10.1051/m2an/1978120302371} +} + +@book{gottlieb2011strong, + title={Strong stability preserving {R}unge-{K}utta and multistep time + discretizations}, + author={Gottlieb, Sigal and Ketcheson, David I and Shu, Chi-Wang}, + year={2011}, + publisher={World Scientific}, + address={Singapore}, + doi = {10.1142/7498} +} + +@article {Bruggeman2007, + AUTHOR = {Bruggeman, Jorn and Burchard, Hans and Kooi, Bob W. and + Sommeijer, Ben}, + TITLE = {A second-order, unconditionally positive, mass-conserving + integration scheme for biochemical systems}, + JOURNAL = {Applied Numerical Mathematics}, + VOLUME = {57}, + YEAR = {2007}, + NUMBER = {1}, + PAGES = {36--58}, + ISSN = {0168-9274,1873-5460}, + MRCLASS = {65L05 (92E20)}, + MRNUMBER = {2279505}, + DOI = {10.1016/j.apnum.2005.12.001}, + URL = {https://doi.org/10.1016/j.apnum.2005.12.001}, +} + +@article {Broekhuizen2008, + AUTHOR = {Broekhuizen, N. and Rickard, Graham J. and Bruggeman, J. and + Meister, A.}, + TITLE = {An improved and generalized second order, unconditionally + positive, mass conserving integration scheme for biochemical + systems}, + JOURNAL = {Applied Numerical Mathematics}, + VOLUME = {58}, + YEAR = {2008}, + NUMBER = {3}, + PAGES = {319--340}, + ISSN = {0168-9274,1873-5460}, + MRCLASS = {65L06 (92E20)}, + MRNUMBER = {2392690}, + DOI = {10.1016/j.apnum.2006.12.002}, + URL = {https://doi.org/10.1016/j.apnum.2006.12.002}, +} + +@article {Martiradonna2020, + AUTHOR = {Martiradonna, Angela and Colonna, Gianpiero and Diele, Fasma}, + TITLE = {{\it {G}e{C}o}: {G}eometric {C}onservative nonstandard schemes + for biochemical systems}, + JOURNAL = {Applied Numerical Mathematics}, + VOLUME = {155}, + YEAR = {2020}, + PAGES = {38--57}, + ISSN = {0168-9274,1873-5460}, + MRCLASS = {92C40 (65P10)}, + MRNUMBER = {4087156}, + DOI = {10.1016/j.apnum.2019.12.004}, + URL = {https://doi.org/10.1016/j.apnum.2019.12.004}, +} + +@article {Avila2021, + AUTHOR = {\'Avila, Andr\'es I. and Gonz\'alez, Galo Javier and Kopecz, + Stefan and Meister, Andreas}, + TITLE = {Extension of modified {P}atankar-{R}unge-{K}utta schemes to + nonautonomous production-destruction systems based on + {O}liver's approach}, + JOURNAL = {Journal of Computational and Applied Mathematics}, + VOLUME = {389}, + YEAR = {2021}, + PAGES = {Paper No. 113350, 13}, + ISSN = {0377-0427,1879-1778}, + MRCLASS = {65L06}, + MRNUMBER = {4194400}, + DOI = {10.1016/j.cam.2020.113350}, + URL = {https://doi.org/10.1016/j.cam.2020.113350}, +} + +@article {Avila2020, + AUTHOR = {\'Avila, Andr\'es I. and Kopecz, Stefan and Meister, Andreas}, + TITLE = {A comprehensive theory on generalized {BBKS} schemes}, + JOURNAL = {Applied Numerical Mathematics}, + VOLUME = {157}, + YEAR = {2020}, + PAGES = {19--37}, + ISSN = {0168-9274,1873-5460}, + MRCLASS = {65L06 (65L04 65L20)}, + MRNUMBER = {4109346}, + DOI = {10.1016/j.apnum.2020.05.027}, + URL = {https://doi.org/10.1016/j.apnum.2020.05.027}, +} + +@article {Formaggia2011, + AUTHOR = {Formaggia, L. and Scotti, A.}, + TITLE = {Positivity and conservation properties of some integration + schemes for mass action kinetics}, + JOURNAL = {SIAM Journal on Numerical Analysis}, + VOLUME = {49}, + YEAR = {2011}, + NUMBER = {3}, + PAGES = {1267--1288}, + ISSN = {0036-1429,1095-7170}, + MRCLASS = {65L04 (65L20 80A30 92E20)}, + MRNUMBER = {2812567}, + DOI = {10.1137/100789592}, + URL = {https://doi.org/10.1137/100789592}, +} + +@article {Izzo2025, + AUTHOR = {Izzo, Giuseppe and Messina, Eleonora and Pezzella, Mario and + Vecchio, Antonia}, + TITLE = {Modified {P}atankar linear multistep methods for + production-destruction systems}, + JOURNAL = {Journal of Scientific Computing}, + VOLUME = {102}, + YEAR = {2025}, + NUMBER = {3}, + PAGES = {Paper No. 87, 39}, + ISSN = {0885-7474,1573-7691}, + MRCLASS = {65L05 (65L06)}, + MRNUMBER = {4860303}, + DOI = {10.1007/s10915-025-02804-5}, + URL = {https://doi.org/10.1007/s10915-025-02804-5}, +} + +@article {Zhu2024, + AUTHOR = {Zhu, Fangyao and Huang, Juntao and Yang, Yang}, + TITLE = {Bound-preserving discontinuous {G}alerkin methods with + modified {P}atankar time integrations for chemical reacting + flows}, + JOURNAL = {Communications on Applied Mathematics and Computation}, + VOLUME = {6}, + YEAR = {2024}, + NUMBER = {1}, + PAGES = {190--217}, + ISSN = {2096-6385,2661-8893}, + MRCLASS = {65M15 (65M60 80A32)}, + MRNUMBER = {4710831}, + DOI = {10.1007/s42967-022-00231-z}, + URL = {https://doi.org/10.1007/s42967-022-00231-z}, +} + +@article {Blanes2022, + AUTHOR = {Blanes, Sergio and Iserles, Arieh and Macnamara, Shev}, + TITLE = {Positivity-preserving methods for ordinary differential + equations}, + JOURNAL = {ESAIM. Mathematical Modelling and Numerical Analysis}, + VOLUME = {56}, + YEAR = {2022}, + NUMBER = {6}, + PAGES = {1843--1870}, + ISSN = {2822-7840,2804-7214}, + MRCLASS = {65L05 (65L04 65P99)}, + MRNUMBER = {4467101}, + DOI = {10.1051/m2an/2022042}, + URL = {https://doi.org/10.1051/m2an/2022042}, +} + +@article {Izgin2025, + AUTHOR = {Izgin, Thomas and Ketcheson, David I. and Meister, Andreas}, + TITLE = {Order conditions for {R}unge--{K}utta-like methods with + solution-dependent coefficients}, + JOURNAL = {Communications in Applied Mathematics and Computational + Science}, + VOLUME = {20}, + YEAR = {2025}, + NUMBER = {1}, + PAGES = {29--66}, + ISSN = {1559-3940,2157-5452}, + MRCLASS = {65L06}, + MRNUMBER = {4873114}, + DOI = {10.2140/camcos.2025.20.29}, + URL = {https://doi.org/10.2140/camcos.2025.20.29}, +} + +@article{Ortleb2017, + author = {Ortleb, Sigrun and Hundsdorfer, Willem}, + title = {Patankar-type Runge-Kutta schemes for linear PDEs}, + journal = {AIP Conference Proceedings}, + volume = {1863}, + number = {1}, + pages = {320008}, + year = {2017}, + month = {07}, + issn = {0094-243X}, + doi = {10.1063/1.4992489}, + url = {https://doi.org/10.1063/1.4992489}, + eprint = {https://pubs.aip.org/aip/acp/article-pdf/doi/10.1063/1.4992489/13749027/320008\_1\_online.pdf}, +} diff --git a/paper/paper.md b/paper/paper.md new file mode 100644 index 00000000..e84c5c67 --- /dev/null +++ b/paper/paper.md @@ -0,0 +1,99 @@ +--- +title: 'PositiveIntegrators.jl: A Julia library of positivity-preserving time integration methods' +tags: + - Julia + - numerical analysis + - differential equations + - production-destruction systems + - ODE solvers + - positivity +authors: + - name: Stefan Kopecz + orcid: 0000-0003-0593-450X + affiliation: 1 + - name: Joshua Lampert + orcid: 0009-0007-0971-6709 + affiliation: 2 + - name: Hendrik Ranocha + orcid: 0000-0002-3456-2277 + affiliation: 3 +affiliations: + - name: Institute of Mathematics, University of Kassel, Germany + index: 1 + - name: Department of Mathematics, University of Hamburg, Germany + index: 2 + - name: Institute of Mathematics, Johannes Gutenberg University Mainz, Germany + index: 3 +date: 24 May 2025 +bibliography: paper.bib +--- + +# Summary + +We introduce PositiveIntegrators.jl, a Julia package that provides efficient implementations of various time integration schemes for the solution of positive ordinary differential equations, making these methods accessible for users and comparable for researchers. +Currently, the package provides the unconditionally positivity-preserving MPRK, SSP-MPRK, and MPDeC schemes, which are also conservative when applied to a conservative system. +The package is fully compatible with DifferentialEquations.jl, which allows a direct comparison between the provided schemes and standard methods. + + +# Statement of need + +Many systems of ordinary differential equations that model real-life applications have positive solutions. +For some of these systems unconditionally positivity-preserving time integration methods are helpful or even necessary to obtain meaningful solutions. + +Unfortunately, positivity is not preserved in almost any of the standard time integration schemes, such as Runge–Kutta methods, Rosenbrock methods, or linear multistep methods. +In particular, higher-order general linear methods cannot preserve positivity unconditionally [@bolley1978conservation]. +The only standard scheme with which unconditional positivity can be achieved is the implicit Euler method +(assuming that the nonlinear systems are solved exactly). +However, this is only first-order accurate and the preservation of positivity within the nonlinear iteration process poses a problem. For example, it may happen that the right-hand side of the differential equation is only defined for nonnegative values and would throw an error if a negative value is passed to it, e.g., in the case of a square root. Standard nonlinear solvers like Newton's method or fixed-point iterations will in general not only produce iterates that are nonnegative, causing the iteration to fail. +Another strategy for preserving positivity used in existing open source or commercial packages (like MATLAB) is to set negative solution components that are accepted by the step size control to zero. Unfortunately, this can have a negative impact on possible conservation properties. Further approaches in the literature include projections in between time steps [@sandu2001positive; @nusslein2021positivity], if a negative solution was computed, or it is tried to reduce the time step size as long as a nonnegative solution is calculated. Finally, strong stability preserving (SSP) methods can also be used to preserve positivity, but this is again subject to step size limitations [@gottlieb2011strong]. + +Consequently, various new, unconditionally positive schemes have been introduced in recent years, see @burchard2003, @Bruggeman2007, @Broekhuizen2008, @Formaggia2011, @Ortleb2017, @kopeczmeister2018order2, @kopeczmeister2018order3, @huang2019order2, @huang2019order3, @OeffnerTorlo2020, @Martiradonna2020, @Avila2020, @Avila2021, @Blanes2022, @Zhu2024, @Izzo2025, and @Izgin2025. Among these, most of the literature is devoted to modified Patankar--Runge--Kutta (MPRK) methods. + +Unfortunately, these new methods are not yet available in software packages, making them inaccessible to most users and limiting their comparability within the scientific community. PositiveIntegrators.jl aims at making these methods available and thus usable and comparable. + + +# Features + +PositiveIntegrators.jl is written in Julia [@bezanson2017julia] and makes use of its strengths for scientific computing, e.g., ease of use and performance. +The package is fully compatible with DifferentialEquations.jl [@rackauckas2017differentialequations] and therefore many features that are available there can be used directly. In particular, this allows a direct comparison of the provided methods and standard schemes. Moreover, it integrates well with the Julia ecosystem, e.g., by making it simple to visualize numerical solutions using dense output in Plots.jl [@christ2023plots]. + +The package offers implementations of conservative as well as non-conservative production-destruction systems (PDS), which are the building blocks for the solution of differential equations with MPRK schemes. Furthermore, conversions of these PDS to standard `ODEProblem`s from DifferentialEquations.jl are provided. + +Currently, the package contains the following methods: + +- The MPRK methods `MPE`, `MPRK22`, `MPRK43I`, and `MPRK43II` of @kopeczmeister2018order2 and @kopeczmeister2018order3 are based on the classical formulation of Runge--Kutta schemes and have accuracies from first to third order. +- The MPRK methods `SSPMPRK22` and `SSPMPRK43` of @huang2019order2 and @huang2019order3 are based on the SSP formulation of Runge--Kutta schemes and are of second and third order, respectively. +- The `MPDeC` methods of @OeffnerTorlo2020 combine the deferred correction approach with the idea of MPRK schemes to obtain schemes of arbitrary order. In the package methods from second up to 10th order are implemented. + +In addition, all implemented methods have been extended so that non-conservative and non-autonomous PDS can be solved as well. Furthermore, adaptive step size control is available for almost all schemes. + +# Related research and software + +The first MPRK methods were introduced by @burchard2003. These are the first-order scheme `MPE` and a second-order scheme based on Heun's method. To avoid the restriction to Heun's method, the second-order `MPRK22` schemes were developed by @kopeczmeister2018order2. The techniques developed therein also enabled a generalization to third-order schemes and thus the introduction of `MPRK43I` and `MPRK43II` methods by @kopeczmeister2018order3. + +The aforementioned schemes were derived from the classical formulation of Runge-Kutta methods. Using the Shu-Osher formulation instead lead to the introduction of the second-order schemes `SSPMPRK22` by @huang2019order2 and the third-order scheme `SSPMPRK43` by @huang2019order3. + +Starting from a low-order method, the deferred correction approach can be used to increase the method's approximation order iteratively. @OeffnerTorlo2020 combined deferred correction with the MPRK idea to devise MPRK schemes of arbitrary order. These are implemented as `MPDeC` schemes for orders 2 up to 10. + +The implemented methods were originally introduced for conservative production-destruction systems only. An extension to non-conservative production-destruction systems was presented by @benzmeister2015. We implemented a modification of this algorithm, by treating the non-conservative production and destruction terms separately, weighting the destruction terms and leaving the production terms unweighted. + +Readers interested in additional theoretical background, further properties of the implemented schemes, and some applications are referred to the publications of @kopeczmeister2019, @izgin2022stability1, @izgin2022stability2, @huang2023, @torlo2022, and @izginoeffner2023. PositiveIntegrators.jl was successfully applied in the work of @bartel2024structure to solve Fokker-Planck equations, ensuring the positivity of the unknown quantities. + +Existing software libraries do not have a strong focus on unconditional positivity and, to the authors' knowledge, there is no other software library offering MPRK schemes. +A common strategy to obtain nonnegative solutions used in the `PositiveDomain` callback of DifferentialEquations.jl or the commercial package MATLAB is described by @Shampine2005. In this approach negative components of approximate solutions that have been accepted by the adaptive time stepping algorithm are set to zero. +Another possibility is to reduce the chosen time step size beyond accuracy considerations until a nonnegative approximation is calculated. This can be achieved in DifferentialEquations.jl using the solver option `isoutofdomain`. + +We also mention that some papers on MPRK schemes offer supplementary codes. However, these are mainly small scripts for the reproduction of results shown in the papers and are not intended as software libraries. + + +# Acknowledgements + +JL acknowledges the support by the Deutsche Forschungsgemeinschaft (DFG) +within the Research Training Group GRK 2583 "Modeling, Simulation and +Optimization of Fluid Dynamic Applications". +HR was supported by +the German Research Foundation (Deutsche Forschungsgemeinschaft DFG, project number 513301895) and +the Daimler und Benz Stiftung (Daimler and Benz foundation, project number 32-10/22). + + +# References