|
|
|
|
||
|
DEFINITION MODULE TabFunc; (******************************************************************* Module TabFunc (Version 1.0) Copyright (c) 1989-2006 by Olivier Roth, Dimitrios Gyalistras, Frank Thommen and ETH Zurich. Purpose Interpolate/extrapolate functions defined by a table of values. Remarks -- Programming Programming o Design Olivier Roth 30/08/1989 o Implementation Olivier Roth 30/08/1989 Dimitrios Gyalistras 20/09/1990 Frank Thommen 30/04/1991 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: 09/03/1992 DG *******************************************************************) FROM Matrices IMPORT Matrix; TYPE TabFUNC; ExtrapolMode = (lastSlope, horizontally); TabFProc = PROCEDURE( VAR TabFUNC ); VAR notExistingTabF: TabFUNC; (* read only! *) (* used to initialize variables of the type TabFUNC *) PROCEDURE DeclTabF( VAR t : TabFUNC; xx, yy : ARRAY OF REAL; NValPairs : INTEGER; modifiable : BOOLEAN; tabName, xName, yName, xUnit, yUnit : ARRAY OF CHAR; xMin, xMax, yMin, yMax : REAL ); (* Allows to declare a function table for later linear interpolation (see procedures Yi and Yie). Such table functions may be declared modifiable what means that they may be edited with a special editor. A new menu "TabFuncs" is added to the already existing menus when the first table function is declared. If the table function already exists, then the user is warned and the table is NOT changed. Explanations of parameters: The variable t is used to identify and update the table function values and parameters (therefore don't modify it!). The vector xx defines the independent and yy the dependent values of the table function being defined. The variable NValPairs has to contain the number of elements of the vectors xx and yy which hold a value. The table functions may be modified by means of an editor if the boolean variable modifiable is set TRUE. For identification and later use the table function and the axes variables can be named through the variables tabName, xName and yName. The variables xUnit and yUnit contain unit descriptor of each axis. The last four parameters (xMin, xMax, yMin, yMax) define the valid range for each axis's values. Please note that the xx vector must be given sorted ascendingly, otherwise the program will halt execution! By default table functions are declared with extrapolation mode lastSlope. Use procedure DefineExtrapolationMode to change to another extrapolation mode. Short description of the table function editor: ---------------------------------------------- When a table function is declared a new menu "TabFuncs" is automatically added to the already existing menus. This menu offers three commands: "Edit/View table function…", "Reset table function…" and "Reset all table function". The "Edit..." command changes its text according to the types of table functions that have sofar been declared: "Edit/View table function…": modifiable AND not modifiable table functions have been declared "Edit table function…" : only modifiable table functions have been declared "View table function…" : only not modifiable table functions have been declared Selection of the "Edit..." command displays a dialog box in which you may select one of the sofar declared tables to edit or view. Pressing the "OK" button invokes the table function editor, whereas "Cancel" will lead you back to the same situation as before. The table function editor will build up a new window titled "Table Function Editor" and show the table at the right, a graph of the table at the left and four pushbuttons at the bottom of the window. The values of the table may now be altered in the corresponding fields or by dragging the circled points with the mouse (regular click allows to drag vertically, option-click allows to drag horizontally). Please note that the values are checked to be in the defined range and that the x-values must be sorted ascendingly. At left and at right of the graph a small blue line indicates the direction of the extrapolation of the table function. If an unmodifiable table function (not marked by a "•" in the list) has been chosen, then no circled points appear and the values are not written in fields, therefore it's not possible to change any data in these table functions. Only one pushbutton appears. The following actions take place after a click into a pushbutton: Close : Remove the table function editor window. If any editing action has been executed since last saving (Use-pushbutton, see below), then you are asked wether you want to use or to discard the chan- gings. Initial : The initially defined values, i.e. the values used to declare the table function, are activated again (can be cancelled). Draw : Update the graph of the table. Use : Store the edited values. Const : The top x-value is copied to all other x-values and the graph redrawn. This allows to declare quickly a constant table function. Selection of the "Reset..." command displays a dialog box in which you may select one of the sofar declared modifiable tables to reset. Pressing the "OK" button resets the specified table function to its originally defined values. This action does not display any warning messages nor is it undoable. The "Cancel" will lead you back to the same situation as before whithout doing any resettings. Selection of the "Reset all..." command resets all of the sofar declared modifiable table functions to its originally defined values. This action does neither display any warning messages nor is it undoable. *) PROCEDURE DeclTabFM( VAR t : TabFUNC; xyVecs : Matrix; modifiable : BOOLEAN; tabName, xName, yName, xUnit, yUnit : ARRAY OF CHAR; xMin, xMax, yMin, yMax : REAL ); (* the same procedure as DeclTabF but using a matrix to pass the data to the module. *) PROCEDURE RemoveTabF( VAR t: TabFUNC ); (* Allows to remove a function table of type TabFUNC and free the memory it allocated. If the last table function is removed then the menu "TabFuncs" will also be removed. *) PROCEDURE SetTabF( t : TabFUNC; xx, yy : ARRAY OF REAL; NValPairs : INTEGER; modifiable : BOOLEAN; tabName, xName, yName, xUnit, yUnit : ARRAY OF CHAR; xMin, xMax, yMin, yMax : REAL ); (* All parameters associated with the table function variable t may be changed to another value. This procedure allows to do this. Please note that the declared index range of the two vectors xx and yy may not be greater than those used for the originally declared and NValPairs must match EXACTLY NValPairs used for declaration of the table function! *) PROCEDURE GetTabF( t: TabFUNC; VAR xx, yy : ARRAY OF REAL; VAR NValPairs : INTEGER; VAR modifiable : BOOLEAN; VAR tabName, xName, yName, xUnit, yUnit : ARRAY OF CHAR; VAR xMin, xMax, yMin, yMax : REAL ); (* All parameters associated the table function variable t may be read whith the help of that procedure. *) PROCEDURE SetTabFM( t : TabFUNC; xyVecs : Matrix; modifiable : BOOLEAN; tabName, xName, yName, xUnit, yUnit : ARRAY OF CHAR; xMin, xMax, yMin, yMax : REAL ); PROCEDURE GetTabFM( t: TabFUNC; VAR xyVecs : Matrix; VAR modifiable : BOOLEAN; VAR tabName, xName, yName, xUnit, yUnit : ARRAY OF CHAR; VAR xMin, xMax, yMin, yMax : REAL ); (* The matrix versions of the Set/GetTabF procedures with the exception, that the dimensions of the new matrix doesn't have to match the dimensions of the originally used matrix. For more explanations see above. *) PROCEDURE EditTabF ( t: TabFUNC ); PROCEDURE ResetTabF( t: TabFUNC ); (* these procedures allow for invoking the tableFunction Editor for a specified TabFUNC *) PROCEDURE FreezeEditorGraphBounds(VAR t:TabFUNC; xMin, xMax, yMin, yMax: REAL); (* Allows to fix the extremas of the axes in the graph of the table function editor. By default the axes' extremas are adjusted to the current maximal and minimal values given by the table function. *) PROCEDURE UnfreezeEditorGraphBounds( VAR t:TabFUNC ); (* Removes the fixing of the axes in the editor. *) PROCEDURE DefineExtrapolationMode( VAR t:TabFUNC; extrapolation:ExtrapolMode ); (* Sets the extrapolation mode of the table t: horizontally: extrapolation returns the y value of the first/last defined x/y pair lastSlope : extrapolation is done by elongating the first/last section of the graph. By default table functions are declared with extrapolation mode lastSlope. *) PROCEDURE ExtrapolationMode( t:TabFUNC ): ExtrapolMode; (* Returns the extrapolation mode of the table. *) PROCEDURE Yi ( t: TabFUNC; x: REAL ): REAL; (* Returns the y value at x defined by the linear interpolation of the previously defined table function t (TYPE TabFUNC). NO extrapolation is allowed, i.e. the program will halt execution if it should occurr! *) PROCEDURE Yie( t: TabFUNC; x: REAL ): REAL; (* Returns the y value at x defined by the linear interpolation of the previously defined table function t (TYPE TabFUNC). Extrapolation is allowed and will return the last defined y values. *) PROCEDURE DoForAllTabF( p: TabFProc ); (* Calls procedure p for all table functions currently declared. Be careful when using this procedure, since it allows to access also table functions which may not belong to the caller. *) END TabFunc.
|
||
|
|
|