A F E M - FEM Code

Description of AFEM


Design of code is old-fashioned a bit - no objects, no C++. Software consists from two main parts - non-interactive finite element solver and combined pre/postprocessor (optionally with GUI).

Software has been written using C language (with respect of ANSI/ISO standard) using these libraries:

  • HDF5 - data storage,
  • OpenGL - graphics representation of data,
  • gl2ps - saving of OpenGL output to PostScript,
  • Gtk+ - GUI,
  • gtkglarea - OpenGL support for Gtk+,
  • gtkglext - OpenGL support for Gtk+ 2.x (not used but planned),
  • glut or freeglut - for OpenGL font rendring (not very good but works).

AFEM can be localised to anz language using gettext (GNU or BSD).

Interaction with user

There is a GUI interface for postprocessing (in future for preprocessing, too). GUI is not required if user don't need graphic results (there is a nice command line interface). Program (except solver that is fully non-interactive) is driven through command interpreter (there are nice GUI dialogs for all commands). To make user's life better, there are some things for scripting ("for" and "if" commands, variables, etc.).

Program speed, code effectivity

There are no plans to make the world's most efective or fastest code.
There are many things that make code slow and uneffective but makes coding easier (this is important for future code modifications). So there are some uneffective things - "small" matrices are always full (even if they are symmetric or sparse), symmetry of structure stifness matrix is ignored,...
But solution is not so slow (for example - solution of structure with s 20 402 degrees of freedom and with 10 000 finite elements needs about 29 seconds on old Athlon (Thunderbird) 1.333 MHz).

Times for larger solution (45 000 DOFs):

Computer (CPU) Frequency [MHz] Time [min]
SGI Indy R5000/150 150 15
Intel Pentium 150 18 (1129.54 s)
AMD K6-2 266 13
AMD Athlon 1333 1.3 (79.44 s)

Note that these data are for reader's orientation only.

If you have a question, please send e-mail to me.