GLIMDA is a solver for nonlinear index-2 DAEs f(q’(t,x),x,t)=0.
Details about the implementation (FORTRAN) can be found in the PhD dissertation:
General Linear Methods for Integrated Circuit Design
Author: Steffen Voigtmann
Import the solver together with the correct problem:
from assimulo.solvers import GLIMDA
from assimulo.problem import Implicit_Problem
Define the problem, such as:
def res(t, y, yd): #Note that y and yd are 1-D numpy arrays.
res = yd[0]-1.0
return N.array([res]) #Note that the return must be numpy array, NOT a scalar.
y0 = [1.0]
yd0 = [1.0]
t0 = 1.0
Create a problem instance:
mod = Implicit_Problem(res, y0, yd0, t0)
Note
For complex problems, it is recommended to check the available examples and the documentation in the problem class, Implicit_Problem
. It is also recommended to define your problem as a subclass of Implicit_Problem
.
Warning
When subclassing from a problem class, the function for calculating the right-hand-side (for ODEs) must be named rhs and in the case with a residual function (for DAEs) it must be named res.
Create a solver instance:
sim = GLIMDA(mod)
Modify (optionally) the solver parameters.
Parameters:
atol
Defines the absolute tolerance(s) that is to be used by the solver.backward
Specifies if the simulation is done in reverse time.clock_step
Specifies if the elapsed time of an integrator step should be timed or not.display_progress
This option actives output during the integration in terms of that the current integration is periodically printed to the stdout.inith
This determines the initial step-size to be used in the integration.maxh
Defines the maximal step-size that is to be used by the solver.maxord
Maximum order to be used (1-3).maxretry
Defines the maximum number of consecutive number of retries after a convergence failure.maxsteps
The maximum number of steps allowed to be taken to reach the final time.minh
Defines the minimum step-size that is to be used by the solver.minord
Minimum order to be used (1-3).newt
Maximum number of Newton iterations.num_threads
This options specifies the number of threads to be used for those solvers that supports it.order
Determines if GLIMDA should use a variable order method (0) or a fixed order method (1-3).report_continuously
This options specifies if the solver should report the solution continuously after steps.rtol
Defines the relative tolerance that is to be used by the solver.store_event_points
This options specifies if the solver should save additional points at the events, \(t_e^-, t_e^+\).time_limit
This option can be used to limit the time of an integration.verbosity
This determines the level of the output.
Simulate the problem:
Information:
GLIMDA.get_options()
Returns the current solver options.GLIMDA.get_supports()
Returns the functionality which the solver supports.GLIMDA.get_statistics()
Returns the run-time statistics (if any).GLIMDA.get_event_data()
Returns the event information (if any).GLIMDA.print_event_data()
Prints the event information (if any).GLIMDA.print_statistics()
Prints the run-time statistics for the problem.