<commit_before>---
title: 'pyodesys: Straightforward numerical integration of ODE systems from Python'
tags:
  - ordinary differential equations
  - symbolic derivation
  - symbolic transformations
  - code-generation
authors:
 - name: <NAME>
   orcid: 0000-0003-0596-0222
   affiliation: 1
affiliations:
 - name: KTH Royal Institute of Technology
   index: 1
date: 5 December 2017
bibliography: paper.bib
---

# Summary
The numerical integration of systems of ordinary differential equations is very
common in most scientific fields. There exists a large number of software libraries
for solving these systems, each requiring the user to write their code in slightly
different forms. And sometimes variable transformations need to be applied for the
solution to proceed efficiently. *pyodesys* enables the user to write his or her code
once, and adaptions to different libraries are handled internally.

In addition to providing a unified interface to exisiting solvers, pyodesys allows
the user to manipulate the mathematical representation symbolically. This is achieved
by using SymPy [@Meurer2017] (although the coupling is loose and other symbolic backends
may be used).


# Features
- Unified interface to ODE solvers from Sundials [@hindmarsh2005sundials], GNU Scientific Library [@galassi_gnu_2009],
  odeint in boost [@Ahnert2011]
- Convenince methods for working with solutions (plotting trajectories, interpolation, inspecting invariants).
- Automatic derivation of the jacobian matrix for use with implicit steppers.
- Symbolic variable transformations of the system of ODEs.
- Symbolic reduction of degrees of freedom by variable elimination using linear invariants.
- Symbolic rewriting of system based on (possibly approximate) analytic solutions to a subset of dependent variables.
- Code-generation (C++) and on-the-fly compilation for enhanced performance (common subexpression elimintation is
  automatically performed).
- Parallel execution: for parameter variation multiple integrations may be performed in parallel
  (using OpenMP threading model), this feature is only availble in conjuction with code-generation.

# References<commit_msg>Update text<commit_after>---
title: 'pyodesys: Straightforward numerical integration of ODE systems from Python'
tags:
  - ordinary differential equations
  - symbolic derivation
  - symbolic transformations
  - code-generation
authors:
 - name: <NAME>
   orcid: 0000-0003-0596-0222
   affiliation: 1
affiliations:
 - name: KTH Royal Institute of Technology
   index: 1
date: 5 December 2017
bibliography: paper.bib
---

# Summary
The numerical integration of systems of ordinary differential equations (ODEs) is very
common in most scientific fields. There exists a large number of software libraries
for solving these systems, each requiring the user to write their code in slightly
different forms. Furthermore, it is sometimes necessary to perform variable transformations
in order for the solution to proceed efficiently.

*pyodesys* provides a unified interface to some existing solvers. It also provides an interface
to represent their system symbolically. This allows *pyodesys* to derive the Jacobian matrix
symbolically (which is both tedious and error prone done performed manually). In addition, this
symbolic representation allows the user to manipulate the mathematical representation symbolically. This is achieved
by using SymPy [@Meurer2017] (although the coupling is loose and other symbolic backends
may be used).

*pyodesys* enables the user to write his
or her code once, and adaptions to different libraries are handled internally. This allows
the user to evaluate both different solvers (which implement different integration methods and
algorithms for step size control) and alternative formulations of the system (from variable
transformations, including scaling of variables).


# Features
- Unified interface to ODE solvers from Sundials [@hindmarsh2005sundials],
  GNU Scientific Library [@galassi_gnu_2009] and odeint in boost [@Ahnert2011]
- Convenince methods for working with solutions (plotting trajectories, interpolation, inspecting invariants).
- Automatic derivation of the Jacobian matrix for use with implicit steppers.
- Symbolic variable transformations in the system of ODEs.
- Symbolic reduction of degrees of freedom by variable elimination using linear invariants.
- Symbolic rewriting of system based on (possibly approximate) analytic solutions to a subset of dependent variables.
- Code-generation (C++) and on-the-fly compilation for enhanced performance (common subexpression elimintation is
  automatically performed).
- Parallel execution for parameter variations. Multiple integrations may be performed in parallel
  (multithreading using OpenMP), this feature is only availble in conjuction with code-generation.

# References
{'fraction_non_alphanumeric': 0.045219905017551104, 'fraction_numerical': 0.016105719595292174, 'mean_word_length': 5.09308176100629, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4469391', 'n_tokens_mistral': 1231, 'n_tokens_neox': 1093, 'n_words': 609}