AT) Details concerning the DESL
equation command.During a typical DESL session a series of Fortran-like equations and logic can be executed on each named file's qualifying incoming SIF DATA-type records. Each record not "voided" is modified appropriately and is added to a corresponding new SIF file.
The following text explains the rules governing the syntax of the Fortran-like statements which can be included in a file referenced by either "eqfile" or "eqfilen" :
local alpha2 temp1 temp5 thru temp12
where at least "temp" is implied to be a dimensioned array.
**************** Local variable values are reset to this value ONLY once per SIF file processed. SIF variable values are, however, reset to this value EACH time a SIF DATA-type record is read. ****************
abs acos aint anint asin atan cos cosh exp log log10 sin sinh sqrt tan tanh sind cosd tand asind acosd atand
where the functions "sind", "cosd", "tand", "asind", "acosd", and "atand" are equivalent to their non-"d" counterparts except that these functions use arguments/produc results in degrees rather that radians.
The following special functions are also legitimate :
integ deriv table reg date time
Use of each of these special functions is described below :
Up to 50 occurrences of "integ" can exist in the ENTIRE set of equations. These up-to-50 integ uses can reference any one of up to 20 different integrals. All ARGUMENTS EXCEPT THE FIRST ARE OPTIONAL. An illegal argument type (string where value belongs, or value where string belongs) serves to NOT reset the default string or value for that argument. Definitions of the arguments are the following :
Up to 50 occurrences of "deriv" can exist in the ENTIRE set of equations. These up-to-50 deriv uses can reference any one of up to 20 different derivative sets. ALL ARGUMENTS EXCEPT THE FIRST ARE OPTIONAL. An illegal argument type (string where value belongs, or value where string belongs) serves to NOT reset the default string or value for that argument. Definitions of the arguments are the following :
| . |
(Begin modifications on 052102)
Up to 200 occurrences of "table" can exist in the ENTIRE
set of equations. These up-to-200 table uses can reference
any one of up to 200 different tables.
(End modifications on 052102) |
If a reference is made to a one-dimensional table at least two arguments MUST be specified. If a reference is made to a two-dimensional table at least three arguments MUST be specified. The "ordr1"/"ordr2" arguments are OPTIONAL. An illegal argument type (string where value belongs, or value where string belongs) serves to NOT reset the default string or value for that argument. The string "null" can be used for "ordr1" to effectively SKIP the reset from the default interpolation order. Definitions of the arguments are the following :
Via this function, the value currently contained in any one of 99 "value" registers (see "register" command) can be referenced.
Via this function, the current date as the real number hhmmss, where hh is hours, mm is minutes and ss is seconds, can be set.
Via this function, the current time as the real number mmddyy, where mm is month, dd is day and yy is year, can be set.
There are two basic methods to specify an array's dimension and thereby the form of the suffix(s) to be attached to the array's base name to give the true variable name(s). The following example of a dimension statement serves to illustrate this point :
dimension w(10) x(1>10) y(01>19) z(005>123)The form of the dimension for the array variable "w" implies that the local or SIF names which can be referenced are of the form "W1", "W2", ... , "W10"; ie, the suffix on the base name "W" is, in each case, the minimum number of digits needed to represent the desired variable name.
The form of the dimension for the array variable "x" implies the same thing as did the form of the dimension on "w". In this case, however, the ability to dimension a variable from an index greater than 1 to some maximum value, is illustrated. The usefulness of such a style of dimensioning lies in the fact that, since variable names are derived from the dimensions of that variable, there may be cases when it is desired to match a sequence of SIF names which do not naturally occur in a suffix sequence beginning with 1, 01, etc.
The form of the dimension for the array variable "y" implies that the local or SIF names which can be referenced are of the form "Y01", "Y02", ... , "Y19"; ie, the suffix on the base name "Y" is, in each case, two digits, as implied by the two-digit starting dimension value of 01; ie, the form of the FIRST dimension value, if there are two, defines the style of suffix to be generated and added to the array's base name.
The form of the dimension for the array variable "z" implies that the local or SIF names which can be referenced are of the type "Z005", "Z006", ... , "Z123"; ie, the suffix on the base name "Z" is, in each case, three digits, as implied by the three-digit starting dimension value of 005. Note, however, in this example, dimensioning does not begin with 001; "Z001" --> "Z004" are NOT referenceable as elements of the array "Z".
In either manner in which array variables are named, the resulting name CANNOT be more than 8 characters long. If the construction of an array "element" name attempts to force a name which is greater than 8 characters long, the "base" name of the array will be truncated to a length which can have the appropriate numeric suffix added and still be no more than 8 characters long. If name truncation occurs, it will be reported.
"Dimension" lines can appear anywhere in the equation file except as an interruption to a continued equation.
initial x 1 1.02 3.94 4.05 5.55 2.443
Here, the array "x" will have elements 1 through 5 (because there are 5 values and the beginning element is 1) set to the values 1.02 3.94 ... 2.443, respectively.
The second form of the "initial" statement allows the user to assign more than one element of an array to a constant value without having to explicitly specify that value more than one time. An example of such a form is as follows :
initial y 1 5 at 3.9 15 at 4.1 initial y 21 10 at 5.5Here, the array "y" will have elements 1 through 5 set to 3.9, elements 6 through 20 set to 4.1, and elements 21 through 30 set to 5.5.
"Initial" lines can appear anywhere in the equation file except as an interruption to a continued equation.
do #1 to #2 by #3where #1 is the beginning index value, #2 is the ending index value, and #3 is an optional index step increment value. The The item "by" is ONLY required if a step value is specified. The default step value is +1. If a negative step is specified, and appropriate beginning and ending loop indices are also specified, decrementation can be made to occur. The cases of the items "do", "to", and "by" are not significant.
Each DO loop is ended with a line of the form :
enddoThe case of "enddo" is not significant.
Between the beginning and end of a DO loop, one or more equations should appear. Within equations inside a DO loop are the ONLY locations, other than in an "initial" statement, where elements of arrays can be defined. When definition or use of an array element occurs in an equation inside a DO loop, the array variable is referenced WITHOUT any type of explicitly-named subscript; the subscript is assumed to be the same as the DO loop index.
The current DO loop index is available for use by the user. It is stored in the System Value register 11 (*V11). It is referenceable via the use of the function : "reg(11)".
DO loops CANNOT be nested.
DO loops can, however, be contained within IF THEN ELSE ENDIF blocks. See (22) below.
statement(s)
else
statement(s)
endif
These constructs are similar to those in Fortran-77 with a few important differences :
.eq. .lt. .le. .ge. .gt. .ne.
The following are examples of legitimate "conditions" as they would appear in an IF or IF/THEN statement :
(1) if(point.gt.4) go to 50 (2) if(point.gt.4 .and. point.le.120) then (3) if (alpha.gt.0.3 .or. alphw.lt.-3.4 .and. point.lt.13) then
IF and/or IF THEN ELSE ENDIF structures CANNOT be nested. They can, however, be contained within a DO loop.
If "debug" is desired and an "object" file is to be produced then the object file WILL be produced.
Any names enclosed in brackets are required or are in a set of options, one of which must be specified. Any non-blinking names enclosed in brackets are optional or are in a set of options, only one of which can be specified.
In cases where the option name is one of a set each different set number is indicated by a red numeric set number superscript trailing the respectiveright bracket :
ATadd)
(Command :equation) Details for the add option.Example : add >
ATaltvars)
(Command :equation) Details for the altvars option.
ATbackward)
(Command :equation) Details for the backward option.
ATcfiles)
(Command :equation) Details for the cfiles option.The primary intent of the capability provided via "cfiles" is to allow the inclusion of information which is considered to be CONSTANT; ie, information which would normally be the SAME in ALL SIF DATA records read. An example of this type of data would be pressure port location information.
If specified, and an adjunct file is found and is of a type consistent with the "cfrom" specified or default file type specifier, the contents of the NAMEs record and the FIRST DATA record on the named "cfiles" file is effectively merged into the NAMEs and DATA records, respectively, to result in read SIF records which are as if they had contained the adjunct information originally. Up to 1000 SIF items can be added from an adjunct file.
Example : cfiles add1 add2
ATcfrom)
(Command :equation) Details for the cfrom option.Example : cfrom ffsif sif rep 3 ffsif
ATcpaths)
(Command :equation) Details for the cpaths option.Example : cpaths ..\ ..\Main\ sub1\
ATcset)
(Command :equation) Details for the cset option.
The item immediately following "cset" is the file sequence number in the "files" list for which the following up-to-20 conditions will be applicable.
Each file-specific 3-item condition, like its global 3-item condition counterpart, is made up of (1) a SIF variable name, (2) a 2-character logical conjunction, and (3) a second SIF variable name or a constant.
Example : cset 3 alpha gt phi mach lt 1.2
Here, the user has indicated that, along with whatever
other GLOBAL conditions may have been specified, the
pertinent DESL function, for the THIRD file specified
or implied by the "files" list, will have its application
ALSO limited to records which satisfy BOTH of the two
conditions :
All file-specific conditions are implicitly joined by
an "and" conjunction; ie, by default, all file-specific
conditions would have to be true SIMULTANEOUSLY for
the applicable record to be retained.
If one or more file-specific conditions following
the file sequence number is to be connected to other
file-specific conditions for the same file number by
an "or" conjunction, then the 2-character item "or"
must immediately follow the file number.
Example : cset 2 or alpha lt 0 alpha gt 4
Here, the user has indicated that, along with whatever
other GLOBAL conditions may have been specified, the
pertinent DESL function, for the SECOND file specified
or implied by the "files" list, will have its application
ALSO limited to records in which the value of the SIF
variable "alpha" satisfies at least ONE of the conditions :
Additionally, if the file number following the "cset"
option is negative, the absolute value of this negative
file number is used for the actual file number and the
associated "and" or "or" condition(s) are NOT used in the
traditional sense of filtering the records read but
are ONLY used to indicate when READING of the associated
file is to STOP. This ability is useful in preventing
the reading of a long file when it is known that the
data required is relatively near the beginning of the
file.
Example : cset -1 or run eq 3 alpha gt 24
Here, the user has indicated that when a record is
encountered for which either or both of the two conditions
is/are TRUE, reading of the current SIF file should end.
ATcompile)
(Command :equation) Details for the compile option.
If a set of "compiled" equations previously
saved in an object file contains references
to the "integ" and/or "deriv" and/or "table"
functions, then the corresponding appropriate
"integral" and/or "derivative" and/or "table"
option(s) and argument list(s) MUST have been
present when the "object" file was produced.
The presence of these options and argument
lists in the input to "equation" when one or
more "compile" files are being used is optional;
ie, no use is made of these constructs at this
time.
Example : compile obj1
************* W A R N I N G ************
ATcurve)
(Command :equation) Details for the curve option.Example : curve lsq
ATdebug)
(Command :equation) Details for the debug option.
ATderivative)
(Command :equation) Details for the derivative option.An example of this option and argument list is :
" derivative x1 fx3 4 x1 thru x114 fx31 thru fx314 "
The two name items (x1 and fx3) shown above included AFTER the "derivative" option, are optional. Normally, all mentioned variables are assumed to be SIF variables. If either or both of the independent and/or dependent variable sequences have been declared LOCAL and if either or both of the sequences of independent and/or dependent local variables have been "dimensioned", then their base array name(s) MUST be included after the "derivative" option. If the array name is NOT specified, it is assumed that the variables are scalar. Following the optional two local array names is a number in the range 1 to 20. This is the derivative id number, used for reference within the equations via the "deriv" function. Up to 20 derivatives can be defined.
Following the derivative id number is a sequence of names and/or values which ARE the independent and dependent SIF variable names/values to be associated with this derivative. ALL of the INDEPENDENT variable names/values MUST be specified BEFORE the DEPENDENT variable names/ values. Equal numbers of independent and dependent variable names/values MUST be specified. The lists of variables logically define a "range" within which differentiation can occur without (if voiding does not alter the extent of the range) extrapolation having to be done; ie, the variables define a "curve", all or some of which can be used to determine the value of a derivative.
******************** W A R N I N G ***************** Array names ending in a NUMBER should be AVOIDED when specifying lists of independent and/or dependent variables in the "derivative" argument list. *****************************************************
In general, the more definition there is to a set of data in the range where differentiation is to occur, the greater the accuracy of the resulting derivative's value. Up to a total of 500 independent and 500 dependent names/values can be specified in up to 20 "derivative" argument lists.
ATdivide)
(Command :equation) Details for the divide option.Example : divide %
ATeqfile)
(Command :equation) Details for the eqfile option.Example : eqfile eq1
ATeqfilen)
(Command :equation) Details for the eqfilen option.Example : eqfilen eq2
ATeqtol)
(Command :equation) Details for the eqtol option.Example : eqtol .5
ATexponent)
(Command :equation) Details for the exponent option.Example : exponent @
ATfiles)
(Command :equation) Details for the files option.
This list of files can be implicitly extended via use of the "<list" argument which can appear among the specified file names. If one or more of the "<list"-type arguments are specified, where "list" is a currently defined file name list, the file names contained in the indicated file name list(s) will be included, at their respective point(s) of encounter, in the current file list. The referenced list(s) must have been produced by the "newfiles" and/or "newfilex" argument lists associated with one or more previously executed DESL commands. Each "list" name can be up to 15 characters long. File names can also include the {...} construct. This type specification within a file name implies that the list name given between the curly brackets ( {} ), is to be used to have each of its elements substituted in turn for the { ... }, inclusively, such that an implicit lengthening of the file list is accomplished, up to the maximum number of files allowed. Any time such a {...} usage occurs, all lists mentioned must exist; i.e., must have been previously defined in the current DESL session. Only one {...} construct can be included in a file name. Including more than one such construct will result in unpredictable results.
An example of this type of file name specification is the following :
t43r{runs}.sif
Here, the list "runs" will have its elements used, in turn, in place of the {runs} substring.
| . |
(Begin modifications on 052102)
Each file name, whether it includes the {...} or not,
can be a maximum of 256 characters long.
If a file name is more than 16 characters long it
must be enclosed in question marks (?) .
(End modifications on 052102) |
Up to 200 files can be explicitly or implicitly specified.
Example : files run1 run3 <flist9
ATintegral)
(Command :equation) Details for the integral option.An example of this option and argument list is :
"... integral x1 fx3 4 x1 thru x114 fx31 thru fx314 ..."
The two name items (x1 and fx3) shown above included AFTER the "integral" option, are optional. Normally, all mentioned variables are assumed to be SIF variables. If either or both of the independent and/or dependent variable sequences have been declared LOCAL and if either or both of the sequences of independent and/or dependent local variables have been "dimensioned", then their base array name(s) MUST be included after the "integral" option. If the array name is NOT specified, it is assumed that the variables are scalar. Following the optional two local array names is a number in the range 1 to 20. This is the integral id number, used for reference within the equations via the "integ" function. Up to 20 integrals can be defined.
Following the integral id number is a sequence of names and/or values which ARE the independent and dependent SIF variable names/values to be associated with this integral. ALL of the INDEPENDENT variable names/values MUST be specified BEFORE the DEPENDENT variable names/ values. Equal numbers of independent and dependent variable names/values MUST be specified. The lists of variables logically define a "range" within which integration can occur without (if voiding does not alter the extent of the range) extrapolation having to be done; ie, the variables define a "curve", all or some of which can be used to determine an integrated value.
In general, the more definition there is to a set of data in the range where integration is to occur, the greater the accuracy of the resulting integrated value. Up to a total of 500 independent and 500 dependent names/values can be specified in up to 20 "integral" argument lists.******************** W A R N I N G ***************** Array names ending in a NUMBER should be AVOIDED when specifying lists of independent and/or dependent variables in the "integral" argument list. *****************************************************
ATmultiply)
(Command :equation) Details for the multiply option.Example : multiply ]
ATnewfiles)
(Command :equation) Details for the newfiles option.The list of the names of the new files actually produced can be saved via the use of the ">list"- or ">>list"- type argument, which can appear among the specified new file names. If a ">list"- or ">>list"-type argument is specified, where "list" is the specified file name list, the names of the new files which DESL actually produces during the execution of the current command will be saved in the specified file name list.
This file name list can later be referenced by the "files"/"xfiles" options to imply the file names contained therein. Up to 200 new file names can be saved in any one list. If the ">list" argument is specified the named list will be created if it does not already exist, or will overwrite a like-named list if one exists. If the ">>list" argument is specified the named list will be appended to if it exists or will be created if it does not exist. All file name lists are in existence for the current DESL session only. Each "list" name can be up to 15 characters long.
In all but a few noted cases, it is acceptable to use the ">list" or ">>list"-type argument without specifying a full complement of actual new file names. Any new file produced whose NAME is GENERATED by DESL is ALWAYS marked as a file to "PURGE at cleanup".
A suffix which may be in effect as established via the filesuffix DESL command will be added to any expressed or implied new file name. New file names can also include the {...} construct. This type specification within a file name implies that the list name given between the curly brackets ( {} ), is to be used to have each of its elements substituted in turn for the { ... }, inclusively, such that an implicit lengthening of the new file list is accomplished, up to the maximum number of new files allowed. Any time such a {...} usage occurs, all lists mentioned must exist; i.e., must have been previously defined in the current DESL session. Only one {...} construct can be included in a new file name. Including more than one such construct will result in unpredictable results.
An example of this type of new file name specification is the following :
t43r{runs}.sif
Here, the list "runs" will have its elements used, in turn, in place of the {runs} substring.
| . |
(Begin modifications on 052102)
Each new file name, whether it includes the {...} or
not can be a maximum of 256 characters long.
If a newfile name is more than 16 characters long
it must be enclosed in question marks (?).
(End modifications on 052102) |
Example : newfiles nf1 nf2 >nflist21
ATnewfilex)
(Command :equation) Details for the newfilex option.Example : newfilex nf1 nf2
| . |
(Begin modifications on 072304)
ATnoextrap)
(Command :equation) Details for the noextrap option.(End modifications on 072304) |
ATnoop)
(Command :equation) Details for the noop option.
ATobject)
(Command :equation) Details for the object option.
If a set of "compiled" equations being
saved in an object file contains references
to the "integ" and/or "deriv" and/or "table"
functions, then the corresponding appropriate
"integral" and/or "derivative" and/or "table"
option(s) and argument list(s) MUST be
present when the "object" file is produced.
The presence of these options and argument
lists in the input to "equation" when one or
more "compile" files are being used is optional;
ie, no use is made of these constructs at that
time.
Example : object obj1
************* W A R N I N G ************
ATorder)
(Command :equation) Details for the order option.Example : order 2
ATpathfile)
(Command :equation) Details for the pathfile option.
An example of such a file is the following :
* * Example path file for test xxx * * item 1 = path to be translated : MUST * match VERBATIM with name given * specified/implied via "paths" * * item 2 = resulting name translation * data56 ? \usr\home2\ people\test56\ ? up ?..\? way-up ? ..\..\..\ Temp46\?
Example : pathfile pathA
ATpaths)
(Command :equation) Details for the paths option.Example : paths ..\ ..\Main\ sub1\
ATsetval)
(Command :equation) Details for the setval option.Example : setval 888
ATsubtract)
(Command :equation) Details for the subtract option.Example : subtract <
ATtabfile)
(Command :equation) Details for the tabfile option.| . |
(Begin modifications on 052102)
A table file can define up to 200 tables.
(End modifications on 052102) |
(See the discussion regarding special functions.)
The structure of a valid table file must adhere to the following rules :
(1) Any line beginning with an asterisk followed by at least one blank space is considered a comment and is ignored.
(2) Blank lines are ignored.
(3) There may be an unlimited number of lines in a table file.
(4) Each table's definition in the table file begins with a single line containing the word "table" followed by a table name and size specification(s): no. of rows, no. columns; ie, table tab1 4 7 This initial line is followed, on any number of lines, by the values of the row variable, column variable and the table dependent variables.
(5) Each table will be completely defined when the correct total number of row variable values, column variable values and table dependent variable values have been specified.
(6) A table can have up to 1000 rows OR columns.
| . |
(Begin modifications on 052102)
(7) For ALL tables defined, a total of up to 20000
values can be specified : row variable values +
column variable values + table dependent variable
values.
(End modifications on 052102) |
(8) The sequence of input for a one-dimensional table is the following : independent ("row") variable value 1, dependent variable value 1, independent variable value 2, dependent variable value 2, etc.
(9) The sequence of input for a two-dimensional table is the following (where "ncol" is the number of columns in the table) : second independent ("column") variable values 1 --> ncol, value 1 of the first independent variable, the first ncol values of the dependent variable, value 2 of the first independent variable, the second ncol values of the dependent variable, etc.
| . |
(Begin modifications on 010107) (9.1) The sequence of values for a one or two dimensional table can be implied to come from predefined lists. If the last field on the line with the "table" string is the string "rlist" or "clist" then it is implied that all of the values to be stored in a table are to come from one or more previously defined lists. such lists can be defined explicitly or can be defined via the "makelist" option in the "copy" command. Following the line that is ended with "rlist" or "clist" are lines containing the names of the lists that will be accessed for values to be stored in the table being defined. The implicit sequence of the table elements is important and determined by the "rlist" and "clist" strings. For a one dimensional table in which independent and dependent variable vectors need to be defined both the "rlist" or "clist" imply the same thing: the vector representing the independent variable will be filled to the length specified on the "table" line before the vector representing the dependent variable is filled to the same length. For a two dimensional table the use of the values encountered in the list(s) specified is in the following order: if "rlist" is specified, the vector of the "row" independent variable values is defined, then the vector of "column" independent variable values is defined then the array of dependent variable values is specified. This much of the process i the same if "clist" is specified. The order of array (table) element filling is, however, dependent on whether "rlist" or "clist" was specified. If "rlist" was specified, the lists encountered are used to fill each row from left to right. The row order value filling is row #1, row #2, ..., row #K. If "clist" was specified, the lists encountered are used to fill each column from top to bottom. The column order value filling is column #1, column #2, ..., column #J. As in the case of the explicit loading of values, if a table is insufficiently filled via this new list type method a message will be issued to the log file and the "equation" function will not produce a new sif file.
(End modifications on 010107) |
| . |
(Begin modifications on 072404)
(10) Extrapolation is allowed when doing table
interpolation unless the "noextrap" option is
specified. If extrapolation is required and allowed,
the resulting extrapolation will be linear. If
extrapolation is required but not allowed the
resulting value will be set to the current "setval"
value.
(End modifications on 072404) |
An example of a table file containing both one- and two-dimensional table definitions is the following :
The first example table is named "tab1d" and is a 1-dimensional table with 6 rows and 1 column ... (Table does NOT have to laid out as indicated below. This arrangement is recommended for aesthetic/visual reasons. All values COULD have been specified on ONE line.)
* * ------------------------------------------------- * * The first example table is named "tab1d" and * is a 1-dimensional table with 6 rows and * 1 column ... * * (Table does NOT have to laid out as indicated below. * This arrangement is recommended for aesthetic/visual * reasons. All values COULD have been specified on * ONE line.) * table tab1d 6 0 0 1 4.6 2 7.9 3 13.3 4 20.5521 5.3 47.34* * -------------------------------------------------
The second example table is named "tab2d" and is a 2-dimensional table with 7 rows and 5 columns ...
* * The second example table is named "tab2d" and * is a 2-dimensional table with 7 rows and * 5 columns ... * table tab2d 7 5 * -.5 -.1 .2 .8 1.5 * - - - - - - - - - - - - - - -- - - - - - - - -5 1. 2 3 4 5 -3 1.2 1.4 1.6 1.8 2.0 -1 2.1 2.2 2.3 2.5 2.9 0 3.1 3.3 3.6 4.0 5.2 1 7 6 5 4 5 1.5 0 1 0 -1 -2 2.0 10 5 2 5 9 * * ------------------------------------------------- *
Use of these example tables among the equations could be the following :
a= table(tab1d,alpha) + table(tab2d,alpha,beta) b= table(tab1d,alpha,2) c= table(tab2d,alpha,beta,2,1)
These uses of these example tables indicate the user wishes to accomplish the following tasks :
Example : tabfile tab1
ATtabfilen)
(Command :equation) Details for the tabfilen option.This option has exactly the same meaning as "tabfile" except that user is NOT given the opportunity to edit the table file before its use in the program.
Example : tabfilen tab5
ATtol)
(Command :equation) Details for the tol option.Example : tol .5
ATtorder)
(Command :equation) Details for the torder option.Example : torder 2
ATvoidval)
(Command :equation) Details for the voidval option.Example : voidval -444
DESL Manager at ViGYAN, Inc.
30 Research Drive
Hampton, VA 23666
Voice: (757) 865-1400
Toll Free: (800) 288-3998
FAX: (757) 865-8177