Contents


SLFFEA HOME

SLFCFD HOME

SLFCEM HOME

GUI

Image Gallery

Download

Philosophy

Preamble

FAQ

GNU/Linux

Update

Development

Acknowledgments

Links

CFD

Periodic Table





Stuff About Me

San Le

Artwork

Email

SLFFEA FAQ

Updated 4/18/01


  1. What is SLFFEA?
  2. Isn't that kind of vain having your name in the acronym?
  3. What do I need to run SLFFEA?
  4. What is SS-GUI?
  5. What is the P-Winston Motion Engine?
  6. Why are the stress, strain, moment and curvature discontinuous across element boundaries?
  7. What are your qualifications to write FEA code?
  8. What motivated you to write this?
  9. How do you install Mesa ?
  10. Why am I getting the error GL/glut.h: No such file or directory?
  11. What does your /usr/X11R6/lib and /usr/include/GL look like?
  12. Does SLFFEA allow for hybrid elements like beam/shell combinations?
  13. Does SLFFEA include mesh generators?
  14. What units does SLFFEA use?
  15. Why do I get "command not found" when I try the text executables in the data directories?

  1. What is SLFFEA?

    SLFFEA stands for San Le's Free Finite Element Analysis. It is a package of scientific software and graphical user interfaces for use in finite element analysis. It is written in ANSI C by San Le and distributed under the terms of the GNU license.

    Top
  2. Isn't that kind of vain having your name in the acronym?

    Probably. Those of you who cannot indulge me this minor vanity may think of this as SeLF-FEA as in Do-It-YourSeLF-FEA.

    Top
  3. What do I need to run SLFFEA?

    1. If you only want to run SLFFEA binaries on Windows, you can use the port provided by Qi Yang.
    2. To compile from source, you need GNU/Linux or some form of Unix.
      1. Extraction tool, like tar xzvfp.
      2. C compiler(you should know where your cc or gcc is located so you can define the CC macro in the makefiles. Just do a:
              which gcc
        
        or
              which acc
        
        and then put the path in the Makefile. For instance, when I do a "which gcc", I get:
                    /usr/bin/gcc
        
        which is how my CC is currently defined.
      3. Mesa-3.0 (OpenGL for the PC) or higher or Open GL. You also should install it in your /usr/local/ directory.
      4. Perl if you would like to use the gui.pl script which is very helpful for GUI development.


    Top
  4. What is SS-GUI?

    SS-GUI stands for Self-Scaling GUI. If you resize the GUI window, all the text inside will rescale itself such that the text and color scale boxes maintain their proportions with the window, and it will also work the same as before. This is possible because the GUI is built on OpenGL rather than some packaged window manager.

    Top
  5. What is the P-Winston Motion Engine?

    The P-Winston Motion Engine is about 300 lines of code written by Philip Winston which he has graciously and generously allowed me to use and modify for the GUI part of SLFFEA. The P-Winston enables you to use the mouse to rotate and translate the mesh, especially to refine rotations and translations done through hot keys or the GUI. It works like a trackball, but keeps the different types of motion separate. For example, holding down the left button and moving the mouse up and down will produce translation in Z. Moving it left and right with this same button held down will rotate it on the Z axis. The middle button controls translation in X and Y, and the right button, rotation in X and Y. While this seems more complex than a typical trackball, it has the advantage of isolating the movements for fine tuning of the position at which you want to view the object. Also, the P-Winston has much less computational overhead than a Mesa trackball.

    Note that you have to have the Mesh Window active to have mouse control.

    Top
  6. Why are the stress, strain, moment and curvature discontinuous across element boundaries?

    This is true for slffea-1.0, but for slffea-1.1, nodal averaging is used. Even though I feel it is more honest to assign color based upon Gauss points for each individual element, the output data files were getting much too big, and I had to switch to nodal averaging. (As an example, I had a brick output file which was 10 MB, and I reduced it to 2.6 MB by using nodal averaging) It should be noted that two elements which do not have nodal averaging are the beam and truss elements because stress, strain, moment and curvature are local to the coordinate system of each individual element. This is also true for the shell, but I explain why nodal averaging is justified in the README for this element.

    Top
  7. What are your qualifications to write FEA code?

    I claim no qualifications to write FEA code. Like all GNU software, you are using it at your own risk. That said, here is a bit of my academic history which you may use to judge my qualifications:

    Academic History

    Note that I'm not a PE and I have never taken the PE exam. Taking the exam requires 2 years of official work experience at an established company, which I do not have.

    Top
  8. What motivated you to write this?

    I left the PhD program at UCSD feeling that University Academia was not for me. After being inspired by GNU/Linux, I wanted to contribute my engineering skills to the Free Software movement which represented an altruistic contrast to what I had just left. I sometimes say SLFFEA is my unofficial doctoral thesis, but now I believe that this project is worth 100 PhDs.


    Top
  9. How do you install Mesa?

    For recent versions of GNU/Linux, you may not have to. (Mesa comes pre-installed on Slackware 7.1). All you need to do is add the following softlink:
       cd /usr/include/
       ln -s /usr/X11R6/include/GL/ GL
    
    if it doesn't already exist.

    If you would rather compile using the latest release of Mesa, you can do the following. From Section 16.0.0 of my GNU/Linux Installation Guide:
    16.0.0 Installing Mesa(the OpenGL graphics library):
    
    
       16.1.0  For  recent  versions  of  GNU/Linux(like  Slack-
               ware-7.1), Mesa comes pre-installed.  All you need to do is  add  the
               following softlink:
    
                     cd /usr/include/
                     ln -s /usr/X11R6/include/GL/ GL
    
               if it doesn't already exist.
    
               There  are several places where you can get Mesa.  You can get it off
               the web at:
    
                     http://sourceforge.net/project/showfiles.php?group_id=3
    
       16.1.1  For  recent  versions  of RedHat you need to add the glut libraries
               from the RPMs on the installation disk(For RedHat 8.0, it is on the
               3rd disk, for RedHat 9.0, it is on the 2nd disk):
    
                     cd /mnt/cdrom/RedHat/RPMS
                     rpm -Uhv  glut-3.7-12.i386.rpm
                     rpm -Uhv  glut-devel-3.7-12.i386.rpm
    
       16.2.0  After getting the  tarfiles,  copy  them  to  the
               directory /usr/local/ and do:
    
    
                     tar xzvfp MesaLib*.gz
                     tar xzvfp MesaDemos*.gz
    
    
       16.3.0  Compiling Mesa Programs
    
    
            16.3.1 From the /Mesa-3.4.2/README:
    
    
                        To  compile  the library, first type 'make' alone to see the
                        list of system configurations currently supported.   If  you
                        see  your  configuration  on the list, type 'make '.
                        Most popular Unix/X workstations are currently supported.
    
                   For my machine, I use:
    
                        make linux
    
    
            16.3.2 Header Files and Libraries
    
                   From the /Mesa-3.4.2/docs/INSTALL:
    
    
                        Header and library files:
                           After you've compiled Mesa and tried the demos I recommend the following
                           procedure for "installing" Mesa.
    
                           Copy the Mesa include/GL directory to /usr/local/include:
    
    
                         mkdir /usr/local/include/GL
                         cp -r include/GL/* /usr/local/include/GL/
    
    
                           Copy the Mesa library files to /usr/local/lib:
    
    
                            cp -d lib/* /usr/local/lib
    
    
    
                                (actually, use "cp -d" on Linux to preserve symbolic
                        links)
    
    
            16.3.3 Install Widgets-Mesa Library
    
                   You also need to install the Widgets-Mesa Library.  First:
    
                         cd  /usr/local/Mesa-3.4.2/widgets-mesa/
    
                   The file /usr/local/Mesa-3.4.2/widgets-mesa/INSTALL tells you to:
    
                            ./configure
                            make
                            make demo.gl
                            make demo.mesa
                            make demo.ws
                            make demo.tea
                            make install
    



    Top
  10. Why am I getting the error GL/glut.h: No such file or directory?


    Because Mesa is pretty standard on most GNU/Linux distributions, I think you are only lacking the glut libraries(and possibly some other include files) which usually aren't installed unless you install everything including development tools for Linux. I recommend that you check to see that the glut libraries are in:
       /usr/X11R6/lib
    
    and that there is a directory:
       /usr/include/GL
    
    containing all the necessary Mesa and glut files. See the next question for more information.

    Sometimes, Redhat and Fedora have glut and glut development RPMs on their installation disk in the /RedHat/RPMS directories. You may have to look around to find it. For now, I will repeat what I say above:
       To install the glut libraries from the RPMs on the installation disk(For RedHat 8.0, it is on the
       3rd disk, for RedHat 9.0, it is on the 2nd disk):
    
             cd /mnt/cdrom/RedHat/RPMS
             rpm -Uhv  glut-3.7-12.i386.rpm
             rpm -Uhv  glut-devel-3.7-12.i386.rpm
    


    Top
  11. What does your /usr/X11R6/lib and /usr/include/GL look like?

    After updating to Mesa-3.2.1,(Mesa-3.0 should still work), doing an ls -l in /usr/X11R6/lib gives:
    -rw-r--r--  1 root root 678504 2005-01-23 20:45 libGL.a
    lrwxrwxrwx  1 root root     12 2005-05-31 07:32 libGL.so -> libGL.so.1.2
    lrwxrwxrwx  1 root root     12 2005-05-31 07:32 libGL.so.1 -> libGL.so.1.2
    -rwxr-xr-x  1 root root 608015 2005-01-23 20:53 libGL.so.1.2
    -rw-r--r--  1 root root 659352 2005-01-23 20:45 libGLU.a
    lrwxrwxrwx  1 root root     13 2005-05-31 07:32 libGLU.so -> libGLU.so.1.3
    lrwxrwxrwx  1 root root     13 2005-05-31 07:32 libGLU.so.1 -> libGLU.so.1.3
    -rwxr-xr-x  1 root root 563990 2005-01-23 20:53 libGLU.so.1.3
    -rw-r--r--  1 root root  27902 2005-01-23 20:45 libGLw.a
    lrwxrwxrwx  1 root root     13 2005-05-31 07:32 libGLw.so -> libGLw.so.1.0
    lrwxrwxrwx  1 root root     13 2005-05-31 07:32 libGLw.so.1 -> libGLw.so.1.0
    -rwxr-xr-x  1 root root  26550 2005-01-23 20:53 libGLw.so.1.0
    lrwxrwxrwx  1 root root     12 2005-05-31 07:22 libglut.so -> libglut.so.3
    lrwxrwxrwx  1 root root     14 2005-05-31 07:22 libglut.so.3 -> libglut.so.3.7
    -rwxr-xr-x  1 root root 215332 2003-08-20 14:24 libglut.so.3.7
    
    and doing an ls -l in /usr/include/GL gives:
    -r--r--r--  1 root root   7946 2005-01-23 20:45 GLwDrawA.h
    -r--r--r--  1 root root   4433 2005-01-23 20:45 GLwDrawAP.h
    -r--r--r--  1 root root   2309 2005-01-23 20:45 GLwMDrawA.h
    -r--r--r--  1 root root   2311 2005-01-23 20:45 GLwMDrawAP.h
    -r--r--r--  1 root root  89951 2005-01-23 20:44 gl.h
    -r--r--r--  1 root root 306424 2005-01-23 20:44 glext.h
    -r--r--r--  1 root root  15981 2005-01-23 20:44 glu.h
    -r--r--r--  1 root root   9016 2005-01-23 20:44 glx.h
    -r--r--r--  1 root root  29020 2005-01-23 20:44 glxext.h
    -r--r--r--  1 root root   4257 2005-01-23 20:44 glxint.h
    -r--r--r--  1 root root   2453 2005-01-23 20:44 glxmd.h
    -r--r--r--  1 root root  71034 2005-01-23 20:44 glxproto.h
    -r--r--r--  1 root root   8878 2005-01-23 20:44 glxtokens.h
    -r--r--r--  1 root root   8349 2005-01-23 20:44 osmesa.h
    -rw-r--r--  1 root root  20844 1998-08-07 17:18 glut.h
    -rw-r--r--  1 root root   5150 1998-08-07 17:18 glsmap.h
    -rw-r--r--  1 root root   7273 1998-08-07 17:18 fglu.h
    -rw-r--r--  1 root root  10152 1998-08-07 17:18 fglut.h
    -rw-r--r--  1 root root  60468 1998-08-07 17:18 fgl.h
    


    Top
  12. Does SLFFEA allow for hybrid elements like beam/shell combinations?

    Not yet. The main issue is to coordinate all the DOFs, so that rotation and translation are correctly put into their components in the global stiffness matrix.

    To do this, I can imagine storing all the element stiffnesses in a big file, along with DOF data, and calling a global stiffness assembler which puts everything together. My code is currently more static than this, where each element stiffness is immediately put into the global stiffness so no copies exist(an exception is when I use the Conjugate Gradient method, but that's another issue).

    This is a significant consideration. These files could get pretty big, and I currently want to prevent having to write out such data. If I ever do the multi-element code, I will try to keep this type of data in the program's memory space, if at all possible.

    When I first began planning SLFFEA, I made the design choice to initially keep things simple. I thought I could go back and do the multi-element code one day, when I had finished doing the other elements. Not all elements can be mixed(some non-linear elements for example), and I would have an idea of which ones could and could not be combined after I had finished all the others. It was more important at the time to come up with codes that could generate all the different element stiffness types, which could later be used in the super-element code.



    Top
  13. Does SLFFEA include mesh generators?

    There are a few generators for specific meshes like the ball and ring composed of brick elements, or the building made up of beam elements. For more general mesh generators, try the links below, especially the fourth.

    Meshing Research Corner

    Jonathan Richard Shewchuk's triangle element mesh generator C program.

    Mesh Generation & Grid Generation on the Web

    A very extensive list of software from the same site as above

    GiD is a cost free(but not open source) package.



    Top
  14. What units does SLFFEA use?

    For units, just be consistent. If using inches and lbs, then you would use psi for Young's modulus. If meters and Newtons, then Pascals. So you can use any system of units you want.


    Top
  15. Why do I get "command not found" when I try the text executables in the data directories?

    This is a common issue with Unices. For the beam, instead of just "bm", type in:
       ./bm
    
    which means execute the code "bm" in your current directory. You can also add:
       export PATH=$PATH:.
    
    or
       export LD_LIBRARY_PATH=.
    
    in your ".bashrc" or ".bash_profile" (or whatever your Unix uses) to avoid having to type "./" before every executable. The reason this is not automatically done in Unix is for security reasons, so you may want to think about adding "." to your path.


    Top

I'll add more Questions and Answers as they come.

Top

Get San Le's Free Finite Element
Analysis at SourceForge.net. Fast, secure and Free Open Source software
downloads