ETHZ_Logo RAMSES_Logo_Right   RAMSES   RAMSES_Logo_Left Systems Ecology  
Start    search button      Modules:   A-Z   Function   Layer        QuickRefs:   DM   AuxLib   AuxLibE   SciLib   EasyMW   MW   ISIS   RMSLib

DEFINITION MODULE SimLib0;

  (*******************************************************************

    Module  SimLib0     (Version 1.0)

      Copyright (c) 1986-2006 by Markus Ulrich and ETH Zurich.

    Purpose   Basic procedures for the integration of systems of
              differential or difference equations.

    Remarks   Three integration methods for differential
              (Euler-Cauchy, Heun and Runge-Kutta 4th-order)
              and one for discrete systems can be selected .
              A discrete or continuous system described by
              difference or differencial equations packed in a
              procedure can be installed.


    Programming

      o Design
        Markus Ulrich             15/04/1986

      o Implementation
        Markus Ulrich             15/04/1986


    ETH Zurich
    Systems Ecology
    CHN E 35.1
    Universitaetstrasse 16
    8092 Zurich
    SWITZERLAND

    URLs:
        <mailto:RAMSES@env.ethz.ch>
        <http://www.sysecol.ethz.ch>
        <http://www.sysecol.ethz.ch/SimSoftware/RAMSES>


    Last revision of definition:  15/04/1986  MU

  *******************************************************************)


(********************************)
(*  General parameters          *)
(********************************)

  CONST  nmax = 10;
         (* maximal model order*)

  TYPE  EquationProcedure = PROCEDURE(VAR ARRAY OF REAL, VAR ARRAY OF REAL);

  VAR time: REAL;

  PROCEDURE InstallModel(m:EquationProcedure);
    (* This procedure installs a procedure, which must contain the
       differential/difference equations of the model. All subsequent
       actions performed by SimLib0, especially the procedure "Integrate",
       are undertaken with these model equations.

       The procedure m has to be organized in the following way:
       The first parameter (x: ARRAY OF REAL) represents the state
       vector (the array of all state variables). With these values, the
       procedure m should calculate all deviations (dx/dt) (continuous) or
       all x(k+1) (discrete) and return them as the second parameter of the
       procedure (dx: ARRAY OF REAL).

       Example for m:

       PROCEDURE TheModel(VAR x,dx: ARRAY OF REAL);
       BEGIN
         dx[1]:= x[1] - 0.5 * x[2];
         dx[2]:= -0.1 * x[2];
       END TheModel;
       ...
       InstallModel(TheModel);
    *)

(********************************)
(*    Integration               *)
(********************************)

  TYPE IntegrationMethod = (Euler, Heun, RungeKutta4, DiscreteTime);

  PROCEDURE SetIntegrationMethod(m:IntegrationMethod);

  PROCEDURE GetIntegrationMethod(VAR m:IntegrationMethod);

  PROCEDURE SetIntegrationStep(step: REAL);

  PROCEDURE GetIntegrationStep(VAR step: REAL);


  TYPE IntegrationProc = PROCEDURE(VAR ARRAY OF REAL, VAR ARRAY OF REAL);

  VAR Integrate: IntegrationProc;
    (* a) Heun, Euler, or Runge-Kutta method installed:
          Given the state vector x[time] as the first parameter, this
          procedure calculates the new state vector s[time+step], and returns
          it as the second parameter. Time is automatically updated
          (time:= time+step;).

       b) DiscreteTime method installed:
          Given x[k] as the first parameter, this procedure calculates the
          new state vector x[k+1] and returns it as the second parameter.
          Time, representing k, is incremented by 1.
          Integration step procedures have no effect on that method.

       "Integrate" acts on the currently installed model.
    *)


END SimLib0.

  Contact RAMSES@env.ethz.ch Last updated: 25-Jul-2011 [Top of page]