1.4 DYNAMIC MEMORY Z88

HEADER FILE Z88.DYN AND FILECHECKER Z88V

All Z88 modules allocate memory dynamically. Although Z88 is delivered with default values in Z88.DYN the user may and should modify the values for best operation of Z88. The file Z88.DYN is there to be modified .

The language is defined also in Z88.DYN. Enter into a line, best located between DYNAMIC START and NET START, the key word ENGLISH or GERMAN.

Z88.DYN starts with the key DYNAMIC START and ends with DYNAMIC END. There is a section for the mesh generator (NET START, NET END), a common section for all modules (COMMON START, COMMON END) and an additional section for the Cuthill McKee program (CUTKEE START, CUTKEE END). Blank lines or comments are optional, only the uppercased keywords are recognized. After the keyword follows an integer value, separated by at least one blank. The order of the keywords is optional.

You can check the memory needs defined in Z88.DYN for the memory critical modules Z88F , Z88I1 and Z88I2 with the Filechecker Z88V .

A proper modification is definitely a good idea.

However, do not request unnecessarily much memory since this causes speed losses , especially when using virtual memory.

Test the memory needs for large structures. Proceed as follows depending on the solver:

The direct Cholesky solver Z88F:

Windows: Z88F > Mode > Test Mode , Compute > Go
UNIX: z88f -t (console) or Z88F -T (Z88COM)

If you get here e.g. GS= 100,000, then enter, let's say, 120,000 for MAXGS in Z88.DYN but not 1,000,000 ! Then you estimate the total memory needs as described below or use Z88V.
Thus proceed for large structures for Z88 in 2 steps:

1st: State MAXGS

Windows: Z88F > Mode > Test Mode , Compute > Go
UNIX: z88f -t (console) or Z88F -T (Z88COM)

2nd: Correct Z88.DYN if necessary, state memory needs of Z88F with Z88V

See the necessary memory MAXGS and MAXKOI, Windows. Looks similar on UNIX systems.

The sparse matrix solvers Z88I1 (part 1) and Z88I2 (part 2) or Z88PAR (part 2)

There's no test mode available because the first part of the iteration solver Z88I1 detects the memory needs for the second part Z88I2:

See the necessary memory MAXGS and MAXKOI, Windows. Looks similar on UNIX systems.

However, the procedure for the sparse matrix solvers is quite tricky because you must define memory MAXIEZ for the assembly of the sparse matrix. There is no way to pre-determine the needed memory but Z88I1 tells you if MAXIEZ was too small. Then, increase MAXIEZ in Z88.DYN and run Z88I1 again. Thus proceed for large structures for Z88 in 3 or more steps:

1st: run Z88I1

2nd: if Z88I1 completed properly, read off the values for MAXGS and MAXKOI and adjust Z88.DYN, if necessary. Now memory is proper adjusted for Z88I2 and Z88PAR.

3rd: if Z88I1 stopped because of lack of MAXIEZ increase MAXIEZ in Z88.DYN and run Z88I1 again. Repeat this step until Z88I1 completes properly.

Make sure that your swap space is sufficient. Adjust if necessary:

Windows: Start > Settings > Control Panel > System > Performance > Virtual Memory > Change. UNIX: Depending on the various UNIX operating systems the swap partition can be easily extended dynamically or an additional swap file must be created or the swap area must be deleted and a new swap area created with extended size.

There are no limits for the size of the structures for Z88. The maximum size is limited only by virtual memory of your computer and your imagination! However, for very large structures you may use Z88 with 64 Bit integers and pointers (i.e. the 64 Bit Z88 versions for Windows Server or Vista 64 bit or LINUX 64-Bit) to avoid overflows of internal loop counters etc.

The Z88 modules check whether the predefined memory is sufficient for the current problem or if limits are reached and stop if necessary. At commentless breakdown of a Z88 module check the accompanying .LOG file. Often the value for MAXKOI was too small! Caution UNIX: If Z88 modules refuse to start, check the permissions of the .LOG files. The .LOG files record the memory needs. Some more memory is needed for the program, local arrays and stack which one can neglect for Windows or UNIX.

The Z88 32 Bit versions for Windows and LINUX deal with

- Floating point numbers with Doubles = 8 bytes
- Integers and pointers with Longs = 4 bytes.

The Z88 64 Bit versions for Windows and LINUX deal with

- Floating point numbers with Doubles = 8 bytes
- Integers and pointers with Longs = 8 bytes.

However, on several UNIX machines you may compile (compiler switches and compiler directive FR_XQUAD) the solver modules using

- Floating point numbers with long Doubles = 16 bytes = 128 bit
- Integers with long Longs = 8 bytes = 64 bit.

Attention: 64 Bit Integers are usefull for very large structures i.e. > 2 ~ 3 mio. of DOF for avoiding internal overflows. However, using 128 Bit floats is much more time-consuming than 64 Bit floats. Test runs with a SUN FIRE V890 with quad precision at my institute at the University of Bayreuth in Germany caused five to ten times more CPU time than double precision! Thus, I recommend using 64 bit integers and 64 bit floats on larger computers.

Critical for the memory are Z88F, Z88I1 and Z88I2. If these modules run, then the rest will run, too. Attention Z88PAR: This solver deals heavily with dynamic memory when running, thus, this solver may run out of memory during operation. If this happens, launch Z88I2 instead.

The general description follows for Z88.DYN.

DYNAMIC START

Adjusting Language: ENGLISH or GERMAN. If nothing is entered or the entry is wrong, English language is used automatically.

Section Net Generator:

NET START
MAXSE Maximum number of internal nodes for FE net generation. Must be clearly higher than produced FE nodes.
MAXESS Maximum number of super elements
MAXKSS Maximum number of super nodes
MAXAN Maximum number of nodes which can meet a super element. The default of 15 has proven well even for complex space structures with Hexahedrons No.10. May be increased in case of doubt.
NET END

Common Data:

COMMON START
MAXGS Maximum number of entries in the total stiffness matrix. Actual number GS is recorded by Z88F and Z88I1.
MAXKOI Maximum number of entries in the coincidence vector = number nodes per element * number of finite elements. Example: 200 finite elements No.10 = 20 nodes per element * 200 = 4000. At mixed structures take the element type with most nodes and multiply by the number of elements. Required number of NKOI is recorded by Z88F and Z88I1.
MAXK Maximum number of nodes in the structure.
MAXE Maximum number of elements in the structure.
MAXNFG Maximum number of degrees of freedom in the structure.
MAXNEG Maximum number of material info lines for the structure.
MAXPR Maximum number of surface and pressure loads
MAXRBD Maximum number of boundary conditions (used only by Z88O)
MAXIEZ For the sparse matrix solver part 1 i.e. Z88I1 only. Z88I1 uses an array with the size of MAXIEZ. There is no way to pre-determine the needed memory but Z88I1 tells you if MAXIEZ was too small. In this case you must increase MAXIEZ and launch Z88I1 again.
MAXGP Maximum number of Gauss points (used only by Z88O)
COMMON END

For the Cuthill-McKee program:

CUTKEE START
MAXGRA maximum degree of nodes
MAXNDL steps of the algorithm
CUTKEE END

DYNAMIC END

You may state with Z88V which amount of memory the various Z88 modules will request.

About to show the memory defined by Z88.DYN, Windows Z88.