
![]()
![]()
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).
![]()
![sitebanner[1].gif (12135 bytes)](_borders/sitebanner1.gif)
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
|
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.)
![]()
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!
![]()
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? |
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?
|
[ fe.lib ] [ Back to Home Page Index ]
Email webmaster@vector-space.com with questions or comments.