Professional Documents
Culture Documents
Sofistik 1 Basics
Sofistik 1 Basics
Basics
SOFiSTiK | 2022
SOFiSTiK
Basics
SOFiSTiK AG
This manual is protected by copyright laws. No part of it may be translated, copied or reproduced, in any form or by
any means, without written permission from SOFiSTiK AG. SOFiSTiK reserves the right to modify or to release
new editions of this manual.
The manual and the program have been thoroughly checked for errors. However, SOFiSTiK does not claim that
either one is completely error free. Errors and omissions are corrected as soon as they are detected.
The user of the program is solely responsible for the applications. We strongly encourage the user to test the
correctness of all calculations at least by random sampling.
Front Cover
Arnulfsteg, Munich Photo: Hans Gössing
Contents | SOFiSTiK
Contents
Contents i
SOFiSTiK 2022 i
SOFiSTiK | Contents
ii SOFiSTiK 2022
If you miss something here... | SOFiSTiK
Hint
From version 2022 we have moved a large part of the content to the new SOFiSTiK FEA
manual.
https://www.sofistik.de/documentation/2022/en/fea
The input language CADINP for free input format of data is the result of a further development
of a project CADINT, which originated from the Federal Ministry of Research and Technology
for the study in the CAD area (M.Ahn, K.H.Böckeler, W.Haas / Eingabe Konventionen für CAD-
Programme, CAD-Bericht Kfk-CAD 39, Kernforschungszentrum Karlsruhe, 1976).
The variation of this format, which was developed by SOFiSTiK, includes several additional ca-
pabilities. In certain points it therefore has some deviations from the above mentioned CADINT
standard.
The full capability of the language can be achieved in combination with SPS and/or WPS, when
functions for block building and parameter substitution are used. CADINP and SPS represent
a full programming language for the calculation of problems in structural engineering, which
will outdo any guided GUI. The processing occurs in two stages.
• SPS or WPS use a single file or a set of sub-files to create an input file for every program
being used. This is called parsing. During this process globally defined text elements are
inserted and larger blocks are inserted or skipped. Strings are addressed with $(name).
The strings can be defined or undefined in the input file or the SOFiSTiK-environment. At
this stage no calculations have take place, that is why there is a difference, whether the
string A = ”2+2” is inserted at $(A)*3 or ($(A))*3.
• Each computational program starts its own CADINP processor, which then starts the arith-
metic calculations. The variables used within CADINP are marked with a # at the beginning.
They do not need any brackets and represent numbers. They can be converted to text input
data where needed, especially within comments. However they can only be used within the
local scope of the single program.
The combination of these two stages allows the description of a complete analysis systems by
means of manual calculations and documentation of the analysis assumptions and the resulting
computer calculations. This in turn produces a complete analysis document in the computer.
Each computational program expects its input data in a file. The input consists of records,
which have a name and are constructed in free format according to the CADINP rules.
Generally several individual modules are executed while working on a project. The interaction
of these modules is necessary for a complete analysis. In this case the normal procedure is to
gather the entire data in one or a few files, and through the appropriate records within the data
make calls to the respective programs.
PROG AQUA
HEAD
! Material and cross-section definition
END
PROG SOFIMSHA
HEAD
PROG ASE
HEAD
! Input data for analysis of 1st load case
END
PROG ASE
HEAD
! Input data for analysis of 2nd load case
END
PROG WING
HEAD
! System and result plots
END
The first line should be a PROG line. Each module can be called as often as desired. The
order of execution of the programs corresponds to the order of the PROG lines in the file. If
-PROG is entered instead of PROG or +PROG, the associated module will be omitted. Single
modules can also be selected directly.
Hint
Processing a complete SOFiSTiK input file can be done either interactively using WPS or
alternatively as a batch-job using SPS.
2.1.4 Data
Data can be numbers or text (=Literals). Numbers may have a sign and an exponent. If an
integer number is expected, the given number will be rounded to the nearest integer, e.g.
Texts are arbitrary strings of characters. Only the first four characters are significant. Text
should be delimited by apostrophes if there is danger of confusion with numbers, record names
or items, or if it includes blank spaces or the characters ’,’ or ’;’ or ’$’, e.g.
With Version 2010 all international characters (UTF8) may be used, previous versions allowed
only the local code-page characters. However the short ident keys with exactly 4 characters
allow only for pure ANSI-characters (i.e. no Umlauts or accents).
Lower case characters are automatically converted to uppercase characters, as long as they
are not between apostrophes. However a few exceptions are enforced to upper case (e.g.
names of actions) to avoid ambiguites, these will be marked as LITnn instead of Litnn in the
column ”unit”.
• The literal has been defined with apostrophes and starts with an equal sign (=). In that
case the literal is passed unchanged but without the leading = to the program allowing to
define formulas. This if course only useful if the program can handle the literal in that form
as intended.
• If the variable has been defined with a literal, this content will be inserted instead of the
variable.
• If the variable has been defined with a value, this value will be formatted and inserted
instead of the variable in the literal.
For an optional literal i.e. instead of a number and for variables containing literals only the form
#name without any arithmetics or indices is allowed (e.g. A#1 with #1=25 yields ”A25”). If a
number with arithmetics is required an equal sign has to be added at the beginning. Thus #X/2
will yield the literal "‘25/2"’, while =#X/5 will yield the number 12.5.
Within a real pure Literal however the #() function with the format as a second parameter i.e.
#(#ALPHA,8.3) has to be used. The integer part of the format selects the number of total
characters (8), while the decimal part selects the numbers of decimal digits (3). The first
argument may be any complex arithmetic expression.
• The record name can be omitted when the record is of the same type as the preceding one.
• A record can start at any position in a line.
• The data is separated from each other by one or several separation characters.
If less data is entered for some record than its description demands, the corresponding default
values will be used in the place of the missing data.
Default values can be redefined inside a header record that defines a table.
2.2.3 Repetition
If the equal sign (=) is entered in the place of a data value, the program will use the corre-
sponding value of the preceding record. However this is only possible if the record name has
not been changed.
If two equal signs (==) (with no blank spaces in between!) are entered, all of the values in the
following records will be the same. Positioning of the preceding record is not considered.
If the value of the previous record is a generation instruction or a list of values, the generation
or the complete list will be repeated.
2.2.4 Increments/Decrements
If a double plus or minus (++ or --) is entered in the place of a data value, the program will use
the corresponding value of the preceding record incremented or decremented by 1. This will
also work with Literals, Lists and Generation sequences. However this is only possible if the
record name has not been changed.
2.2.5 Comments
The comment characters $ , ! or // turns the rest of a line into a comment, which will be ignored
by the program. All this comment operators should be separated from the comment itself and
the input data in the same line with a separation character.
Within a +PROG-line (see SPS) only the $-character is allowed as a comment and it must be
separated by blancs. Within a +SYS-command line no comments are allowed at all.
A separation character must be entered right before $$. Thus it is not possible to write expres-
sions or a list of values extending more than one line.
2.2.8 Positioning
By entering a name of an item inside a record, you can provide the value for that item regardless
of its position.
Example:
A record is defined by the items K1 K2 K3 K4 K5. The following input is then equivalent:
RECORD K1 K4 K5
1.00 2.00 3.00
A table definition remains valid until a new record name is entered or the same record name is
repeated. Inside a table the positioning is still possible even for those items not defined in the
table definition.
The default values can be modified inside the header of a table by following the item with an
equal sign (=) and the new default value without any separation characters.
RECORD K1 K2 K5=4
1 2 6
2 5
3 6 -
is equivalent to
RECORD K1 K2 K5
1 2 6
2 5 4
3 6 4
Such a construct is also a nice suitable solution to the problem of ambiguous literals. If a literal
value exists (e.g. GRP) for the first item position which is also a valid record name, a change
of the sequence and perhaps a default assignment may solve this problem without the need to
use quotes:
2.2.10 Help-Record
A list of the possible record names can be obtained by entering HELP. HELP followed by a
record name prints a list of the items of the record. HELP followed by a record name and an
item name will print the allowable input values and parameters for the corresponding position.
2.2.11 Generation
An instruction for automatic record generation can be given instead of a data value. In this way
a series of records can be created automatically.
When generating a record the command must be enclosed within parentheses. Its elements
must be separated by separation or underline characters.
(Start_value Increment)
The primary generation instruction specifies the number of the individual records to be gener-
ated. It can be used only once per record, yet in any position inside the record. The corre-
sponding secondary generation instruction can be defined for every parameter.
The generation of literals is also possible. The increment is then also considered as a literal
but may contain only numbers.
Long sequences of generated data may accumulate numerical round off errors. Thus if the
specified end value of a primary generation instruction is not reached with an accuracy of
0.0001 of the increment, or more than 9999 values would be created an error message will be
issued and the generation will not start.
Example:
NODE 1 0 0.5
NODE 2 0 0.4
NODE 3 0 0.3
NODE 4 0 0.2
NODE 5 0 0.1
Example:
REIN A0.1
REIN B0.2
REIN C0.3
REIN D0.4
A list of values may not contain any separation characters and can not be spread across
multiple lines.
When several lists of values are defined within a single record, their number of values must
agree not only with each other, but also with any other defined primary generation.
The maximum number of values per list is limited by an internal amount of memory. A list of 25
values is usually possible.
A list of values can also be built up by fixed literals (LIT). Combinations of numbers and literals
or a list of freely defined literals are however not allowed.
If a unit is defined in a table header, this unit identifies the default unit for all data in the re-
spective column; it may be overwritten with an explict definition of course. If only a default unit
should be selected but no default value, the default value may be omitted, e.g.,
If large arrays are used, it is strongly suggested to define the element with the largest index
first, to avoid reallocation requests. However, no value will be assigned to the array elements.
The unit of a variable is depending on the context, where this variable is used. Thus it is not
possible in general to use the same variable for a section definition in [ mm] ] and a system
definition in [ m] . But it is possible to assign a unit to a variable, then the given value will be
converted immediately and the value can be used everywhere. If a variable has been assigned
a unit, it will be inherited to all other variables and expressions. However this will also trigger a
check if the obtained unit is allowed for the current use.
If for example a stress is expected and defined as #P/#A, both variables may have no unit, #P
may be a force and #A an area, or #P may be a load per length while #A is a width. If a constant
is added or subtracted to a variable, the constant will be taken as specified in the same unit.
An array has for all members the unit which has been defined for the item with index 0.
A variable is used if a leading # sign allows the clear identification as a variable name. If the
expression starts with an additional leading = character, all unidentified characters will be taken
as variable names.
For local usage the legacy convention to use scalar variables with pure number between 1 and
9999 instead of a name is still supported.
If a variable is assigned to an expression, the expression is calculated first and then its value
is assigned to the variable.
To print variables for debugging purpose you may use the construct PRT# with a similar syntax
for addressing the variable name. The name of the variable is expected without separation
characters immediately behind the #. For more comfort one should use TXB / TXE or <TEXT>
within literal text.
Variables with a name may be saved permanently in the database. The command STO#name
will save the current or specified value of this variable in the database, which then can be used
by all other programs accessing the database from that. E.g.
If a save variable should be removed from the database there is the command DEL#name.
For this case it is also allowed to specify wild card characters. The commands DEL#OPT* or
DEL#A?00 will delete all variables with that pattern. The use of DEL# within a control construct
like a loop or an IF-block may yield unexpected results.
For special cases it is possible to reinitialize a variable with the last saved value with the follow-
ing commands:
Reserved Variable-Names
There are some reserved Names, which are automatically created by a programm run. The
user may use and redefine those names however within his CADINP-data block with new
values.
• Variables VERSION(0),VERSION(1) and VERSION(2) will be preset with the version num-
ber of the Release, the servicepack number and the intermediate release number, allowing
to define common input data for multiple versions.
• Variable PI will be preset to 3.141593.
• The arrays of variables GRP_MASS, SCT_MASS and MAT_MASS as well as GRP_REIN
and SCT_REIN are redefined after a print or evaluation of system statistics. They contain
the masses (MASS) and reinforcements (REIN) of all groups (GRP_) and section numbers
(SCT_) or Materials (MAT_), where the index 0 contains the total sum.
All other variables start with the first three characters of the program creating them followed by
an underline:
To trace the assignment of values, there is a command DBG#. This will toggle test prints
and an interactive debug mode. DBG# uses the variable #0, which can not be used for other
purpose therefore
+ - Addition, Subtraction
* / Multiplication, Division
** or ^ Exponentiation
If no operator is given, a multiplication will be performed. The bindings of the operators are
according to the mathematical rules. The logical operators have the same weight, thus it is
strongly recommended to use parentheses for combined expressions.
Arithmetic expressions may also appear within a list of values or generation instructions. The
functions DEG, GON and RAD may be placed before any argument, but separated from it by
a comma. Their definition is kept if an assignement contains only one of those names (e.g.
LET#0 RAD).
Examples:
120.+12.
3(5.0+4.0)
COS(#1) SIN(#1)
345*#11+##12
A special feature is available when accessing arrays of variables. If the index is not integer, but
rational, an interpolation between the values of the array will take place:
LET#A(0) 10.0
LET#A(1) 14.0
LET#A(2) 16.0
LET#A(3) 17.0
The same procedure is also available for higher interpolation schemes. Then we need two
arrays of the X and Y values with the same length. These variables are then connected by a
special assignement of a literal as a table definition:
LET#X 0.0,2.0,3.5
LET#Y 0.0,100.0,100.0
LET#SIG 'TAB(X,Y)'
The expression #SIG(1.73) interpolates for this X-value betwen the given Y-values linearly. If
higher functions are requested, a third array is needed, giving the derivatives of the function:
LET#DY -,0,-
LET#SIG 'TAB(X,Y,DY)'
For the example above only the derivative at the middle point has been specified. Thus we
have quadratic parabulas for the interpolation function. If derivatives are specified at both ends
of an interval we have cubic splines as interpolation functions.
In case it is required to store text in a variable this may be done with the LET/STO command
in the same way (The use of apostrophes is manadatory):
LET#TEXT 'ABCDEFGHIJK'
The text will be saved in blocks with 8 characters each in the name of the variable, #TEXT(1)
would thus be equivalent to ”IJK ” in the above example and it is possible to change that item
only, but there is no storage of single characters. However when using a text variable it is
possible to use sub strings with the format #TEXT(3:7) selecting the third to seventh charac-
ter. (Instead of the numbers any arithmetic expresssionas are also valid of course). A text
variable may be read from the CDB and it is possible to convert with a LET/STO command a
text to numbers. The following example will save the two numbers in variables #VALT(0) and
#VALT(1):
LET#TEXT '1.23,1.48'
LET#VALT VAL(#TEXT)
LET#F '=FUN(var,formulaexpression)'
! e.g.
LET#F '=FUN(x,3*#x**3-2*#x**2+5*#x)'
LET#1 #F(1.234)
The Literal has to start with the character sequence ”=FUN(” , followed by a formal param-
eter name, followed by an expression containing any variables defined so far. If the formal
parameter’s name has been defined already, it will not be changed by the call.
But this requires that this variable (LET#X) must be initialized before the first function call.
Recursive calls are allowed.
Loops can be nested up to 32 levels, containing any number of input elements. If LOOP is not
followed by a number, it will be performed at most 9999 times.
Each loop construction must not exceed 255 lines. Multiple records, however, can be entered
at the same line (separated by ;). If you still need more than 256 lines you have to specify
before the first LOOP
LET#LOOPSIZE number_of_lines
It is possible to store the index of the loop in a variable, if the name is appended to the LOOP
keyword. The index starts counting at zero. The variable may be changed within the loop, but it
will be restored after evaluation of the terminating condition in each cycle. Generation of nodes
and springs on a semicircle at a distance of 30 degrees.
LET#1 1 , LET#2 0.
LOOP 7
NODE #1 COS(#2) SIN(#2)
SPRI #1 #1 DX COS(#2) DY SIN(#2) CP 1.E5
LET#1 #1+1
LET#2 #2+30.
ENDLOOP
Instead of LOOP 7 / ENDLOOP you could use LOOP / ENDLOOP #2 < =180. With an endloop
condition one can leave a loop prematurely.
LOOP#1 3
TXB ADEF #1+1
LOOP 2
TXB BDIV 0.5 #1+1
TXB 0.2 1
ENDLOOP
ENDLOOP
creates:
ADEF 1
BDIV 0.5 1
0.2 1
0.5 1
0.2 1
ADEF 2
BDIV 0.5 2
0.2 1
0.5 2
0.2 1
ADEF 3
BDIV 0.5 3
0.2 1
0.5 3
0.2 1
If you want to run a loop over all elements of an array, this may be done by giving only the
name of the array (without the # ):
LET#A 10,22,34,55,76,83
LOOP#1 A ! Only the name, #A would be the value 10!
NODE #1+1 X #A(#1)
ENDLOOP
If not all elements have been defined, ist is possible to perform the loop only over the defined
elements, the loop index will then obtain the value of the defined elements only:
LET#ANZ 0
LOOP#1 DEF(A)
LET#ANZ #ANZ+1
ENDLOOP
on both sides of the operator is considered, no parentheses are allowed, they are part of the
strings.
As float numbers cannot be represented exactly within a computer in most cases, comparison
with == or != should use a tolerance if applied to fractional values.
IF #1==12
! These lines are input when #1 equals 12
! ...
ENDIF
IF ABS(#1-0.35)<0.001
! These lines are input when #1 equals 0.35
! ...
ENDIF
if (Condition_1)
....
elseif (Condition_2)
....
elseif (Condition_3)
....
else
....
endif
Example:
VALUE
0.7
0.5
A
0.3 1.0
Figure 2.1: VALUE depending on A
That means that only one possibility is chosen for VALUE depending on A.
In special cases it is possible to create the following input which can be used in different
SOFiSTiK environments with various versions:
IF (#VERSION>=2012)
!....
ELSEIF (#VERSION==2010)
!....
ELSE // older SOFiSTiK Releases
!....
ENDIF
@CDB filename
Materials, sections, load cases or other elements are organized to have a separate key for
every instance. With the given example of a definition like:
LET#mat KWL(MAT)
LOOP#M mat
TXB #mat(#M)
ENDLOOP
Other examples:
the variable #mat will contain a list of defined material numbers which will be printed in the
following loop.
Instead of the argument MAT the name of any key defined in the (cdbase.chm ) or a direct
number may be given.
@(position+offset) or @(no,position+offset)
Reads from the database the next record, which passes the @KEY-filter which is modified
for the second case by ”no” at the position of the last defined KEY. The value of the ex-
pression is the stored data with the name ”position” or if position is a number the value at
the position relative to the last selection value of the filter. The value 0 and negative values
will therefore yield the integer values within the selection keys. An access to the index of
an array can be done via ”offset”.
The access function will start at the current position. If you access a value with the same or
a lower position, CDBASE will read the next record. If the end-of-file condition is encoun-
tered an error will occur if you have used the form @(position), while for @(nr,position) a
loop is used once and the function jumps to the beginning.
You may also specify two state variables. If these variables have been defined non negative,
the result values will be saved there and error messages will not appear:
To get the effective Iy -value of cross section 5 from the actual project-database, you enter:
@KEY SECT_EFF 5
LET#5 @(IY)
To use shell forces of the nodes 101 and 102 of group 2 of load case 12 you enter:
@CDB PROJECT1
@KEY QUAD_NFO 12 2 ! Selector Group 2
LET#101 @(101,MXX) ! moment m-xx
LET#102 @(102,MYY) ! moment m-yy
To get all support forces of nodes with last digit 0 as loads you may enter:
LET#CDB_IER 0
@CDB PROJECT1
@KEY N_DISP 12
LOOP ! All records
LET#10 @NR,@PX,@PY,@PZ
IF (#CDB_IER < 2)&(#10 <> 0) ! End or header
IF 0==MOD(#10,10) ! Last digit 0
LOAD #10 PX #11 #12 #13
ENDIF
ENDIF
ENDLOOP #CDB_IER < 2 ! To terminate the loop
To get the section number of the beam 101 (As we have to read two different cases alternate,
we can not use the predefined literals):
LET#CDB_IER 0
@CDB PROJECT1
! 4 Integer-Keys
@KEY 100 0 -1 -1 -1 -1
LET#NR 0
! ALL records
LOOP
! 1. and 2. Integer
LET#10 @(-3),@(-2)
IF #10
! New BEAM
LET#NR #10
ELSE
IF #NR==101
LET#Q #11
ENDIF
ENDIF
ENDLOOP #CDB_IER < 2 ! To terminate the loop
For text elements saved in the database, a proper treatment is only possible if the data structure
is known. Respective by using the names defined in the cdbase.chm :
! Designation of material 1
@KEY MAT 1
LET#MATTXT LIT(@TITLE)
Hint
With the variable names #COOR_X(number), #COOR_Y(number), #COOR_Z(number)
it is possible to acces the nodal coordinates directly, if the module has initialized the
nodal arrays, which is done by e.g. SOFILOAD and all anlysis tools (ASE, DYNA, TALPA,
HYDRA). SOFIMSHA and SOFIMSHC cannot grant access to nodes during the input
processing if theses nodes will be created only later.
The same layout is used in all manuals for the input description of all records. Apart from the
record name, which is written in a special box at the upper right, there are four columns in each
table.
• The first column contains the names of the items of the record.
• Explanations and allowable literals are given in the second column.
• The unit of the input parameter can be found in the third column. The ”-” character stands
for a scalar parameter without a unit, a ”*” stands for values with different possibilities, that
are selected via PAGE UNII. LIT is given for items allowing only preddefined literals. LITnn
defines input, which can accept free text of up to nn characters. LITnn defines literals which
are enforced to upper case.
• The last column shows the default values. Here, the ”-” character means that no default
value exists, and that the parameter itself is not necessary. On the contrary, a ”!” means
that a value must definitely be specified. Finally, a ”*” means that the default values depend
on various conditions which are explained in the text.
HEAD
Up to 10 title lines can be defined. The first one is reserved for the structure description and
can only be defined in the programs AQUA, SOFiMSHA/B/C and in templates of the SOFiSTiK
series. This line is imported by all other modules from the database, thus it can not be changed.
The rest of the lines can freely be defined by entering the record HEAD followed by a separation
character and any desired text up to 72 characters. If no title lines are defined inside a data
block, the previous ones remain in use. See PAGE about specifying a page headline. Title
lines must not be delimited by apostrophes. Defaults of the Heading lines may be specified in
SOFiSTiK.DEF via the variables KOPF1, KOPF2 and KOPF3.
END
The record END closes each input block. Inside a data block for instance, each single load case
of the analysis can be defined. The end of the entire input is defined by a double END record.
If this record is missing and the input file is at its physical end, this record is automatically
generated by CADINP.
TXB
TXE
Any desired explanatory text can be added to an input block by TXB and TXE, either before
the analysis (TXB) or after it (TXE). The number of lines is unlimited. For each of those two
kinds of text, one may specify larger text blocks between <TEXT> ... </TEXT> and pictures
between the items <PICT> and </PICT>. However a picture is not allowed within a <TEXT>
... </TEXT> block.
The TXB/TXE - lines should not be entered between apostrophes. Within the text variables in
the form of #(variable,dd) will be replaced by their current value using the format dd.
HTML components may be used within the text. A component starts with a < not followed
by a blank or another < . Known components will be interpreted, unknown will be discarded.
SOFiSTiK programs know about (others will be discarded):
<TEXT>
</TEXT>
You may define a continuous block of text within the special record names <TEXT> and
</TEXT> without the need of specifying record names. The text will be appended to the
region selected by the last TXB or TXE command. The Text following the <TEXT> name will
become part of the table of contents in Report Browser.
<TEXT,FILE=foobar.txt>
<TEXT,FILE=+foobar.txt>
For the definition of templates one can specify editable fields via special HTML-Tags:
<EDIT:name>$(name) </EDIT>
Editable Reference on Parameter value
<EDIT:name,Format=6.2>$(name) </EDIT>
Editable Reference on Parameter value
with a format of ”###.##”
(total width.decimal digits)
Format=6 reserves 6 characters wide
Format=-6 places left adjusted
<EDIT:name,List=str1,str2,str3>$(name) </EDIT>
Editable Reference on Parameter value
with a list box of allowed values
<EDIT:name,List=str1,str2,str3,Update=Yes>$(name) </EDIT>
Enforces an update of the template
immediately after input of data
ECHO
At the beginning of the program all options for new results are preset to 1. The output pa-
rameter for already computed values (e.g. nodal coordinates in analysis programs) is set to
0. By entering ECHO NODE you can for example assign the value FULL to the option NODE.
Therefore the default value for VAL will only be activated if an ECHO record for this option is
given. The exact effect of all options can be found in the output description of the individual
manuals. You should generally note that the shortest possible output is achieved by YES, while
a rich output is obtained by FULL. By EXTR one achieves the output of values, which are ei-
ther useful in further computational steps or can use up a lot of paper. Thus, use of this value
should be made with care.
If the user wants to prevent the output of certain results, he must deactivate them explicitly by
NO. If for example one only wants the option REAC set, one must enter:
UNIT
The SOFiSTiK programs allow the input and output in the most suitable engineering units. The
units used in the database are stored based on SI-units kN, m, sec. The Units for input and
output will be preselected with the definition of the design code with a global set. However,
other units can also be used for input and output (e.g. N, mm or cm2 ) as well as a different
number of decimals. The record UNIT allows to specify within a current program run different
units to be used for input or output. It is possible either to select a complete unit set with TYPE:
It is also possible to select a specific object form the list of implicit units, specified in the CD-
BASE.CHM description (e.g. 1001 or GEO_LENGTH, see cdbase.chm). Then a matching unit
has to be specified at USE and optionally the number of decimal digits just for this item may be
selected.
PAGE
The record PAGE is somehow obsolete, because its parameters are derived from the operating
system or should be defined in the sofistik.def file. All parameters except the languages and
units may be defined in Report Browser at the time of printing.
Standard
SOFiSTiK AG * Bruckmannring 38 * 85764 Oberschleißheim Page 1
SOFiSTiK 2018 AQUA - GENERAL CROSS SECTIONS 2017-12-05
#HEAD1
#HEAD2
#HEAD3
#HEAD4
#HEAD5
#HEAD6
No Frame
SOFiSTiK AG * Bruckmannring 38 * 85764 Oberschleißheim Page 1
SOFiSTiK 2018 AQUA - GENERAL CROSS SECTIONS 2017-12-05
Materials and Cross-Section
Default design code is EuroNorm EN 1993-1-1:2005 Steel Structures (Europe) V 2018
Structure: A (Buildings)
Snow load zone : 1
With Frame
SOFiSTiK AG * Bruckmannring 38 * 85764 Oberschleißheim Page 1
SOFiSTiK 2018 AQUA - GENERAL CROSS SECTIONS 2017-12-05
#HEAD1
#HEAD2
#HEAD3
#HEAD4
#HEAD5
#HEAD6
Materials and Cross-Section
KOPF1 Baumassnahme
KOPF2 Strassenbauverwaltung
KOPF3 Aufsteller
KOPF4 Bauteil
KOPF5 Kapitel 1
KOPF6 Kapitel 2
Materials
Mat Classification γ-M
1 S 275 (EN 1993) 1.00
SIZE
YES
draws a free border around
the drawing W and H define
the size of the paper (2cm
margin, otherwise .5cm)
FULL
an additional border to cut the
drawing at the outer paper
limits is drawn (for drum
plotters)
This record appears within all programs having a graphical output. It defines the output format.
In general, there are two variations of the task.
• The user selects the paper format either implicitly using TYPE or explicitly by the width W
and the height H. The program can set the scale itself by picking the largest possible scale
with the common values of 1:1, 1:2 and 1:5 or their multiples. An explicit setting of the
scale SC will be used, if technically feasible. Setting SC to 0 results in the largest possible
drawing regardless of the scale.
• The user specifies the scale and by setting W and/or H to zero the appropriate paper size
is automatically chosen. If only one of the two values is set to zero, then the drawing size
will be automatically calculated to fit in the second direction, the scale does not need to be
defined in this case.
When using TYPE you can also specify the American formats or the special format for Hewlett-
Packard Plotters instead of the DIN sizes. In this case a frame is created around the picture
using the inputs of FORM and MARG. This picture will printed with program Report Browser in
exactly this form. In the case of URS or FORM URS a picture without a frame is created. Then
the frame is drawing from program Report Browser before printing. DINA URS correspond to
a DIN-A4 paper, in this case W and H change the picture size. FORM URS calculates the
pictures size from the given paper size, e.g. ”SIZE 3 FORM URS”; in this case W and H set
the paper size. A preceding minus sign selects the portrait orientation:
<PICT>
Every picture starts with the record <PICT> . It contains all elements up to the next </PICT>.
A transformation No 1 will be preset in cm as dimension.
GNT
NO Number of transformation − *
SC Desired Scale − -
XMIN Window of user-coordinates ∗ -
YMIN ∗ -
XMAX ∗ -
YMAX ∗ -
WXMI Window of workstation (paper space) cm 0
WYMI cm *
WXMA cm 0
WYMA cm *
A transformation is selected (only NO given) or defined with this record. The program will
automatically select an uniform scaling in all directions. If the user wishes different scalings
in X and Y-direction. he has to specify SC < 0 and all four coordinates of the window. GKS
supports three different transformations.
GPL
X1 Coordinates of Polygon ∗ !
Y1 ∗ !
X2 (Alternate definition of polygons is via multiple ∗ X1
records each containing only one single vertex X1,Y1.
This allows the definition of up to 255 vertices)
Y2 ∗ Y1
.... ... ...
X16 ∗ X15
Y16 ∗ Y15
GPM
GFA
Y2 ∗ Y1
.... ... ...
X16 ∗ X15
Y16 ∗ Y15
GGDP
X1 Coordinates or ∗ !
Y1 Increments of coordinates of element ∗ !
X2 ∗ !
Y2 ∗ !
.... .... ....
X15 ∗ -
Y15 ∗ -
The GGDP is a method provided by GKS to create more complex primitives. With SOFiSTiK
these are:
CIRC A full circle with centre at (X1,Y1) and a point on the periphery (X2,Y2). OPT is not
used.
BUTT A filled circle with centre at (X1,Y1) and a point on the periphery (X2,Y2). OPT is
not used.
ARC A circular arc with centre at (X1,Y1) and a periphery from point (X2,Y2) to (X3,Y3).
OPT is not used.
VECT A single vector at point (X1,Y1) with the directional components (X2,Y2) or an array
of vectors extending along the base line from P1 to P3 to P5 etc in the direction P2,
P4 P6 etc. VECT will draw the vectors with its centre at the baseline, while VEC1
will put the starting point and VEC2 will use the end point with the arrow head at the
baseline.
GTXT
Text may be positioned in several ways. The displayed text itself may be composed from a
given text and an numerical value. For the latter you may select a conversion and format
according to the cdbase.chm.
GSCA
GSCA is a special form of labelling. A dimensioning line will be drawn and a text will be written
at the line. The default of the text is the distance between the two points, but it may be specified
as explicit number and/or a given text. The combination of the default distance with a given text
requires the text to end with an equal ”=” sign. For the shown value a conversion and format
according to the cdbase.chm see may be selected.
For Windows programs different palettes are foreseen for screens with bright or dark back-
ground as well as monochrome or coloured printers. You can change these definitions via
Report Browser Options in the Registry for all programs.
The following CADINP-records are only available within the picture definitions <PICT> ...
</PICT>. The comments and descriptions of the parameters are valid however for all other
graphical programs as well.
GCOL
GCOL selects the colour for all primitives. For COL you have the choice between one of the
numbers from 1 to 15 or the literals for the standard colours from below. If your device allows
it, you may specify a colour (recommended 9 to 15) by its RGB-components.
GPLI
5 = tightly dashed
6 = tightly dotted
7 = tightly dotted dashed
8 = sparsely dashed
9 = sparsely dotted
10 = sparsely dotted dash
GPMI
GTXI
GFAI
The effect of the parameter type is device dependent. Classical vector plotters for example
cannot represent any bit patterns. Pattern 1 corresponds to completely blank, whereas pattern
2 usually corresponds to a uniform sparse shading, which gets more dense by increasing
numbers. Special patterns are reserved from type=11 and above. Adding a 32 to a pattern will
make it opaque.
Different variations exist for opaque hatch lines, in one or two directions.
<LINK>
filename.bmp LT72 -
Pictures with BMP-format can be inserted with <Link> in input files and templates.
The insertion of pictures is not possible in a block for texts with <Text> ... </Text> or for
pictures which should be generated with <Pict> ... </Pict>.
For example, a simple truss of the following type can be defined by:
The parameters here are the span width, the height as well as the cross-sectional area of the
bars. An input for SOFIMSHA could be defined as follows:
+PROG SOFIMSHA
HEAD TRUSS
NODE 1 0 0 PP
(2 4 1) (#1/4 #1/4) 0
5 #1 0 PP
NODE 6 #1/4 -#2/2
7 #1/2 -#2
8 3*#1/4 -#2/2
TRUS (1 4 1) (1 1) (2 1) NCS 1
TRUS 5 1 6 NCS 1
6 6 7 ==
7 7 8 ==
8 8 5 ==
TRUS (11 13 1) (2 1) (6 1) NCS 2
TRUS (14 15 1) (6 2) 3 NCS 2
END
More powerful data generation is available using loops. For example, the following input allows
the generation of a series of nodes on a hyperbolic arc:
+PROG SOFIMSHA
HEAD COOLING TOWER
! MERIDIAN HYPERBOLIC EQUATION (R/R0)**2-((Z-Z0)/ZZ)**2 = 1
! (R1/R0)**2-(-Z0/ZZ)**2 = 1 => (1/ZZ)**2
! (R2/R0)**2-((H-Z0)/ZZ)**2 = 1
! PARAMETER:
STO#H 160.0 ! TOTAL HEIGHT
STO#R0 30.0 ! SMALLEST RADIUS
STO#R1 55.0 ! RADIUS AT BOTTOM
STO#R2 35.0 ! RADIUS AT TOP
LET#1 SQR(#R1**2-#R0**2)
LET#Z0 #H*#1*(SQR(#R2**2-#R0**2)-#1)/(#R2**2-#R1**2)
LET#ZZ #Z0/SQR((#R1/#R0)**2-1.0)
LET#M 16 ! SUBDIVISION IN HEIGHT
For the beginner these inputs are likely to be confusing, however, this is a very powerful pos-
sibility which allows to automize frequently happening calculations. Many macros have devel-
oped from simple beginnings.
SOFiSTiK has to trade the readability of the manual, the catch of data errors and the compati-
bility of the data records.
• Input records will be extended most likely at the end of the structure, but if an entry fits
in better at an other position (e.g. third coordinate added) it will be inserted. Especially
designations will remain the last entry in most cases. Thus the user should use the names
of the item as a prefix for all extended data, eg.:
For larger data volumes the use of a table is always favourable, the use of explicit standard
items ’-’ should be avoided. For exported data the deletion of ”unnecessary” data may help
to reuse elder data records.
• It is also possible that the names of a record or the items will be changed. This is a strong
indication for a changed syntax or data format. The general procedure is that there will be
a warning about an obsolete feature to be removed in a future release. We recommend to
change data records to be intented to be used in upcoming versions rather soon. Althouh
we try to keep the obsoleted input as long as possible, it will be removed from the manuals
for the next major release.
• The most critical issue is the change of the format for an unchanged item name. We try to
catch old data definitions (eg. mm instead of m) or to issue a warning about possible old
data (If a warning is issued, an explicit unit definition might clearify the subject.) But the
user should control his data after a switch to a new major release thoroughly.
• However a rather common case is that the defaults have to be changed. This may be
triggered by change of the design codes, a better programming logic or the demands of our
customers. There is no golden way. If one specifies only the minimum range of values, one
may reuse the data more easily, but it may happen that a new release will produce different
results. The default to select national dependant parameters depending on the settings
of the operating system is a nice feature, but it may create different results on different
computers and should be avoided therefore.
A parameter in the input data or in a block can be referred to by using the syntax $(name).
Blank spaces are not allowed between $ and (. Upper/lower case letters have no influence.
The replacement can be recursive. Definitions like $(A$(INDEX)) are allowed.
Example:
PROG AQUA
CONC 1 B 25
STEE 1 BST 500
SREC 1 $(HEIGHT) $(WIDTH)
SREC 2 $(PLATE) ASU 2.3
END
PROG SOFIMSHA
SYST GIRD
NODE 1 0.0 0.0 FIX PP
NODE 2 $(LENGTH)/2 0.0
NODE 3 $(LENGTH)
BEAM 1 1 2 1
BEAM 2 2 3 1
END
Unlike the CADINP variables #() the $() variables are replaced by strings, so we can insert
literals or generation macros.
There are two default parameters, namely $(NAME) containing the primary name of the output
file and $(PROJECT) containing the name of the project. These can be helpful especially for
SYS commands.
Text blocks which are not defined in the input file can be set with a SET-record. When the
command (e.g. in the environment) is given:
SIZE $(SIZE)
Moreover it is possible to describe global parameters for SPS in a SOFISTIK.DEF file. This
results in a hierarchy of three layers:
Using blocks does not only free the user from copying re-occurring input lines, but also enables
the use of sub-programs.
Example:
#define SECT
$PROG AQUA
$ TRAPEZOIDAL CROSS-SECTION PARAMETER BO,BU,H
POLY UPZ
VERT 1 #1/2 -#3/2
2 #2/2 #3/2
CURF 3
#enddef
PROG AQUA
STEE 1 ST 37
SECT 1 ; LET#1 0.60,0.20,0.60
#include sect
SECT 2 ; LET#1 0.60,0.30,0.60
#include sect
SECT 3 ; LET#1 0.60,0.30,0.70
#include sect
END
When inserting files in UNIX it is important to consider the lower/uppercase letters used for
the filenames! The old formats $BLOCK BEG/END/SET are still supported, but should not be
used anymore.
While with #INCLUDE (see Section 2.9.2: #INCLUDE - Block Definitions) the data are inserted
before the calculation into the data set, the APPLY command is executed during the computa-
tion, i.e. the data can be generated during a calculation and thereafter be inserted at the right
place.
Additionally APPLY is controlled with a sign +/- , that means with +APPLY the command is
executed, with -APPLY it will be skipped.
A typical example for the use of APPLY is the program CSM (Construction Stage Manager).
With the CSM a file $(NAME)_csm.dat is created. This file is inserted with APPLY into the
calculation.
+PROG CSM
...
END
+APPLY "$(NAME)_csm.dat" $ contains at least one +PROG
+PROG ASE
...
END
The relevant control lines are familiar to all C-Programmers. In the first column the following
possibilities can be used:
#if expression
any line, also PROG and SYS
#else
any line, also PROG and SYS
#endif
”expression” may be just the name of a block or a variable which is evaluated to be true if it is
defined and not empty and not equal to zero. But it might be also a comparison $(MODE)==EC
or $(MODE) < >EC or $(MEMBERS)>3. Be aware however that the comparisons are purely
lexically based on strings, adjusted to the right for numbers, and to the left for all other cases.
Therefore we have A < B, AA < BA, 10 < 18 but unfortunately also 10.0 > 12.
If ”expression” is not true, the first block will be skipped and the block after #else will be used.
Naturally the second block can be omitted if not needed.
These constructions can be nested in up to 32 levels. An unmotivated #else or #endif will lead
to errors, as well as an unfinished construction.
Example:
#define DOAQB=0
#if DOAQB
PROG AQB
HEAD .....
LC .....
DESI .....
END
#endif
PROG STAR2
HEAD .....
#if DOAQB
$ Design with AQB
#else
DESI .....
#endif
.....
END
The indentation is only used for readability. In the above example STAR2 is used for the design.
If DOAQB=1, AQB is used for the design task.
2.9.5 Templates
A special form of input files is called a template. The structure of these files is given as follows:
#DEFINE L1=10.0
#DEFINE L2=20.0
#DEFINE L3=30.0
#DEFINE P=12.0
PROG AQUA
following al the data
In many cases this is like a normal dataset, which only includes the preface of the total analysis.
It is summarised under a special program name called TEMPLATE. The input consists only of
text and picture elements combined with arithmetic expressions. But the mechanism is general
available for all programs.
Now within Report Browser you may change the selected parameters and re-analyse this given
module. This allows other users to benefit from these macros which may contain rather com-
plicated treatment, but need only a few problem dependant parameters .
putation with different methods can be implemented by an iteration between AQB and STAR2.
The iteration is controlled by the parameter ITER of the record PROG.
The maximum number of iterations to be made is regulated by ITER (e.g. ITER 30), default is
20 iterations.
This mechanism has been extended with Release 23 for other combinations of general mod-
ules. To terminate the iteration it is required to specify within the CADINP-definition explicitly
EXIT_ITERATION.
PROG TEMPLATE
STO#TARGET 0 ; STO#PARAM 1.0
PROG AQUA ITER
RCL#PARAM
QNR .... Definition of sectuion using #PARAM
PROG AQB ITER
BEME .... Design and save results
ENDE
@KEY / LET# TARGET ... Calculate a target function to
become zero
IF ABS(#TARGET) < 0.001
EXIT_ITERATION
ELSE
STO#PARAM new_target_value
ENDIF