banner.jpg (7086 bytes)

Finite Element and Numerical Methods with Object Oriented Programming in C++

ntsc[1].gif (7197 bytes)ie4getan[1].gif (7090 bytes)This web-site uses frame-enhanced page design,
click here to enter the frame-enhanced home page , if you have a frame-enabled browser. Otherwise, please update (free) your browser to view the frame-enhanced pages on this web-site.  

 

 

 

Home Page Contents For No-Frame Browser
Finite Element / Numerical Methods with
VectorSpace C++ Library
(vs.lib)

    vs.lib is a math library in C++ with a set of linear algebra and integrable / differentiable objects. This library, with special emphasis on applications in object-oriented finite element methods, is in general for applications in advanced numerical analysis such as computational linear algebra, unconstrained / constrained optimization, and variational methods. vs.lib is a product of VectorSpace Programming (VSP).

ivbar1[1].gif (3412 bytes)

sitebanner[1].gif (12135 bytes)
                                                                          VectorSpace Programming
Home Page Index :

An Object-Oriented Numerical Programming Tool--vs.lib
A Revolutionary Step in Numerical Programming
An Object-Oriented Finite Element Library (fe.lib; free source code)
FAQ about fe.lib
How does the finite element library, fe.lib, fundamentally differ from other object oriented Finite Element programs?
Who are the audience that the finite element library, fe.lib, is intended for?
[ Scientists, Engineers, and Mathematicians ]
[
Object-Oriented FE Developers
[
Designing Engineers and Consultants ]
[
Industrial Finite Element Companies ]

VectorSpace C++ Library--vs.lib:
An Object-Oriented Numerical Programming Tool

    Numerical programming is made as easy as writing mathematical expression. Classes such as integrable / differentiable objects, submatrix object, basis object, ...etc. are designed using data abstraction and  object- oriented programming. These classes in the VectorSpace C++ Library (vs.lib) are modeled after mathematical objects in Cn and Hn spaces (n = 0, 1, 2). vs.lib is currently available in the platform of Visual C++ 6.0 under Window NT 4.0. (Window 95/98 version will be available in the next release; Borland C++ 5.0 version is our original development compiler; however, the Borland C++ 5.0 version is provided without support. To purchase the Borland C++ 5.0 version contact webmaster@vector-space.com for details.)

[ Back to Home Page Index ]

A Revolutionary Step--
    Numerical Programming Made Easy !     

logo.gif (15315 bytes)The computer languages used in numerical programming nowadays are either Fortran or C. They are both type-compiled languages. These two languages only support simple arithmetic operations on scalars. On the other hand, symbolic languages can be made ver expressive. However, the symbolic languages are intrinsically too slow for large-scale numerical computation. Since the underlying constructs of the two types of languages are so different, a smooth reverse engineering (or optimization) from symbolic codes to type-compiled codes is simply impracticable.

    With the advent of the object-oriented programming paradigm, the high-flown mathematical objects can be modeled in C++. The object-oriented numerical model has the advantages of both worlds. The C++ code can be as expressive as the symbolic codes, while the underlying object models are consistent with the numerical computation algorithms. This makes the C++ program using vs.lib a perfect rapid-proto-typing tool. The reverse engineering of the C++ codes into plain C codes is completely seamless within a single language environment.

    vs.lib enables C++ with mathematical literacy. The application examples, free-downloadable from this site, show that the programming in many advanced numerical applications such as computational linear algebra, optimization and variational method is made so easy. A revolution in numerical programming is now clear and present!

[ Back to Home Page Index ]

A Framework-based Finite Element Library (written with vs.lib)--fe.lib:
An Object-Oriented Finite Element Library

    We have strong application examples from basic up to advanced finite element methods. These finite element examples are based on fe.lib (free source code), written in VectorSpace C++ Library (vs.lib). That is the fe.lib is used to demonstrate the advantage of object-oriented method in general, and specifically to show the power of the VectorSpace C++ Library for a non-trivial numerical programming problem.  The fe.lib is a framework-based object-oriented finite element library.

    Two major features in C++, data abstraction and object-oriented method, are used intensively to model the finite element method. We show, in the design of fe.lib, that the object oriented analysis is applied to examine the potentially complicated object dependency relationships, and the object oriented design is the discipline enforced to manage the object dependency relationships. The result is that the object-oriented model in fe.lib is completely parallel to how a mathematician will describe what the finite element method is. The object-oriented finite element model in fe.lib is very general and very inclusive for encompassing ever widely ranging subject areas in finite element method.

    In contrast, a plain finite element program in Fortran / C languages is known to easily become ugly and disorganized, after adding, e.g., transient, non-linearly, matrix sub-structuring, ... and so on. As an object-oriented finite element library, fe.lib shows its beauty of being capable of undertaking much greater "impact of change", while still keeping its program structure simple and coherent. This advantage is derived from the code-reuse and programming by specification inherited from the object-oriented programming paradigm. In fact, fe.lib is the most extensible finite element program known to date.

    With such extensible fe.lib together with expressive vs.lib, our application examples cover extensive finite element formulations, which include almost all advanced subjects that are presented in "Zienkiewicz and Taylor, The Finite Element Method, vol 1 [1989] & vol. 2 [1991]", and beyond (include many advanced works in finite element by a brilliant young Stanford Prof. J.C. Simo who passed away in 1994; see Simo, J.C. and T.J.R. Hughes, 1998, "Computational Inelasticity".) These finite element examples are explained in details in our Application Workbook. The advanced finite element examples covered include mixed and hybrid methods (with or without matrix sub-structuring), mixed plate bending, contact mechanics, elastoplasticity, finite deformation, and more ...

FAQ about fe.lib
How does the fe.lib fundamentally differ from other object oriented FE programs?
Who are the audience that fe.lib is intended for?
[ Scientists, Engineers, and Mathematicians ]
[
Object-Oriented FE Developers
[
Designing Engineers and Consultants ]
[
Industrial Finite Element Companies ]

[ Back to Home Page Index ]

FAQ about fe.lib

How does the fe.lib fundamentally differ from other object-oriented FE programs?

    There are quite a few implementations of object-oriented finite element programs available. The fe.lib differs from all of them in a very fundamental way on how the object-oriented programming is applied to model the finite element method. Other implementations tend to model variational formulation, its corresponding finite element approximation, and solution algorithm (V.F.S. for convenience), which are kernels to a finite element problem, directly into objects (in some cases even into their own "finite element language"). The objects just become a better subroutines, which are still black boxes to users. Extending such programs will be very difficult for users other than the original authors. Chances are that you still have a steep learning curve, if your variational formulation and your preferred finite element approximation for that variational formulation do not match something close to their programs' bag of tricks. We seriously doubt that any Fortran programmer should toss away his long proven finite element codes, and be persuaded to participate in such an incrementally better evolution.

    What we really need is a revolutionary step in numerical programming. The key problem with Fortran and C is that they do not support high-flown mathematical types that are required in numerical programming. fe.lib is such an overhaul in finite element programming. It provides a open programming framework to implement V.F.S., instead of a set of hard-wired objects of V.F.S. directly. The variational formulation, finite element approximation, and solution algorithm (V.F.S.) are the bases for the definition of a numerical problem. They should not be hidden from the programmers. On the contrary, they are at the heart of the programming activities. Therefore, they need to be explicitly written, but only with more concise expressions to avoid getting lost in the details. With the aid of vs.lib, the details of the V.F.S. can be made visible again. This is because that vs.lib, in turns, hides the routine mathematical definitions under the hood.

    That is, the different levels of complexities are to be selectively amplified or suppressed. The result is a programming framework ideal for tackling full spectrum of V.F.S. in finite element method. This design philosophy of selectively expressing the complexities is known as object-inversion, in which we emphasize the essential and eliminate the irrelevant. As a result, a program written in both vs.lib and fe.lib not only resembles more closely to, but is also as concise as, the V.F.S. per se. As in the framework software development, we provide mechanism not policy to achieve a versatile framework of finite element programming. The advantage of such a programming framework is quite clear as our application examples have covered an unprecedented wide subject areas in finite element formulations. All other object-oriented finite element programs promise the advantage of being more extensible than FORTRAN / C programs, and some of them also claim they can be used as rapid-proto-typing tools. However, in these regards, none of these programs come even close to rival the combined power of vs.lib and fe.lib. In fact, vs.lib can be used as a stand-alone library by other object-oriented finite element programs as a rapid-proto-typing tool to develop new elements effectively.

[ fe.lib ] [ Back to Home Page Index ]

Who are the audiences that fe.lib is intended for?

Scientists, engineers, and mathematicians: fe.lib is ideal for people who are highly mathematics literate, such as scientists, engineers, and mathematicians. They do not like to use canned programs, because what is really going on under the hood can't be known. Moreover, no canned program can be expected to solve PDE and its variational formulation to suit whatever their specific research interests are. These scholastic users may range from students who are learning the basics of finite element methods to professors who are developing new finite elements. It is also perfect for professors teaching basic to advanced finite element courses. With fe.lib, students now can be expected to hand in their finite element program assignment at the next class meeting, not at the end of a semester.
Object-oriented finite element developers : fe.lib is completely depending on vs.lib, while vs.lib is independent from fe.lib. In fact, vs.lib can be used as a rapid-proto-typing tool to develop new elements for other object-oriented finite element programs. In such a case, fe.lib serves as an example to demonstrate how vs.lib is used in the framework of finite element programming.
Designing engineers and Industrial consultants: vs.libfe.lib is a great tool for designing engineers and industrial consultants, who after using $10k+ FE programs, want to have a deeper understanding, and to implement the theories and formulations described in their FE programs' "theory manuals". fe.lib may help them realistically implement many advanced formulations in hours or days, not in months. A substantial amount of knowledge has been added to finite element pathology in the last two decades (see e.g., MacNeal, R.H., 1994, "Finite elements: their design and performance".) Without an adequate understanding of an element, there are simply too many traps and pitfalls, if a hands-off number crunching attitude is taken. The computed results may bear no implication whatsoever on physical reality.
Industrial flag-ship finite element companies: vs.libfe.lib is most valuable to finite element companies. It facilitates the formal cooperate software engineering efforts:
Development team managers can use vs.libfe.lib : (1) to write specifications for new elements and algorithms, and (2) as a rapid-proto-typing tool for developing new elements and algorithms.
After the rapid-proto-typing code is completed, it can be used by development team members to generate intermediate results to debug the optimized production code (in plain C or Fortran).
After optimized production code is completed, the rapid-proto-typing code can be left as comments or conditional compiled code segments in the optimized production code for improving the production code readability and maintainability. Say, after one engineer who wrote the code left the company, many years later the other engineers can pick up the previous work easily.
The rapid-proto-typing code can be included in the company theory manuals for their users. So, the users feel more solid about what is really going on in the optimized production codes. Users can use these proto-type codes to have a hands-on experience on the element they are using. This improves the code transparency from the users' perspective.

[ fe.lib ] [ Back to Home Page Index ]

Email webmaster@vector-space.com with questions or comments.