XNS Shape Functions
- 2002.08.01 Isolating shape functions 1
- 2003.12.30 Isolating shape functions 2
- 2003.01.03 Isolating shape functions 3
A Bit of History
In the beginning, there was a single shape function subroutine, that evaluated the shape function values (subsequently referred to as level A), Jacobian determinant (level B), and shape function derviatives (level C) for a single quadrilateral element at a single quadrature point. That was nice, but not terribly efficient. When XNS was converted to Connection Machine Fortran, the subroutine would compute entire arrays of values over all elements at a single quadrature point. Since some systems required level A only, some levels A and B, and yet others levels A, B and C, the subroutine was divided into these three parts. Later, level P was introduced as alternative to level B for computing directional Jacobians for elements lying in higher-dimensional space, e.g. quads in 3D. All this involved a lot of scratch element-level arrays, but that was the way to do it on the CM. When porting XNS back to standard Fortran with MPI, the basic architecture was retained, but since in mid-90's memory was a main bottleneck, the scratch arrays were elliminated and replaced by element-level scalars. Frequent subroutine calls (once per quad point per element) were avoided by using include files instead. That was fast, but very inflexible. In 2003, the subroutine calls were reintroduced, but made to compute all quad point values at once for a given element. That seems to provide a good balance between computation speed and intermediate storage requirements.