1 2\chapter{The setup} 3\label{setup} 4 5When \FORM\ is started, it has a number of settings\index{setup} built in 6that were determined during its installation\index{installation}. If the 7user would like to alter these settings, it is possible to either specify 8their desired values in a setup file\index{file!setup} or to do so at the 9beginning of the program file\index{file!program}. There are two ways in 10which \FORM\ can find a setup file. The first way is by having a file named 11`form.set'\index{form.set} in the current directory. If such a file is 12present, \FORM\ will open it and interpret its contents as setup parameters. 13If this file is not present, one may specify a setup file with the -s 14option in the command tail. This option must precede the name of the input 15file. After the -s follow one or more blanks or tabs and then the full name 16of the setup file. \FORM\ will try to read startup parameters from this file. 17If a file `form.set' is present, \FORM\ will ignore the -s option and its 18corresponding file name. This order of interpretation allows the user to 19define an alias with a standard setup file which can be overruled by a 20local setup file. If, in the beginning of the program file, before any 21other statements with the exception of the \#- instruction and commentary 22statements, there are lines that start with \#: the remaining contents of 23these lines are interpreted exactly like the lines in the setup file. The 24specifications in the program file take precedence\index{precedence} over 25all other specifications. If neither of the above methods is used, \FORM\ 26will use a built in set of parameters. Their values may depend on the 27installation and are given below. 28 29The following is a list of parameters that can be set. The syntax is rather 30simple: The full word must be specified (case insensitive), followed by one 31or more blanks or tabs and the desired number, string or character. 32Anything after this is considered to be commentary. In the setup file lines 33that do not start with an alphabetic character are seen as commentary. The 34sizes of the buffers are given in bytes, unless mentioned otherwise. A word 35is 2 bytes for 32\index{32 bits} bit machines and 4 bytes for 64\index{64 36bits} bit machines. 37 38In \FORM\ version 3.3 and later, it is also allowed to define 39preprocessor variables\index{preprocessor variables} (see also 40\ref{preprovariables}) in the setup file. In addition one can use 41preprocessor variables in the setup, provided it is not in the name of the 42parameter/keyword. 43 44\leftvitem{4.0cm}{bracketindexsize\index{setup!bracketindexsize}\index{bracketindexsize}} 45\rightvitem{12.6cm}{Maximum size in bytes of any individual index of a 46bracketted expression. Each expression will have its own index. The index 47starts with a relatively small size and will grow if needed. But it will 48never grow beyond the specified size. If more space is needed, \FORM\ will 49start skipping brackets and find those back later by linear search. See 50also chapter~\ref{brackets} and section~\ref{substabracket}.} 51 52\leftvitem{4.0cm}{CommentChar\index{setup!commentchar}\index{commentchar}} 53\rightvitem{12.6cm}{This should be followed by one or more blanks and a 54single non-blank character. This character will be used to indicate 55commentary, instead of the regular $*$ in column 1.} 56 57\leftvitem{4.0cm}{CompressSize\index{setup!compresssize}\index{compresssize}} 58\rightvitem{12.6cm}{When compressing output terms, \FORM\ needs a compression 59buffer. This buffer deals recursively with compression and decompression of 60terms that are either written or read. Its size will be at least 61MaxTermSize but when there is heavy use of expressions in the right hand 62side of definitions or substitution it would have to be considerably 63longer. It is hoped that in the future this parameter can be eliminated. 64CompressSize should be given in bytes.} 65 66\leftvitem{4.0cm}{ConstIndex\index{setup!constindex}\index{constindex}} 67\rightvitem{12.6cm}{This is the number of indices that are considered to be 68constant indices like in fixed vector components (the so-called fixed 69indices). The size of this parameter is not coupled to any array space, but 70it should not go much beyond 1000 on a 32\index{32 bits} bit machine. On a 7164\index{64 bits} bit machine it can go considerably further.} 72 73\leftvitem{4.0cm}{ContinuationLines\index{setup!continuationlines}\index{continuationlines}} 74\rightvitem{12.6cm}{The number of continuation lines that the local Fortran 75compiler will allow. This limits the number of continuation lines, when the 76output option `Format Fortran' (see \ref{substaformat}) is selected.} 77 78\leftvitem{4.0cm}{Define\index{setup!define}\index{define}} 79\rightvitem{12.6cm}{The syntax is as in the \#define instruction in the 80preprocessor (see \ref{preprovariables}), with the remark that in the setup 81file there should be no leading \# character as that would make the line 82into commentary. Example: \hfill \\ 83{\tt\ \ \ \ define MODULUS "31991"} \hfill \\ 84which could be used 85at a later point in the program to activate a modulus statement (see 86\ref{substamodulus}).} 87 88\leftvitem{4.0cm}{DotChar\index{setup!dotchar}\index{dotchar}} 89\rightvitem{12.6cm}{There should be a single character following this name 90(and the blank(s) after it). This character will be used instead of the \_, 91when dotproducts\index{dotproducts} are printed in Fortran\index{Fortran} 92output. This option is needed because some Fortran compilers do not 93recognize the underscore as a valid character. In the olden days one could 94use here the dollar character but nowadays many Fortran compilers do not 95recognize this character as belonging to a variable name.} 96 97\leftvitem{4.0cm}{FunctionLevels\index{setup!functionlevels}\index{functionlevels}} 98\rightvitem{12.6cm}{The maximum number of levels that may occur, when 99functions have functions in their arguments.} 100 101\leftvitem{4.0cm}{HideSize\index{setup!hidesize}\index{hidesize}} 102\rightvitem{12.6cm}{The size of the hide buffer. The size of this buffer is 103normally set equal to scratchsize (see below). If one uses the setting of 104HideSize after the setting of ScratchSize, one can give the hide buffer its 105own size. There are cases that this can make the program faster.} 106 107\leftvitem{4.0cm}{IncDir\index{setup!incdir}\index{incdir}} 108\rightvitem{12.6cm}{Directory (or path of directories) in which \FORM\ will 109look for files if they are not to be found in the current directory. This 110involves files for the \#include\index{\#include} and \#call\index{\#call} 111instructions. This variable takes precedence over the 112Path\index{setup!path}\index{path} variable.} 113 114%\leftvitem{4.0cm}{IndentSpace\index{setup!indentspace}\index{indentspace}} 115%\rightvitem{12.6cm}{} 116 117\leftvitem{4.0cm}{InsideFirst\index{setup!insidefirst}\index{insidefirst}} 118\rightvitem{12.6cm}{Not having any effect at the moment.} 119 120\leftvitem{4.0cm}{JumpRatio\index{setup!jumpratio}\index{jumpratio}} 121\rightvitem{12.6cm}{See the endswitch (\ref{substaendswitch}) statement.} 122 123\leftvitem{4.0cm}{MaxNumberSize\index{setup!maxnumbersize}\index{maxnumbersize}} 124\rightvitem{12.6cm}{Allows the setting of the maximum size of the numbers 125in \FORM. The number should be given in words. For 32\index{32 bits} bit 126systems a word is two bytes and for 64\index{64 bits} bit systems a word is 1274 bytes. The number size is always limited by the maximum size of the terms 128(see MaxTermSize). Actually it has to be less than half of MaxTermSize 129because a coefficient contains both a numerator and a denominator. It is 130not always a good idea to have the number size at its maximum value, 131especially when MaxTermSize is large. In that case it could be very long 132before a runaway algorithm runs into limitations of size (arithmetic for 133very long fractions is not very fast due to the continuous need for 134computing GCD's)} 135 136\leftvitem{4.0cm}{MaxTermSize\index{setup!maxtermsize}\index{maxtermsize}} 137\rightvitem{12.6cm}{This\label{setupmaxtermsize} 138is the maximum size that an individual term may occupy in words. This 139size does not affect any allocations. One should realize however that the 140larger this size is the heavier the demand can be on the workspace, because 141the workspace acts as a heap during the execution and sometimes allocations 142have to be made in advance, before \FORM\ knows what the actual size of the 143term will be. Consequently the evaluation tree cannot be very deep, when 144WorkSpace / MaxTermSize is not very big. MaxTermSize controls mainly how 145soon \FORM\ starts complaining about terms that are too complicated. Its 146absolute maximum is 32568 on 32\index{32 bits} bit systems and about $10^9$ 147on 64\index{64 bits} bit systems (of course the workspace would have to be 148considerably larger than that....).} 149 150\leftvitem{4.0cm}{MaxWildCards\index{setup!maxwildcards}\index{maxwildcards}} 151\rightvitem{12.6cm}{The maximum number of wildcards that 152can be active in a single matching of a pattern. Under normal circumstance 153the default value of 100 should be more than enough.} 154 155\leftvitem{4.0cm}{NoSpacesInNumbers\index{setup!nospacesinnumbers}\index{nospacesinnumbers}} 156\rightvitem{12.6cm}{Long\label{nospacesinnumbers} numbers are usually spread over several lines 157by placing a backspace character at the end of each line and then 158continuing at the next line. For cosmetic purposes \FORM\ puts usually a few 159blank spaces at the beginning of the new line. \FORM\ itself can read this but 160some programs cannot. Hence one can put \FORM\ in a mode in which these 161blanks are omitted. The values of the variable are ON or OFF. There is also 162a command to change this behaviour at runtime. See the on and off commands 163in sections \ref{staonnospacesinnumbers} and \ref{staoffnospacesinnumbers}.} 164 165\leftvitem{4.0cm}{NumStoreCaches\index{setup!numstorecaches}\index{numstorecaches}} 166\rightvitem{12.6cm}{This number determines how many store caches (see 167the description of the SizeStoreCache setup parameter below) there will 168be. In the case of parallel processing this will be the number of caches 169per processor.} 170 171\leftvitem{4.0cm}{NwriteStatistics\index{setup!nwritestatistics}\index{nwritestatistics}} 172\rightvitem{12.6cm}{When this word is mentioned, the default setting for the 173statistics is that no run time statistics will be shown. Ordinarily they 174will be shown.} 175 176\leftvitem{4.0cm}{NwriteThreadStatistics\index{setup!nwritethreadstatistics} 177\index{nwritethreadstatistics}} 178\rightvitem{12.6cm}{\vspace{1ex}This variable has the values ON or OFF. It controls for 179\TFORM{} whether the statistics of the individual threads will be printed. The 180default value is ON.} 181 182\leftvitem{4.0cm}{OldOrder\index{setup!oldorder}\index{oldorder}} 183\rightvitem{12.6cm}{A special flag (values ON/OFF) by which one can still 184select the old option of not checking for the order of statements inside a 185module. This should be used only in the case that it is nearly impossible 186to change a program to the new mode in which the order of the statements 187(declarations etc) is relevant. In the future this old mode may not exist.} 188 189\leftvitem{4.0cm}{Parentheses\index{setup!parentheses}\index{parentheses}} 190\rightvitem{12.6cm}{The maximum number of nestings of parentheses or 191functions inside functions. The variable may be eliminated in a later 192version.} 193 194\leftvitem{4.0cm}{Path\index{setup!path}\index{path}} 195\rightvitem{12.6cm}{Directory (or path of directories) in which \FORM\ will 196look for files if they are not to be found in the current directory. This 197involves files for the \#include\index{\#include} and \#call\index{\#call} 198instructions. \FORM\ will test this path after a potential path specified as 199IncDir\index{setup!incdir}\index{incdir}.} 200 201%\leftvitem{4.0cm}{PolyGCDchoice\index{setup!polygcdchoice}\index{polygcdchoice}} 202%\rightvitem{12.6cm}{} 203 204\leftvitem{4.0cm}{ProcedureExtension\index{setup!procedureEetension}\index{procedureextension}} 205\rightvitem{12.6cm}{The extension that will be used by \FORM\ for finding the 206procedures that are in separate files. Restrictions on the strings used are 207as explained in the preprocessor 208\#procedureextension\index{\#procedureextension} instruction in section 209\ref{preprocedureextension}.} 210 211\leftvitem{4.0cm}{ProcessBucketSize\index{setup!processbucketsize}\index{processbucketsize}} 212\rightvitem{12.6cm}{\label{setupprocessbucketsize} For the parallel version 213\ParFORM. It is ignored in other versions. Tells \ParFORM\ how many terms 214there should be in the buckets that are being distributed over the 215secondary processors. See also \ref{substaprocessbucketsize}.} 216 217\leftvitem{4.0cm}{ResetTimeOnClear\index{setup!resettimeonclear}\index{resettimeonclear}} 218\rightvitem{12.6cm}{The value is ON or OFF. The default value is ON. This 219means that by default the clock is reset after each .clear\index{.clear} 220(see chapter \ref{modules} on modules) instruction at the end of a module.} 221 222\leftvitem{4.0cm}{ScratchSize\index{setup!scratchsize}\index{scratchsize}} 223\rightvitem{12.6cm}{The size of the input and the output buffers for the 224regular algebra processing. Terms are read in in chunks this size and are 225written to the output file using buffers of this size. There are either two 226or three of these buffers, depending on whether the hide\index{hide} 227facility is being used (see \ref{substahide}). These buffers must have a 228size that is at least as large as the MaxTermSize\index{maxtermsize}. These 229buffers act as caches for the files with the extension .sc1\index{.sc1}, 230.sc2\index{.sc2} and .sc3\index{.sc3}. See also the HideSize parameter 231above for the independent setting of the size of the hide buffer.} 232 233\leftvitem{4.0cm}{SizeStoreCache\index{setup!sizestorecache}\index{sizestorecache}} 234\rightvitem{12.6cm}{The size of the caches\index{caches} that are used for 235reading terms when stored expressions are used in the r.h.s.\ of a 236statement. Typically there are several such caches and they make the 237reading much faster. In the case of parallel processing these caches become 238very important because without them the different processes may all want to 239read from the .str\index{.str} file\index{file!store} at the same time and 240execution speed will suffer badly. The number of store caches is determined 241by the NumStoreCaches\index{numstorecaches} setup parameter which is 242described above. The size of these caches doesn't have to be very large as 243compared to some of the other buffers. It is recommended though to have 244them at least as large as MaxTermSize\index{maxtermsize} (see above).} 245 246\leftvitem{4.0cm}{SortType\index{setup!sorttype}\index{sorttype}} 247\rightvitem{12.6cm}{Possible values are "lowfirst"\index{lowfirst}, 248"highfirst"\index{highfirst} and "powerfirst"\index{powerfirst}. "lowfirst" 249is the default. Determines the order in which the terms are placed during 250sorting. In the case of lowfirst, lower powers of symbols and dotproducts 251come before higher powers. In the case of highfirst it is the opposite. In 252the case of powerfirst the combined powers of all symbols together are 253considered and the highest combined powers come first. See also the 254on\index{on} statement in \ref{substaon}.} 255 256\leftvitem{4.0cm}{TempDir\index{setup!tempdir}\index{tempdir}} 257\rightvitem{12.6cm}{This variable should contain the name of a directory 258that is the directory in which \FORM\ should make its temporary files. If the 259-t option is used when \FORM\ is started, the TempDir variable in the 260setup file is ignored. \FORM\ can create a number of different temporary 261files.} 262 263\leftvitem{4.0cm}{TempSortDir\index{setup!tempsortdir}\index{tempsortdir}} 264\rightvitem{12.6cm}{This variable should contain the name of a directory 265that is the directory in which \FORM{} should make its temporary sort files. 266If the -ts option is used when \FORM{} is started, the TempSortDir variable in 267the setup file is ignored. If TempSortDir is not specified, then the value of 268TempDir is used also for sort files.} 269 270\leftvitem{4.0cm}{ThreadBucketSize\index{setup!threadbucketsize}\index{threadbucketsize}} 271\rightvitem{12.6cm}{Only relevant for \TFORM. The size of the number of 272terms sent to the workers simultaneously. 273For details see the chapter on the parallel version (\ref{parallel}).} 274 275\leftvitem{4.0cm}{ThreadLoadBalancing\index{setup!threadloadbalancing}\index{threadloadbalancing}} 276\rightvitem{12.6cm}{\indent Only relevant for \TFORM. Possible values are ON 277or OFF. For details see the chapter on the parallel version (\ref{parallel}).} 278 279\leftvitem{4.0cm}{Threads\index{setup!threads}\index{threads}} 280\rightvitem{12.6cm}{Only relevant for \TFORM\ (see chapter on the parallel 281version). Specifies the default number of worker threads to be used. The 282values 0 and 1 will indicate that running will only be done by the master 283thread (\ref{parallel}).} 284 285\leftvitem{4.0cm}{ThreadScratchOutSize\index{setup!threadscratchoutsize}\index{threadscratchoutsize}} 286\rightvitem{12.6cm}{The size of the output scratch buffers for each of the 287worker threads. These buffers will be used when the InParallel 288statement~\ref{substainparallel} is active. They are used to catch the 289output of the expressions as processed by the individual workers before 290they are copied to the output scratch buffer/file of the master. The output 291scratch buffer/file of each worker will never contain more than one 292expression at a time.} 293 294\leftvitem{4.0cm}{ThreadScratchSize\index{setup!threadscratchsize}\index{threadscratchsize}} 295\rightvitem{12.6cm}{The size of the input scratch buffers for each of the 296worker threads. These buffers are only used when the main scratch buffers 297of the master process aren't sufficient and scratch files have been made. 298When the buffers of the master are big enough, the workers only use 299pointers to the buffer of the master. Once there are scratch files the 300buffer is used for caching the input from those files. In that case each 301worker has its own cache. For reading purposes it can actually be counter 302productive if these buffers are very large. This parameter sets the value 303for the input and the hide\index{hide} scratch files. The output scratch 304size for the workers is set with the ThreadScratchOutSize parameter.} 305 306%\leftvitem{4.0cm}{ThreadSortFileSynch\index{setup!threadsortfilesynch}\index{threadsortfilesynch}} 307%\rightvitem{12.6cm}{\indent Only relevant for \TFORM. Possible values are ON 308%or OFF. For details see the chapter on the parallel version (\ref{parallel}).} 309 310\leftvitem{4.0cm}{TotalSize\index{setup!totalsize}\index{totalsize}} 311\rightvitem{12.6cm}{Puts \FORM\ in a mode in which it tries to determine 312the maximum space occupied by all expressions at any given moment during 313the execution of the program. This space is the sum of the 314input/output/hide scratch files, the sort file(s) and the .str file. This 315maximum is printed at the end of the program. The same can be obtained with 316the "On TotalSize" statement (see \ref{ontotalsize}) or the -T option 317in the command tail when \FORM\ is started (see \ref{running}).} 318 319\leftvitem{4.0cm}{WorkSpace\index{setup!workspace}\index{workspace}} 320\rightvitem{12.6cm}{The size of the heap that is used by the algebra 321processor when it is evaluating the substitution tree. It will contain 322terms, half finished terms and other information. The size of the workspace 323may be a limitation on the depth of a substitution tree.} 324 325\leftvitem{4.0cm}{WTimeStats\index{setup!wtimestats}\index{wtimestats}} 326\rightvitem{12.6cm}{Turns on the wall-clock time mode in the statistics. 327See the `\texttt{On wtimestats}' statement~\ref{substaon}.} 328 329Variables that take a path\index{path} for their value expect a sequence of 330directories, separated by colon characters as in the UNIX\index{UNIX} way 331to define such objects. 332 333The above parameters are conceptually relatively easy. The parameters that 334are still left are more complicated and are often restricted in their 335size by some relationships. Hence it is necessary to understand the 336sorting inside \FORM\ a little bit before using them. On the other hand 337these parameters can influence the performance noticeably. See also chapter 338\ref{sorting} for more details. 339 340When terms are send to `output' by the main algebra engine, they are put 341inside a buffer. This buffer is called the `small\index{small buffer} 342buffer\index{buffer!small}'. Its size is given by the variable {\sl 343SmallSize\index{smallsize}}. When this buffer is full, or when the number 344of terms in this buffer exceeds a given maximum, indicated by the variable 345{\sl TermsInSmall\index{termsinsmall}}, the contents of the buffer are 346sorted. The sorting is done by pointers, hence it is important that the 347small buffer resides inside the physical memory. During the sorting it may 348happen that coefficients are added. The sum of two rational numbers can 349take more space than any of the individual numbers, so there will be a 350space problem. This has been solved by the construction of an extension to 351the small buffer. The variable {\sl SmallExtension\index{smallextension}} 352is the size of the small buffer together with this extension. The value for 353SmallExtension will always be at least 7/6 times the value of SmallSize. 354 355The result of the sorting of the small buffer is written to the 356`large\index{large buffer} buffer\index{buffer!large}' (with the size {\sl 357LargeSize\index{largesize}}) as a single object and the filling of the 358small buffer can resume. Whenever there is not enough room in the large 359buffer for the result of sorting the small buffer, or whenever there are 360already a given number of these sorted `patches' in it (controlled by the 361variable {\sl LargePatches\index{largepatches}}) the buffer will be sorted 362by merging the patches\index{patch} to make room for the new results. The 363output is written to the sort file as a single patch. Then the results from 364the small buffer can be written to the large buffer. This game can continue 365till no more terms are generated. In the end it will be necessary to sort 366the results in the intermediate sort file\index{file!sort}. This can be 367done with up to {\sl FilePatches\index{filepatches}} at a time. Because 368file operations are notoriously slow the combination of the small buffer, 369the small extension and the large buffer is used for caching\index{cache} 370purposes. Hence this space can be split in `FilePatches' caches. The 371limitation is that each cache should be capable to contain at least two 372terms of maximal size. This means that the sum of SmallExtension and 373LargeSize must be at least FilePatches times 2*MaxTermSize*(bytes in short 374integer). It is possible to set the size of these caches directly with the 375variable {\sl SortIOsize\index{sortiosize}}. If the variable is too large, 376the variable FilePatches may be adjusted by \FORM. If there are more than 377FilePatches patches in the sort file, a second sort file is needed for the 378output of each `superpatch'\index{superpatch}. When the first sort file has 379been treated, the second sort file can be treated in exactly the same way 380as its predecessor. This process will finish eventually. When there are at 381most FilePatches patches in a sort file, the output of their merging can be 382written directly to the regular output. For completeness we give a list of 383all these variables: 384 385\leftvitem{3cm}{FilePatches\index{setup!filepatches}\index{filepatches}} 386\rightvitem{13cm}{The maximum number of patches that can be merged 387simultaneously, when the intermediate sort file is involved.} 388 389\leftvitem{3cm}{LargePatches\index{setup!largepatches}\index{largepatches}} 390\rightvitem{13cm}{The maximum number of patches that is allowed in the 391large buffer. The large buffer may reside in virtual memory, due to the 392nature of the sort that is applied to it.} 393 394\leftvitem{3cm}{TermsInSmall\index{setup!termsinsmall}\index{termsinsmall}} 395\rightvitem{13cm}{The maximum number of terms that is allowed in the small 396buffer before it is sorted. The sorted result is either copied to the large 397buffer or written to the intermediate sort file (when LargeSize is too 398small).} 399 400\leftvitem{3cm}{SmallSize\index{setup!smallsize}\index{smallsize}} 401\rightvitem{13cm}{The size of the small buffer in bytes.} 402 403\leftvitem{3cm}{SmallExtension\index{setup!smallextension}\index{smallextension}} 404\rightvitem{13cm}{The size of the small buffer plus its extension.} 405 406\leftvitem{3cm}{LargeSize\index{setup!largesize}\index{largesize}} 407\rightvitem{13cm}{The size of the large buffer.} 408 409\leftvitem{3cm}{SortIOsize\index{setup!sortiosize}\index{sortiosize}} 410\rightvitem{13cm}{The size of the buffer that is used to write to the 411intermediate sorting file and to read from it. It should be noted that if 412this buffer is not very large, the sorting of large files may become rather 413slow, depending on the operating system. Hence we recommend a potential 414fourth stage in the sorting over having this number too small to fit more 415filepatches in the combined small and large buffer. Setting the small and 416large buffers to a decent size may avoid all problems by a: making more 417space for the caching, b: creating fewer file patches to start with.} 418 419There is a second set of the above setup parameters for sorts of 420subexpressions\index{subexpressions} as in function arguments or in the 421term environment (see \ref{substaterm}). Because these things can happen 422with more than one level, whatever allocations have to be made (during 423runtime when needed) may have to be made several times. Hence one should be 424far more conservative here than with the global allocations. Anyway, those 425sorts should rarely involve anything very big. With the function arguments 426the condition is that the final result will fit inside a single term, but 427with the term environment no such restriction exists. The relevant 428variables here are subfilepatches, sublargepatches, sublargesize, 429subsmallextension, subsmallsize, subsortiosize and subtermsinsmall. Their 430meanings are the same as for the variables without the sub in front. 431 432When \FORM\ is running in parallel mode (either \TFORM\ or \ParFORM) each worker 433will need its own buffers. In \ParFORM\ in which the processors each control 434their own memory, the size of each of these buffers are the same as for the 435master process. In \TFORM\ with its shared memory the above sizes refer to 436the buffers of the master thread. The workers each get basically buffers 437with 1/N times the size of the buffer of the master. This may get made a 438bit bigger when potential conflicts with MaxTermSize occur. 439 440The default settings are 441\begin{center} 442\begin{tabular}{lrr} 443Variable & 32-bits & 64-bits \\ \hline 444bracketindexsize & 200000 & 200000 \\ 445commentchar & $*$ & $*$ \\ 446compresssize & 90000 & 90000 \\ 447constindex & 128 & 128 \\ 448continuationlines & 15 & 15 \\ 449dotchar & . & . \\ 450filepatches & 256 & 256 \\ 451functionlevels & 30 & 30 \\ 452hidesize & 50000000 & 50000000 \\ 453incdir & . & . \\ 454%indentspace & & \\ 455insidefirst & ON & ON \\ 456largepatches & 256 & 256 \\ 457largesize & 50000000 & 50000000 \\ 458maxnumbersize & 200 & 200 \\ 459maxtermsize & 10000 & 40000 \\ 460maxwildcards & 100 & 100 \\ 461nospacesinnumbers & OFF & OFF \\ 462numstorecaches & 4 & 4 \\ 463nwritefinalstatistics & OFF & OFF \\ 464nwritestatistics & OFF & OFF \\ 465nwritethreadstatistics &OFF & OFF \\ 466oldorder & OFF & OFF \\ 467parentheses & 100 & 100 \\ 468path & . & . \\ 469%polygcdchoice & 0 & 0 \\ 470processbucketsize & 1000 & 1000 \\ 471scratchsize & 50000000 & 50000000 \\ 472sizestorecache & 32768 & 32768 \\ 473smallextension & 20000000 & 20000000 \\ 474smallsize & 10000000 & 10000000 \\ 475sortiosize & 100000 & 100000 \\ 476sorttype & lowfirst & lowfirst \\ 477subfilepatches & 64 & 64 \\ 478sublargepatches & 64 & 64 \\ 479sublargesize & 4000000 & 4000000 \\ 480subsmallextension & 800000 & 800000 \\ 481subsmallsize & 500000 & 500000 \\ 482subsortiosize & 32768 & 32768 \\ 483subtermsinsmall & 10000 & 10000 \\ 484tempdir & . & . \\ 485tempsortdir & . & . \\ 486termsinsmall & 100000 & 100000 \\ 487threadbucketsize & 500 & 500 \\ 488threadloadbalancing & ON & ON \\ 489threads & 0 & 0 \\ 490threadsortfilesynch & OFF & OFF \\ 491threadscratchoutsize & 2500000 & 2500000 \\ 492threadscratchsize & 100000 & 100000 \\ 493workspace & 10000000 & 40000000 494%zipsize & 32768 & 32768 495\end{tabular} 496\end{center} 497If one compares these numbers with the corresponding numbers for older 498versions one will notice that here we assume that the standard computer 499will have much more memory available than in the `old time'. Basically we 500expect that a serious \FORM\ user has at least 64 Mbytes available. If it is 501considerably less one should define a setup file with smaller settings. 502 503More recently a new notation for large numbers has been allowed. One can 504use the characters K, M, G and T to indicate kilo (three zeroes), mega (6 505zeroes), giga (9 zeroes) and tera (12 zeros) as in 10M for 10000000. 506 507To find out what the setup values are, one can use the `ON,setup;' 508statement (\ref{substaon}). 509 510In version 3.3 and later one may use environment\index{environment} 511variables for the values of the setup parameters, either in the setup file 512or at the beginning of the .frm file. The environment variable is used as a 513preprocessor variable in the sense that its name is enclosed in a 514backquote-quote pair as in \verb:`VARNAME':. The variable will be looked 515for and if found it will be substituted. This can however not be done in a 516recursive way, because the regular routines that take care of the 517preprocessor variables are not active yet when the setups are read. 518