[Scilab-users] Sundials ode solvers
Stéphane Mottelet
stephane.mottelet at utc.fr
Wed Oct 27 17:13:38 CEST 2021
Hi David,
Le 27/10/2021 à 16:18, CHEZE David 227480 a écrit :
>
> Hi Stéphane,
>
> I tested the cvode_solve() function in my case study cited below and
> it actually ran 40% faster than the previous ode(‘stiff’,…), with easy
> one-to-one function’s parameters replacement (in my case including the
> list syntax, with function’s multiple parameters, gradient function,
> simple tolerance specifications).
>
> As you advised, I need to investigate moving the differential equation
> code from Scilab to fortran external function to reduce further the
> simulation time.
>
As I already said, only the right hand side would need to be translated.
S.
> Thank you for this new module, staying updated with Sundials !
>
> Best,
>
> David Chèze
>
> tel. +33(0)479792130 – CEA ☼ INES – LITEN/DTS/SIRE/LELA – Le Bourget
> du Lac (73), FRANCE – bât. HELIOS/3108 Liten.cea.fr <Liten.cea.fr>
>
> *De :*users <users-bounces at lists.scilab.org> *De la part de* Stéphane
> Mottelet
> *Envoyé :* lundi 25 octobre 2021 16:35
> *À :* Users mailing list for Scilab <users at lists.scilab.org>
> *Objet :* [Scilab-users] Sundials ode solvers
>
> Hi all,
>
> As discussed in this thread last month
>
> https://www.mail-archive.com/users@lists.scilab.org/msg10679.html
> <https://antispam.utc.fr/proxy/v3?i=WjB4M1dJWGJJMnNGTHV5MuAPDwEdQko7KGyaWIIeme0&r=Skk2OVhvdXl2cm1uOWJtRLRPDrgr4YiCABksjbHu_Gv8eNkcUiMzd6MxV8KbAPI5&f=M2FwZHlGNnU1aUlkc09ZNN6FtQAZUfRagBYPQiUfaoT45ZkXHKKVm0cOGvv2yMCS&u=https%3A//www.mail-archive.com/users%40lists.scilab.org/msg10679.html&k=CXOq>
>
> I am glad to annouce that a first version of the sci-sundials toolbox
> (maybe part of Scilab in the future) is available on Atoms in the
> "Differential Equations" category (refresh the package list if you
> don't see it). To have an idea of its features I pasted below the
> content of the README.md file on the gitlab project of sci-sundials
> (https://gitlab.com/mottelet/sci-sundials/
> <https://antispam.utc.fr/proxy/v3?i=WjB4M1dJWGJJMnNGTHV5MuAPDwEdQko7KGyaWIIeme0&r=Skk2OVhvdXl2cm1uOWJtRLRPDrgr4YiCABksjbHu_Gv8eNkcUiMzd6MxV8KbAPI5&f=M2FwZHlGNnU1aUlkc09ZNN6FtQAZUfRagBYPQiUfaoT45ZkXHKKVm0cOGvv2yMCS&u=https%3A//gitlab.com/mottelet/sci-sundials/&k=CXOq>).
>
> If you appreciate the work and want to help, doc, demos, or even more
> if you know how to code in C and C++ you are welcome !
>
> S.
>
>
> What has been done and what is to be done
>
> Until now only CVODE has been interfaced but many common features have
> been developped in the OdeManager class, hence interfacing IDA will be
> quite easy. ARKODE (various modern explicit, implicit and mixed
> explicit/implicit Runge-Kutta solvers) does not exist in the old 2.4.0
> version of Sundials which is used in Scilab hence won't be interfaced
> unless an upgrade is done (Sundials is now at version 5.7.0). The
> support of Sparse Jacobians is also missing for the same reason.
>
>
> Features
>
> The CVODE gateway cvode_solve() implements the following features
> which were missing by the legacy LSODE/LSODA/LSODAR/... ode() gateway :
>
> * full a posteriori access to solver continuous extension of
> solution at arbitrary points via a MList output when only one lhs
> is given:
>
> sol = cvode_solve(f, [t0 tf], y0)||
> t = linspace(t0, tf, 1000)||
> plot(t, sol(t))
>
> The |sol| MList fields gathers all information related to the obtained
> solution (time steps, solution at time steps, events, ...). The solver
> can be restarted by giving the MLlist as first argument to
> |cvode_extend| :
>
> sol2 = cvode_extend(sol, tx, ...)
>
> where |tx| is the time point to which solution has to be extended. The
> options of the call that yielded |sol| are used and can be changed as
> optional named parameters after |tx|.
>
> * a user-friendly access to solver options via optional named
> parameters in cvode_solve call, i.e.
>
> cvode_solve(f, tspan, y0, h0=0.01, rtol=1e-3)
>
> * a really simpler way to give time span of integration allowing to
> choose between error driven solver internal time steps and user
> fixed time steps, i.e.
>
> [t,y] = cvode_solve(f, [t0 tf], y0)||
> [t,y] = cvode_solve(f, [t0 t1 ... tf], y0)||
> [t,t] = cvode_solve(f, tspan, y0, t0=0)
>
> the latter style being the closest to actual |ode()| behavior where
> solution is by default given at user time steps and |t0| is not
> necessarily equal to |tspan(1)|, which is the default in the two
> former calls above.
>
> * a better and user-friendly specification of events via a variable
> number of outputs event function (giving value of event equations,
> wheter to stop integration for a given event and event direction
> selection), minimal style beeing a single output. Information
> about events is also simpler to get:
>
> function [eq,term,dir] = evfun(t,y)||
> eq = y(1)-1.7;||
> term = %f;||
> dir = 1;||
> end||
> [t,y,te,ye,ie] = cvode_solve(f, tspan, y0, events = evfun)||
> sol = cvode_solve(f, tspan, y0, events = evfun)
>
> in the latter call information about events is recovered in
> |sol.te,sol.ye,sol.ie|.
>
> * support of complex solution with detection of complexity in |y0|
> or |f(t0,y0)|, e.g.
>
> function out = crhs(t,y)||
> out = 10*exp(2*%i*%pi*t)*y;||
> end||
> [t,y] = cvode_solve(crhs, [0,5], 1)||
> plot(t,real(y),t,imag(y))
>
> * Support of a callback function called after each successfull step,
> giving access to current solver statistics and allowing to stop
> integration (e.g. by a "stop" button on a GUI), e.g.
>
> function stop = scicallback(t,y,flag,stats)||
> stop = %f||
> if flag == "step"||
> mprintf("%s : hlast=%g\n", flag, stats.hlast)||
> end||
> end||
> [t,y] = cvode_solve(f, tspan, y0, intcb=scicallback);
>
> * support of an arbitrary number of dimensions of ode state
>
>
> Performance
>
> |cvode_solve()| is roughly two times faster than |ode()| for both
> fixed methods (Adams and BDF). As |ode()| already did, compiled and
> dynamically linked C,C++ or Fortran externals are supported by
> |cvode_solve()|. When using such externals instead of Scilab functions
> |cvode_solve()| is generally an order of magnitude faster.
>
> --
> Stéphane Mottelet
> Ingénieur de recherche
> EA 4297 Transformations Intégrées de la Matière Renouvelable
> Département Génie des Procédés Industriels
> Sorbonne Universités - Université de Technologie de Compiègne
> CS 60319, 60203 Compiègne cedex
> Tel : +33(0)344234688
> http://www.utc.fr/~mottelet <https://antispam.utc.fr/proxy/v3?i=WjB4M1dJWGJJMnNGTHV5MuAPDwEdQko7KGyaWIIeme0&r=Skk2OVhvdXl2cm1uOWJtRLRPDrgr4YiCABksjbHu_Gv8eNkcUiMzd6MxV8KbAPI5&f=M2FwZHlGNnU1aUlkc09ZNN6FtQAZUfRagBYPQiUfaoT45ZkXHKKVm0cOGvv2yMCS&u=http%3A//www.utc.fr/~mottelet&k=CXOq>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> https://antispam.utc.fr/proxy/v3?i=WjB4M1dJWGJJMnNGTHV5MuAPDwEdQko7KGyaWIIeme0&r=Skk2OVhvdXl2cm1uOWJtRLRPDrgr4YiCABksjbHu_Gv8eNkcUiMzd6MxV8KbAPI5&f=M2FwZHlGNnU1aUlkc09ZNN6FtQAZUfRagBYPQiUfaoT45ZkXHKKVm0cOGvv2yMCS&u=http%3A//lists.scilab.org/mailman/listinfo/users&k=CXOq
--
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20211027/d91a6de1/attachment.htm>
More information about the users
mailing list