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 StructModAux;

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

    Module  StructModAux     (Version 1.3)

      Copyright (c) 1994-2006 by Andreas Fischlin and ETH Zurich.

    Purpose   Utilities for working with structured
              ModelWorks models.

    Remarks   This module imports from the ModelWorks client
              interface.

              Implementation restriction:  Assumes a single
              Master Model Definition Program (MDP), i.e. it can
              not support simultaneously more than one MDP!


    Programming

      o Design
        Andreas Fischlin          04/01/1994

      o Implementation
        Andreas Fischlin          04/01/1994


    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:  11/06/1998  AF

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


  FROM DMMenus IMPORT Menu, Command;
  FROM SimBase IMPORT MWWindowArrangement;

  TYPE
    StructModelSet = BITSET;
    BooleanFct = PROCEDURE (): BOOLEAN;


  VAR
    customM: Menu; (* may be used to install more commands *)
    chooseCmd: Command;


  PROCEDURE InstallCustomMenu(title, chooseCmdTxt, chooseAlChr: ARRAY OF CHAR);
  (*
    Installs a menu with the title 'title', and as the first
    command (i.e. 'chooseCmd') a command with the text
    'chooseCmdTxt'.  The latter menu command is associated with
    procedure 'ChooseModel' and can also be activated with the
    alias char (keyboard equivalent) 'chooseAlChr'.

    Typical usage:  InstallCustomMenu("Models","Activation…","L");
                    executed from within a InitSimEnv procedure.

    See also example at the end of this definition!
  *)

  PROCEDURE ChooseModel;
  (*
    'ChooseModel' is the procedure associated with the menu command
    'chooseMCmd' which allows the simulationist to activate
    previously installed sub models (see procedure
    'AssignSubModel') dynamically.  Note that this routine
    calls implicitely 'SetSimEnv'.
  *)



  PROCEDURE AssignSubModel(VAR which: INTEGER; descr: ARRAY OF CHAR;
                           act,deact: PROC; isact: BooleanFct);
  (*
    Installs a sub model with the descriptor 'descr' and uses
    the routines 'act', 'deact' respectively 'isact' to
    activate or deactivate respectively to investigate the
    current presence of the sub model.  Upon successful assign
    the submodel gets the number 'which'; use it when calling
    procedure 'SetSimEnv', e.g.  to denote those submodels you
    want to be active by default.  NOTE: Implementation
    restriction, only up to a maximum of 16 sub models can be
    assigned.  Submodels can't be deassigned individually,
    unless they have been assigned by a subprogram level which
    is to be terminated.  In the latter case this module
    automatically deassignes any disappearing submodel.  There
    is one exception: Routine DeassignAllSubModels (see below)
    can deassign all currently installed submodels, allowing
    for a reinstallation from scratch.
  *)


  PROCEDURE InstallMyGlobPreferences(myPrefs: PROC);
  (*
    Installs routine 'myPrefs' which is used to define defaults of
    global parameters such as default window positions (e.g. by a
    call to routine 'PlaceGraphOnSuperScreen') or global simulation
    parameters (e.g. by a call to the routine 'SetDefltGlobSimPars'
    from module 'SimBase').
  *)

  PROCEDURE SetSimEnv(sms: StructModelSet);
  (*
    Sets the defaults (i.e. executes the previously installed
    routine 'myPrefs' whenever needed) and activates all the models
    specified in 'sms' according to the sequence in which
    sub models were installed by calls to the routine 'AssignSubModel'.
  *)

  PROCEDURE GetSysConfig(VAR sms: StructModelSet);
  (*
    Returns the current system configuration in sms by calling
    for all known submodels its isact routine.
  *)

  PROCEDURE DeassignAllSubModels;
  (*
    Discards all submodel assignments at once.  This allows for
    a reinstallation of a new set of submodels.
  *)


  (* ========================================================================

    Typical example of a master module collecting several sub models by
    means of above routines:
      ...
      ...

      VAR
        atmos, bios, obs: INTEGER;

      PROCEDURE InitSimEnv;
      BEGIN
        InstallCustomMenu("Models","Activation…","L");
        SetSimEnv({atmos,obs}); (* default activation *)
      END InitSimEnv;

      PROCEDURE SetMyGlobPreferences;
      BEGIN
        SetDefltGlobSimPars(1900.0, 2300.0, 0.5, 0.0001, 1.0, 10.0);
        PlaceGraphOnSuperScreen(tiled);
      END SetMyGlobPreferences;


    BEGIN (* body MyMaster *)
      InstallMyGlobPreferences(SetMyGlobPreferences);
      AssignSubModel(atmos, atmosModelDescr,
                     ActivateAtmosModel, DeactivateAtmosModel, AtmosModelIsActive);
      AssignSubModel(bios,  biosModelDescr,
                     ActivateBiosModel, DeactivateBiosModel, BiosModelIsActive);
      AssignSubModel(obs,   obsModelDescr,
                     ActivateObsModel, DeactivateObsModel, ObsModelIsActive);
      RunSimEnvironment( InitSimEnv );
    END MyMaster;

  ======================================================================== *)


END StructModAux.

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