A C++ Tensor Class Library - Sandia National Laboratories · C++. For these reasons, Division 1541...
Transcript of A C++ Tensor Class Library - Sandia National Laboratories · C++. For these reasons, Division 1541...
REFERENCE COPY
SANDIA REPORT SAND91– 1752 l UC–705 Unlimited Release Printed May 1991
PHYSLIB: A C++ Tensor Class Library
‘9
.
Kent G. Budge
Prepared by Sandia National Laboratories Albuquerque, New Mexico 87185 and Livermore, California 94550 for the United States Department of Energy under Contract DE-AC04-76DP00789
‘.
.%?$
SNLR LIBRARY
11111111 *8433967*
SAND91 - 1752 0002 UNCLASSIFIED
05/91 86P STAC:
,,, /,,
.
.
Issued by Sandia National Laboratories, operated for the United States Department of Energy by Sandia Corporation, NOTICE: This report was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Govern- ment nor any agency thereof, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government, any agency thereof or any of their contractors or subcontractors. The views and opinions expressed herein do not necessarily state or reflect those of the United States Government, any agency thereof or any of their contractors.
Printed in the United States of America. This report has been reproduced directly from the best available copy,
Available to DOE and DOE contractors from Office of Scientific and Technical Information PO Box 62 Oak Ridge, TN 37831
Prices available from (615) 576-8401, FTS 626-8401
Available to the public from National Technical Information Service US Department of Commerce 5285 Port Royal Rd Springfield, VA 22161
NTIS price codes Printed copy: A05 Microfiche copy: AO1
.- .
SAND91-1752 Unlimited Release
Printed 10/9/9 1
Distribution UC-705
PHYSLIB: A C++ Tensor Class Library
Kent G. Budge 1431
Sandia National Laboratories Albuquerque, NM 87185
Abstract
PHYSLIB is a C++ class library for general use in computational physics applications. It defines vector and tensor classes and the corresponding operations. A simple change in the header file allows the user to compile either 2-D or 3-D versions of the library.
3
Acknowledgment
The author acknowledges the assistance of J.S. Peery for reviewing this library and for much discussion of general C++ programming issues.
,. .,, ,
Acknowledgment . . . . . . . . . . . . . . . . . . . . . . . . .
Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contents
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .........7
sumq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .......9
1.
2.
[ntioduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..ll
1.1 Vector and Tensor Operations and Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
1.1.6
Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..ll
Tensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l2
Symmetric and Antisymmetric Tensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l4
Vector and Tensor Components; Indicial Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l4
Einstein Summation Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...+. . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Dimensionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l6
1.2 Object-Oriented Programming and the C++ Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l7
1.2.1 Data Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l8
1,2.2 Special Member Functions and Dynamic Memory Management.. . . . . . ...18
1.2.3 Function and Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l9
The PHYSLIB Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..2l
2.1
2.2
2,3
2.4
class Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..2l
2.1.1 Private Data Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..2l
2.1.2 Special Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...22
2.1.3 Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...24
class Tensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...25
2.2.1 %ivate Data Memkrs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...25
2.2.2 Special Memkr Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...25
2.2.3 Utility Functions . . . . . . . . . ..# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..l . . . . . . . . . . . . ..3l
class SymTensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...32
2.3.1 Private Data Members.. . . . . . . . . . . . . . . . . . . . . . . . . . ..> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...32
2.3,2 Special Member Functions . . . . . . . . . . . ..ss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...32
2.3.3 Utfii~Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...36
class AntiTensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , . .,,,...,, . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.1 Private Data Members ............................................................................37
2.4.2 Special Member Functions .....................................................................37
2.4.3 Utility Functions ................................ .................................... .................~
2.5 Operator Overload Functions ............................................................... .............4l
2.6 Methods .............................................................................................................50
2.7 Predefine Constants .........................................................................................56
3. Using the PHYSLIB classes .......................................................... ..............................59
3.1 Useless Operations... ..........................................................................................60
Conclusion ....... ........................................................ ..........................................................6l
References ..........................................................................................................................63
Index of Operators and Functions.. ........... .........................................................................65
Distribution ................................................................ ........................................................69
Preface
C++ is the first object-oriented programming language which produces sufficiently effi-cient code for consideration in computation-intensive physics and engineering applica-tions. In addition, the increasing availability of massively parallel architectures requiresnovel programming techniques which may prove to be relatively easy to implement inC++. For these reasons, Division 1541 at Sandia National Laboratories is devoting consid-erable resources to the development of C++ libraries.
This document describes the first of these libraries to be released, PHYSLIB, which de-fines classes representing Cartesian vectors and (second-order) tensors. This library con-sists of the header file phys 1ib.h, the inline code file phys 1ib. inl, and the sourcefile phys 1ib. C.The library is applicable to both three-dimensional and two-dimension-al problems; the user selects the 2-D version of the library by defining the symbolTWO_D in the header file phys 1ib.h and recompiling phys 1ib. C and his own code.Alternately, system managers may wish to provide duplicate header and object modules ofeach dimensionality.
This code was produced under the auspices of Sandia National Laboratories, a federally-funded research center administered for the United States Department of Energy on a non-profit basis by AT&T. This code is available to U.S. citizens and institutions under re-search, government use and/or commercial license agreements.
Federal agencies, universities, and other U,S. institutions who wish to support further de-velopment of this code and its sister codes are encouraged to contact Division 1541, Sand-ia National Laboratories. Division 1541 welcomes collaborative efforts with qualifiedresearch institutions.
The PHYSLIB library is @ 1991 Sandia Corporation.
(Intentionally Left Blank)
Summary
PHYSLIB defines the following classes:
class Vector Cartesian vectors
class Ten sor Cartesian 2nd-order tensors
class SymTensor Cartesian 2nd-order symmetric tensors
class AntiTensor Cartesian 2nd-order antisymmetric tensors
Methods that are defined for these classes include the following:
Dot and outer products
Cross products for vectors
Other arithmetic operations
Duals (dot or double dot product with the permutation symbol)
Trace of tensors
Transpose of tensors
Determinants and inverses of tensors
Symmetrk and antisymmetric part of tensors
Scalar invariants of tensors
Norms
Colon operator (scalar product of tensors)
Deviatoric part of tensors
9
(Intentionally Left Blank)
10
Introduction
1. Introduction
Almost every branch of theoretical physics makes use of the concepts of vectors and tew
sors. Vectors are conceptually simple; they are quantities having both magnitude and di-rection, such as the velocity of a particle. Tensors are conceptually more difficult. Theyrepresent rules that relate one set of vectors to another, and they appear in many physicalformulae.
Division 1541 at Sandia National Laboratories recently began work on a new computercode, RHALE++, which calculates the behavior of materials subjected to strong shockwaves. The equations describing the physics of strong shocks are vector and tensor equa-tions. In the past, great effort has been required to correctly translate these equations intocomputer code.
This document briefly reviews the mathematics of vectors and tensors; discusses the basicdifficulties in translating vector and tensor equations into computer code; and describeshow a new and very promising computer language, C++, has been used to alleviate thesedifficulties, thereby producing reliable, reusable, and transparent computer code at a muchreduced cost in programmer effort.
1.1 Vector and Tensor Operations and Notation
We briefly review the basic concepts and language of vectors and tensors. A more com-plete discussion can be found in [2].
1.1.1 Vectors
A vector is a physical quantity such as velocity that has both a magnitude (“five hundredkrn/see”) and a direction (“towards the northeast”). It may be written as a lowercase sym-bol with an arrow over it, such as t. Quantities such as temperature or mass that havemagnitude but no direction are called scalars and are represented by lowercase symbolswithout an arrow, such as u.
The magnitude or norm of a vector ~ is written as Iiil and is a scalar, while its directionmay be written as a. The direction of a vector is itself a vector with magnitude 1 (called aunit vector).
A vector may be multiplied by a scalar. The result is a vector with the same direction asthe original vector and with a magnitude equal to the product of the scalar and the magni-tude of the original vector. That is,
if ; = c; then Iil = ICI 121 and L = f~ (1)
If c <O, the resulting vector has the opposite direction from the original vector.
11
Introduction
Vectors may be added to or subtracted from each other; they obey the same algebraic rulesas real numbers under addition and subtraction. Vector addition may be visualized by pic-turing each vector as an arrow with a length equal to its magnitude, as illustrated below:
Figure 1. Addition of Vectors
A
The opposite of a vector is a vector with the same length but in the opposite direction.
Vectors may not be multiplied in the same sense as real numbers. However, several opera-tions exist which are distributive and which are therefore spoken of as “products”, The in-ner product (or dot product) of two vectors is a scalar and is written
;Wi (2)
It is defined as the product of the magnitudes of the two vectors and the cosine of the anglebetween them, that is,
a.; = Ialltlcoseab. (3)
Thus, the dot product is zero if the vectors are perpendicular. The dot product is distribu-tive and commutative, that is,
. .a. (b+:) =a.b+a.: (Distributive Lmw) (4)
;o~+; (Commutativelaw) (5)
The outer product of two vectors is a tensor; it is discussed below.
1.1.2 Tensors
A tensor is a rule that turns a vector into another vector, and it is represented symbolicallyby a boldface capital letter, such as A. We write
12
Introduction
to indicate that when the tensor A is applied to the vector ~, it returns the vector ii. Not allrules that turn vectors into other vectors are tensors; a tensor must be linear, that is, it mustbe true for all ii, ~, and c that
and
A (L@ = (:Ah.
It is customary to regard
(8)
the vector h in Equations (6) as the product of the tensor A andthe vector ~. We say that the vector ~ is lejt-rnukiplk?d by the tensor A , It is also possibleto write expressions of the form
?=~A (9)
in which the vector ; is right-multiplied by the tensor A . If
A;=;B (lo)
for all vectors ~, we Mythat A is the (ranspose of B and write
A = BT. (11)
Tensors may be added and subtracted according to the usual algebraic rules, Addition isdefined such that
A=B+C iff A;=B~+Cb forall~ (12)
The product of two tensors is defined such that
A =BC iff A;= B(C6) foralt ~ (13)
The outer product of two vectors is a tensor and may be written
A=it?Jt (14)
It is defined by
A=ti8~ iff Ai= (~~~)ii forall L
Note that the outer product is not commutative, unlike the inner produc~ since
a@;= (b@a)T (16)
Many derived quantities in physics are expressed as tensors. For example, we observe inthe laboratory that a reflective surface exposed to a set of light sources feels a force whichdepends on the orientation and area of the surface. lf we form a vector i whose magnitude
(15)
13
Introduction
is equal to the surface area and whose direction is perpendicular to the surface, we findthat the force experienced by the surface is given by
]=p; (17)
where P is a tensor (the radiation pressure tensor) which depends only on the intensity andlocation of the light sources relative to the location of the reflective surface.
Likewise, consider a body subjected to deformation. Let the displacement between twonearby particles in the undeformed body be represented by the vector ii and the displace-ment between the same two particles after deformation be represented by the vector;’.
The two vectors are related by the expression
~’ = J; (18)
where J is called the Jacobian tensor, We note that J may be different at different points inthe body.
1.1.3 Symmetric and Antisymmetric Tensors
Many tensors important in physics are symmetric;
AT=A
that is,
(19)
Likewise, there are important tensors which are antisymmetric, having the propefiy
AT=–A. (20)
If a tensor is known to have one of these symmetry properties, calculations involving thattensor can usually be simplified. In addition, it is sometimes useful to split a full tensorinto symmetric and antisymmetric parts via the formulae
Sym(A) = ~ (A +AT) (21)
Anti(A) = ; (A -AT) (22)
lt is easily verifieclthat these two tensors have the indicated symmetry properties and thatA = Sym(A)+Anti(A).
1.1.4 Vector and Tensor Components; Indicial Notation
Computers a_reunable to handle vectors and tensors directly. Their hardware is designed toadd, subtract, multiply, and divide representations of real numbers,
Fortunately we can represent vectors and tensors as sets of real numbers. However, to doso, we must establish an arbitrary ~rmne Ofre~erence. We do this by selecting three mutual-
14
Introduction
ly orthogonal directions i, j, and z. These correspond to the x, y, and z axes of a Cartesiancoordinate systelm. We can then express any vector in the form
The three numbers al, az, and a3 (the components of the vector) are real numbers and canbe processed by a computer, Using Equation (23), we can represent any vector operationas a sequence of operations on sets of real numbers. We use the symbol aj to represent theset of real numbers u,, a2, and u,.
Some computers are optimized to perform calculations on sets of real numbers; computerscientists refer to these as vector computers, but the word “vector” is not being used in thesense understood by physicists.
We can write any tensor in the form
Thus, a computer can treat a tensor as if it was an array of nine real numbers. These realnumbers are spoken of as the components of the tensor. We represent this set of numbersby the symbol Aij.
We thus have a way to handle vectors and tensors on computers, but at a price: we must re-place each vector and tensor by a set of real numbers and each vector or tensor operationby a (possibly extensive) sequence of operations on sets of real numbers. This sequence ofoperations is written using indicial nolation, For example, the inner or dot product of twovectors is written in symbolic notation as
r=~.t. (25)
It can be written in indicial notation as
3
r=x
aibi. (26)i=l
where ai and bi are the components of the vectors ii and ~. Proofs of the equivalence of
the symbolic and indicial representations of vector operations will not be presented in thisreport.
1.1.5 Einstein Summation Convention
Sums over all values of an index, such as Equation (26), are so common that it is custom-ary to adopt the Einstein summation convention. Under this convention, any term in which
15
Introduction
an index is repeated, such as aibi, is interpreted to mean a sum over all values of the indexi. That is,
3
aibi (Einsteinconvention) e z aibi (ordinaryusage)i=[
If more thanone index is repeated, we have a multiple sum, e.g.,
33
a#ijcj (Einsteinconvention)e ~ ~ aillijcj(ordinaryusage).
(27)
(28)i=l j=l
We use the Einstein summation convention throughout this report.
1.1.6 Dimensionality
Physical space is three-dimensional, and the foregoing discussion reflects this fact. How-ever, there are many physical situations where a high degree of spatial symmetry permits asimplified treatment of vector and tensor calculations. RHALE++ therefore has been writ-ten in 2-D and 3-D versions. IrI the 2-D version, one assumes either plane symmetry oraxisymmet7y.
Plane symmetry represents the case in which there is perfect translational and reflectivesymmetry along the ? direction. Axisymmetry is the case in which rotational and reflectivesymmetry exists around an axis in the ; direction. In either case, certain components oftensors are guaranteed to be zero in the calculations performed by RHALE++ and similarprograms.
To take advantage of this, the PHYSLIB library can be setup for either normal 3-D calcu-lations or 2-D calculations. To set up PHYSLIB for 2-D calculations, one defines the mac-ro TWO_D at the start of the file phys 1ib.h;tosetup for 3-D calculations, this macro isleft undefined.
The librarycode contains compiler directives that test this macros and compiles differentportions of the code depending on whether the macro is defined. Thus, when a 2-D pro-gram is being compiled, the tensor components that are guaranteed to be zero can be omit-
ted, savingmemory and computationtime,
In addition, an integer constant, DIMENSION, is set to the number of dimensions (2 or 3).
16
Introduction
1.2 Object-Oriented Programming and the C++ Language
One of the characteristics of computational physics programs is their growing complexity.It is not now uncommon for a production code to exceed one hundred thousand lines inlength when written in traditional programming languages such as FORTRAN. Such hugecodes are also found in the areas of advanced graphics and operating systems.
Large codes are extremely difficult to manage. To alleviate this problem, one has to relyon a coherent, well-organized programming style. Programming style includes techniquesthat do not change the basic calculations performed by a program and which might noteven alter the machine language translation.
The most obvious element of style is the incorporation of comnwnr.s and indention. Com-ments are sections of text that the compiler is instructed to ignore, but which convey clari-fications and explanations to a human reader. Good programmers make extensive use ofcommenting, especially in older languages; it is not uncommon for a well-written FOR-TRAN program to consist of 509Z0comment lines. Indention is the intelligent use of whitespace (blanks, tabs, and empty lines), which are ignored by the compiler, to indicate pro-gram structure. It is also an important feature of good FORTRAN coding, where indentionhelps delineate the structure of DO loops and IF-THEN constructs.
Unfortunately, commenting and indenting alone are not sufficient to render a code trans-parent to the human reader. Modern programming languages therefore include grammarthat facilitates block-structured programming. Block-structrued programs are brokendown into logical units, each of which is relatively easy to understand. For example, itera-tiveloops are written nowadays using a specific grammar that indicates that the loop is alogical unit, GOTO statements are generally avoided, since they tend to blur the bound-aries of logical units. An important part of block-structured programming is the care withwhich the programmer breaks the code down into relatively small subroutines, each ofwhich is easy to understand, and builds a tree of subroutine calls to implement his algo-rithm.
Block-sb-uctured programs maybe written either in a top-down or a bottom-up fashion. Intop-down programming, one writes a program at the top level first, using calls to as-yetnonexistent subroutines to represent major parts of the calculation; the first level of sub-routines is then written the same way, writing each subroutine as a sequence of calls tolower-level subroutines, and so on. In bottom-up programming, one builds the lowest-lev-el subroutines first, then combines these into somewhat higher-level subroutines, and so
on, Both approacheshave their merits.
The most recent trend in programming style is towards object-oriented programming.Conventional computers are sequential; a single processor steps through a program, carry-ing out one task at a time. Programs written in traditional programming languages there-fore support the model of a program as a sequence of tasks. This is known as proceduralprogramming, because a sequence of procedures is being carried out,
17
Introduction
Modern supercomputers are not purely sequential. In particular, vector processors such asCray or Convex supercomputers process entire blocks of data in an assembly-line fashion.Massively parallel computers such as MIMD machines have many processors which canoperate independently. For such computers, the sequential model is not ideal. Instead, oneuses an object-oriented approach in which the program is though of as a set of interactingdata objects. This approach has proven to be fruitful even on traditional sequential com-puters. It seems to mesh well with the concept of block-structure programming; not only iscode divided into logical units, but so is data. Closely related to the concept of object-ori-ented programming is the concept of data abstraction. This is the notion that a data struc-ture should be treated as a coherent unit wherever possible, with only a few routinesaccessing its individual components.
C++ is the first efficient high-level language with object-oriented capability to becomewidely popular. Because well-written C++ code approaches the efficiency of conventionalC coding, C++ may prove to be the language of choice for large scientific computingprojects. A description of the C++ language is beyond the scope of this report. However,we briefly describe the advantages of C++ below.
The definitive feature of C++ is the class [1]. This is essentially a programmer-defineddata type that supplements the standard data types (such as int, flost, or doub 1e)thatare part of the language. A class is dw~ared, usually in a header file, at which time thecompiler knows its characteristics; individual variables or instances of the class may thenbe declared by the programmer.
1.2.1 Data Abstraction
A class declaration typically includes data members and specifies member access rules.The data members are a set of floating numbers, integers, pointers, or instances of simplerclasses. For example, a class representing complex numbers would probably contain twofloating variables as data members: one for the real and one for the imaginary part of thecomplex number. Each time a variable of a given class is declared, enough memory is setaside to hold its data members.
Classes enforcedataabstraction.Generallyspeaking,thedatamembers ofa classaredi-rectlyaccessibleonlytoa setoffunctionsenumeratedwithintheclassdefinition.Thesefunctions are the only place where an instance of a class is not viewed as a coherent object.
The PHYSLIB library is built around the concept of data abstraction.
1.2.2 Special Member Functions and Dynamic Memory Management
The special member functions of a class are utility functions that create, destroy, or assignvalues to an instance of a class. Thus, whenever a class variable is declared, a conshuctorfunction is called to initialize the object. Likewise, when a class variable goes out of scopeand is no longer needed, a destructor is called to do any necessary cleanup before its mem-ory is freed. This makes it possible to carry out sophisticated dynamic memory manage-ment in a transparent manner. For example, a large array of floating numbers can berepresented by a class with constructor and destructor functions. The constructor func-
18
Introduction
tions, which are automatically called when a variable of the array class is declared, can al-locate the appropriate amount of memory. The destructor, which is automatically calledwhen the variable goes out of scope, can return the memory to the system. The program-mer sees none of this; he only writes a constructor and des~uctor function, and the compil-er sees to it that they are called at the appropriate times.
PHYSLIB does not make use of such memory management mechanisms, but future re-ports will discuss how memory management is carried out in more sophisticated classesused in RHALE++.
If a class has no constructor functions, the compiler simply allocates memory for the datamembers whenever an instance of the class is declared. Likewise, if a class has no destruc-tor function, the compiler simply frees the memory allocated for an instance of a classwhen it goes out of scope.
Other special member functions may be declared to assign values to an object. For exam-ple, an instance of an array class would need to free its old storage area before allocatingnew memory to receive a new value. If no assignment function is declared for a class, thecompiler simply copies the values of all the data members when an assignment is made.
1.2.3 Function and Operator Overloading
When data abstraction is implemented in less sophisticated programming languages, thecode tends to dissolve into many calls to a few privileged routines that manipulate individ-ual components of the various data structures. Many of these routines implement distinctoperations on the data structures that could just as well be represented by arithmetic oper-ators. For example, if data structures representing complex numbers are used in a C pro-gram, there will be many calls to functions that implement complex addition andmultiplication.
The C++ language permits programmers to overload the standard set of operator symbols.For example, the programmer can declare that the ‘*‘ operator represents complex multi-plication when applied to complex variables. This adds a new context-dependent meaningto this symbol. The compiler can distinguish whether the ‘*‘ represents ordinary floating-point multiplication or complex multiplication by examining the type of its operands.
When an overloaded operator is used in this manner, the compiler replaces it with a call to
the appropriate function defined by the programmer. Thus, the actual machine code gener-ated is not much different than that described above for a C program. However, the code
the programmer writes is much more aesthetically pleasing; and, when another program-mer is trying to read and understand the code, aesthetics is everything.
The C++ language permits programmers to overload function names as well as operators.Every function declaration includes the argument list, as with ANSI C. However, morethan one function with a given name can exist if they have different argument lists. Whenone of the functions is called, the compiler selects the correct function based on the types
19
Introduction#
of the arguments. If a function call has an argument list that does not match any functionby that name, the compiler reports an error.
Consider this example of a C code:
#include <math. h>
#include “complex. h“
main( ) {
struct Complexa = {3. , 2.5}, b= {2. , 0.}, c;
c = CSqrt(CAdd (CMult(a, a) , CMult(b, b) ) ) ;
fprintf (“The result is %f, %f\n”, c.Real, c. Imag) ;
1
This short program evaluates and ptits a complicated complex expression. Note the manyfunction calls needed to implement data abstraction.
In C++ one might have
#include <math. h>
#include “complex. h“
maino{
Complex a(3. , 2.5), b(2. , O.), c;
c = sqrt(a*a + b*b) ;
fprintf (’’The result is %f, %f\n”, c.Realo, c.Image);
}
This illustrates how the function calls have been replaced by more transparent operatornotation. The actual machine code generated by the compiler replaces the operators withthe appropriatefunction calls. In addition, the sqrt ( ) function has been overloaded;thetwo versions are double sqrt (const double) and Complex sqrt (constComplex ).The first version takes and returns floating point numbers, while the secondtakes and returns complex numbers. In the program above, the second version has beenused, which the compiler correctly recognizes horn the fact that a*a + b *b k an ex-
pression with type Complex.
20
2. The PHYSLIB Library
The PHYSLI13 library consists of three files: a header file, phys 1 lb. h, an fine func-tion file, physlib. inl; and a C++ source file, physlib. C.
The header file contains C++ code that defines the four classes described below. It must beincluded at the start of any C++ program that wishes to use these classes. The header filein turn includes the inline function file, which contains additional C++ code to define thevarious operator overloads and methods that are defined for the P*SLIB classes. Thesource file contains a few large functions that are not appropriate for inlining, and it iscompiled and linked with the users’ code.
Inlining is a way to reduce computation time at the cost of increased memory usage. Aninline function is not actually called whenever it is referenced; instead, a local copy of thefunction body is inserted in the calling routine by the compiler. ~s eliminates the over-head associated with making a function call and permits global o@i@izati&s (such asvectorization) that are normally inhibited by function calls. The tr@e-off is that there arenumerous local copies of the function in the code rather than one global copy. If the func-tion is very simple and is called many times, as is usually the case for PHYSLIB func-tions, the savings in computation time are worth the increase in memory usage.
In each case, the reference frame is implied by the values used to initialize the vectors andtensors in a calculation. In addition, it is assumed that all floating numbers are representedin double precision. This is wweful on intrinsically double-precision machines such as aCray; the Criay version of the library will replace double withflost everywhere.
2.1 class Vector
This class represents Cartesian vectors, which are quantities having both magnitude anddirection.
Symbolic Notation: 6 Indiciai Notation: ai
2.1.1 Private Data Members
double x; X component of vector (al)
double y; Y componentof vector (a2)
double z; Z componentof vector (UJ
The Z component is required even in the 2-D version of the library. This is becauseRHALEH and some other finite element codes use a rotation algorithm hat requires vec-tors with Z components,
The PHYSLIB Library
2.1.2 Special Member Functions
Vector (void) ;
Samp[e code:
Vector a; // Default constructor called
// when a is declared
This isthedefault constructorforinstances ofthevector class. Itdoes nothingto initialize the vector. It is declared only to let the compiler know that initializa-tion can be skipped.
Vector(const double, const double, const double) ;
Sampleco&:
Vector a(5., 6., 2.);
Constructavector with the given components.
Vector(const Vector&);
Samplecode:
Vector a;
Vector b = a; // Construct and initialize
Thisisthecopyconstructorforobjectsofcla,ssVector.Itisdefinedmainlytoen-hancevectorization on CRAYcomputers.
Vector& operator=(const Vector&);
Sample code:
Vector a, b;
a=b;
ThisistheassignmentoperatorforobjectsofclassVector.ltisdefinedmainlyto
enhancevectorizationonCRAYcomputers.
double X(void) const;
22
The PHYSLIB Library
Symbolic notation: t ● 1 lndicial notation: al
Samp!e code:
Vector a;
print f( ’’The X component of a is %f\n”, a.X());
double Y(void) const;
Symbolic notation: h wj Indicial notation: az
Sump[e co&:
Vector a;
printf(’’The Y component of a is %f\n”, a.Y()) ;
double Z(void) const;
Symbolic notation: ii.? Indicial notation: a~
Sample co&:
Vector a;
printf(’’TheZ component of a is %f\n”, a.Z()) ;
void X(const double) ;
Symbolic notation: None Indicial notation: al +s
Sample code:
Vector a;
a.X(2.); // set X component of a to 2.
void Y(const double) ;
Symbolic notation: None lndicial jwtution: az+s
Sample code:
Vector a;
23
The PHYSLI13 Library
a. Y(2 .); // set Y componenz of d to 2.
void Z(const double ).;
Symbolic notation: None Indiciai lwtation: Ul+s
Sample co&:
Vector a;
a. Z(2 .); // set Z component of a to 2.
Provide accessto the componentsof avector. his isrequired chieflyforI/Obutis also ameansfor letting future classes work with vectors without requiring ahuge list of friend functions in the vector class definition. [t does not violate theidea of data abstmction, since nonpnvileged functions must still access the com-ponents of a vector through a functional interface.
2.1.3 Utility Functions
int fread (Vector&, FILE*) ;
int fwrite (const Vector, FILE*) ;
int fread (Vector*, int, FILE*) ;
int fwrite(const Vector*, const int, FILE*) ;
Sump\e code:
Vector a, b, c[2], d[51;
FILE* InFile, Out File;
fread (a, InFile) ;
fread (c, 2, InFile) ;
fwr~te (b, Out File) ;
fwrite (d, 5, OutFllej;
~eseoverloads provide auonvenient intefidce tothefread() and fwriteoIibrary functions for binaryinput/output. The second version ofeach is intendedforarrays ofvectors (e.g., Veckor c[2] ; declares an array of two vectors),
These functions were written to be as consistent as possible with the standardfreado and fwriteo functions.Thus,theyare.friendsratherthanmemberfunctions,andtheintegerreturned is the number of objects read or written.
24
The.PWSLIB Library
2.2 class Tensor
This class represents general Cartesian 2nd-order tensors. In the 2-D version, the off-diag-
onal z-S A13,A13,All, and An = omitted. me ~agonal z @M4 A3v is n~ed in 2-Dfinite element codes,
Symbolic notation: A Indicial rwkztion: Ail
2.2.1 Private Data Members
double xx;
double xy;
double xz;
double yx;
double yy;
double yz;
double zx;
double zy;
double zz;
xx component of tensor (A,, )
xy component of tensor (A,Z)
xz component of tensor (A ,3)
yz component of tensor (Azl)
yy component of tensor [Az)
yz component of tensor (Az,)
zx component of tensor (A31)
zy component of tensor (A32)
zz component of tensor (AJ~)
2.2.2 Special Member Functions
Tensor (void) ;
Sampleco&:
Tensor a; // Declare an uninitialized
// tensor.
Default constructor for instances of the Tensor class.
Tensor (const double, const double, const double, const
double, const double, const double, const double,
const double, const double) ;
Sample code:
25
The PHYSLIB Library
Tensor a(2. , 3., 5.,
4 6., 4.,.1
1 9., 11.);-t
Construct a tensor with the given components. The arguments corresponding tooff-diagonal z ten-m are omitted in the 2-D version,
Tensor (const Tensor&) ;
Sample co&:
Tensor a;
Tensor b = a; // Construct and initialize
ThisisthecopyconstructorforobjectsofclassTensor.Itisdefinedmainlytoen-
hance vectorization on CRAY computers,
Tensor& operator= (const Tensor&) ;
Sample code:
Tensor a, b;
a=b;
Thisisthe assignment operator for objects of class Tensor. It is defined mainly toenhance veztorization on CIWY computers.
Tensor (const SymTensor) ;
Tensor (const AntiTensor) ;
Sample co&:
SymTensor a;
AntiTensor b;
Tensor c = a, d = b;
Convert a symmetric or antisymmetric tensor to full tensor representation. Theseoperators become standard conversions that the compiler invokes implicitlywhere needed. However, most operators are explicitly defied for mixed tensortypes, since this is more efficient.
26
The PHYSLIB Library
These conversions are somewhat dangerous, since useless operations such asTrans (SymTensor ) orTr (AntiTens or) willbeacceptedbythecompiler.The worstconsequenceofpermittingtheseconversionsisthatoperationssuch asInverse (AntiTensor ) willbe attemptedandresultina singular matrix er-ror. The RHALE++ development team felt that, since these conversions are sonatural, they should be included in PHYSLIB in spite of the potential dangers.
Tensor& operator= (const SymTensor) ;
Tensor& operator= (const AntiTensor) ;
Sample co&:
SymTensor a;
AntiTensor b;
Tensor c, d;
c=a;
d=b;
Assign a symmetric or anti symmetric tensor value to a preexisting tensor vari-able. If these operations were not defined, the compiler would call the conversionconstructors defined above and assign the result, which is less efficient than as-signing the values directly,
double XX (void) const ;
Symbolic notation: 2A~ Indicia! notation: A,,
Sample co&:
Tensor A;
printf (“The XX component of A is %f “, A. XX() );
double XY (void) const;
Symbolic notation: iA ~ Indicial notation: A ,Z
Sample couk:
Tensor A;
27
The PHYSLIB Library
printf ( “The XY component of A is %f”, A.XY( ));
double XZ (void) const;
Symbolic notation: ?A 2 Indicial notution: A,B
Sample co&:
Tensor A;
prlntf(’’The XZ component of A is %f”, A.XZ());
double YX(void) const;
Symbolic notation: jAi
Sample code:
Tensor A;
printf(’’The YX component of A is %f”, A.YX()) ;
double YY(void) const;
Symbo[icnotation: fAj Indicidt iotutiw :A22
Indicial notation :A21
Samp[ecode:
Tensor A;
printf(’’The YY component of A is %f”, A.YY());
double YZ(void) const;
Symbolic notation: 5A? Itldil’idl notution: A2J
Samplecode:
Tensor A;
printf(’’The YZ component of A is %f”, A.YZ()) ;
double ZX(void) const;
28
The PHYSLIB Lhary
$m.bolic notation: fAl Indicial notation: AJL
Sample co&:
Tensor A;
printf (“The 2X component of A is %f”, A. ZX() );
double ZY(void) const;
Symbolic notation: ?Aj Indicial notation: An
Sarnpkc ode:
Tensor A;
printf(’’The ZY component of A 1s %f”, A.ZY());
double ZZ(void) const;
Symbolic notation: 2A? Indicial notation: Ay~
Sample code:
Tensor A;
printf(’’The ZZ component of A is %f’, A.ZZ());
void XX(const double) ;
Symbolic notation: None Indicial notation: A,1+s
Sampleco&:
Tensor A;
A.XX(3.); II Set XX component of A to 3.
void XY(const double) ;
Syrnbolicnotation :None Indicial notation: A~z+s
Sample code:
Tensor A;
29
The PHYSLIB Library
A. XY(3 .); // Set XY component of A to 3.
void XZ(const double) ;
Symbolic notation: None Indicial notation: A1~+s
Sample co&:
Tensor A;
A.XZ(3. ); // Set XZ component of A to 3.
void YX(const double) ;
Symbolic notation :None
SampLeco&:
Tensor A;
A.YX(3. );
Indicial notation: Azl i-s
// Set YX component of A to 3.
void YY(const double) ;
Symboknutation: None Indicia\ notation: AZ +s
Sampleco&:
Tensor A;
A.YY(3.);
void YZ(const double) ;
Symbolic notatwn: None
// Set YY component of A to 3.
Indicial notation: Am +s
Sample co&:
Tensor A;
A.YZ(3.); // Set YZ component of A to 3.
void ZX(const double) ;
Symbolic rwtution: None Indiciainotation :A31+s
30
The PHYSLIB Library
Sample cotk:
Tensor A;
A. ZX(3 .); // Set ZX component of A to 3.
void ZY(const double) ;
Symbolic notation: None Indicial notation: A32+s
sampk?co&:
Tensor A;
A.ZY(3.); // Set ZY component of A to 3.
void ZZ(const double) ;
Symbolic notation: None Indicial notation: ABJ+s
Samplecode:
Tensor A;
A.ZZ(3.); // Set ZZ component of A to 3.
Provide access to components of a tensor through a functional interface. Thefunctionscorrespondin gtooff-diagonalz termsdo notexist inthe2-Dversion ofthe library, since these components always vanish in 2-D finite element codes.
2.2.3 Utility Functions
int fread(Tensor&, FILE* );
int fwrite (const Tensor, FILE*) ;
int fread (Tensor*, int, FILE*) ;
int fwrite (const Tensor?, const int, FILE*);
Sample co&:
Tensor a, b, c[2], d[5];
FILE* InFile, OutFile;
fread (a, InFile);
fread (c, 2, InFile);
31
The PHYSLIB Library
fwrite (b, OutFile);
fwrite (d, 5, OutFile);
These overloads provide aconvenient interface tothefread() and fwriteolibrary functions for binary input/output.
These functions were written to be as consistent as possible with the standardfread () and fwri te () functions.Thus,theyarefriendsratherthanmemberfunctions,and the integer returned is the number of objects read or written.
2.3 class SymTensor
This class represents symmetric tensors. By providing a separate representation of sym-metric tensors, we save both memory and computation time, since a symmetric tensor hasfewer independent components. Since symmetric tensor are simply a special case of gen-eral tensors, they share the same notation and operations.
Symbo!ic notation: A Indicia! notation: Aij
2.3.1 Private Data Members
double xx;
double xy;
double xz;
double yy;
double YZ;
double zz;
xx component of a symmetric tensor (A,1)
xy component of a symmetric tensor (J412= Azl)
xz component of a symmetric tensor (A,3 = A~1)
yy component of a symmetric tensor (Az)
yz component of a symmetric tensor (A23 = An)
zz component of a symmetric tensor (A33)
2.3.2 Special Member Functions
SymTensor (void) ;
Samplecode:
SymTensor a; // Construct an uninitialized
/ / SymTensor.
32
The PHYSLIB Library
Default constructor for instances of the class SymTensor.
SymTensor (const double, const double, const double,
const double, const double, const double) ;
Sumpk code:
SymTensor a(l., 5., 3.,
4 6.,.t
5.);
Construct asymmetric tensor with the given components. The arguments corre-sTonding tooff-diagonal zcomponents are omitted in the2-D version.
SymTensor (const SymTensor&) ;
Samplecode:
SymTensor a;
SymTensor b = a; // Construct and initialize
ThisisthecopyconstructorforobjectsofclassSymTensor.ltisdefinedmainly
toenhancevectorizationon C3WY computers.
SymTensor& operator= (const SyrnTensor&) ;
Sample code:
SymTensor a, b;
a=b;
This is the assignment operator for objects of class SymTensor. It is definedmainly to enhance vectorization on CRAY computers.
double XX(void) const;
Symbolic notation: 1Af Indicial notation: A,1
Sample code:
33
The PHYSLIB Library
SymTensor A;
print f( ’’The XX component of A is %f”, A. XX()) ;
double XY(void) const;
Symboh_cnotation: 2Aj Indicialnotation: Alz
Sample code:
SymTensor A;
printf(’’The XY component of A is %f”, A.XY()) ;
double XZ(void) const;
Symbolicnotation: 3Af Indicial notation: A,3
Sample code:
SymTensor A;
printf(’’The XZ component of A is %f”, A.XZ());
double YY(void) const;
symbolic rwtatwn: 9A J Indiciai notation: AZ
Samplecode:
SymTensor A;
printf(’’The YY component of A is %f”, A.YY());
double YZ(void) const;
Symbo!icnofation:jAi lndiciafnotation:An
Sample code:
SymTensor A;
printf(’’The YZ component of A is %f”, A.YZ());
34
The PHYSLIB Libray
double ZZ (void) const;
Symbolic notation: 2A2 Indicial notation: AJB
samplecode:
SymTensor A;
printf(’’The ZZ component of A is %f”, A.ZZ()) ;
void XX(const double) ;
Symbolic notation: None Indicial notation: A,1 +s
Sampleco&:
SymTensor A;
A.XX(3. ); // Set XX component of A to 3.
void XY(const double) ;
Symbo[icnotation: None Indicial notation: A~z+s
Sample code:
SymTensor A;
A.XY(3.); // Set XY component of A to 3.
void XZ(const double) ;
Symbolicnotation: None Indicial notation: A13+s
Sample code:
SymTensor A;
A.XZ(3.); // Set XZ component of A to 3.
void YY(const double) ;
Symbolic notation: None Indicial nottltion: Ani-s
Sample code:
35
The PHYSLIB Library
SymTensor A;
A. YY(3 .); // Set YY component of A to 3.
void YZ(const double) ;
Symbolic notution: None Indicialnotution :AZB+S
Sampieco&:
SymTensor A;
A.YZ(3. ); // Set YZ component of A to 3.
void ZZ(const double) ;
Symbolic notation :None Indicial notation.: ABBi-s
Sample code:
SymTensor A;
A.ZZ(3. ); // Set ZZ component of A to 3.
Provide accessto components ofa symmetrkt ensor through a functional inter-face. The functions corresponding tooff-diagona] ztermsdo notexist inthe 2-Dversion of the library, since these components always vanish in 2-D finite ele-mentcodes.
2.3S Utility Functions
int fread (SymTensor&, FILE* );
int fwrite (const SymTensor, FILE*) ;
int fread(SyrnTensor*, int, FILE*) ;
int fwrite(const SymTensor*, const int, FILE*) ;
Sample code:
SymTensor a, b, c[2], d[5];
FILE* InFile, OutFile;
fread (a, InFile);
36
The PHYSLIB Librmy
fread (c, 2, InFile);
fwrite (b, OutFile) ;
fwrite (d, 5, OutFile);
These overloads provide aconvenientinterface tothefread() and fwriteolibrary functions for binary input/output.
These functions were written to be as consistent as possible with the standardfread () and fwrite () functions. Thus, they are friends rat-her th~ memk
functions, and the integer returned is the number of objects read or written.
2.4 class AntiTensor
This class represents anti symmetric tensors, By providing a separate representation, wesave quite a lot of memory and computation time. Since antisymmetric tensors are a spe-cial case of general tensors, the notation and operators are identical.
symbolic notation: A Indicial notation: Aij
2.4.1 Private Data Members
double xy; xy componentofthetensor (A12= -A21)
double xz; xzcomponentofthetensor(A,3= –A31)
double yz; yzcomponentofthetensor (A23= -A32)
2.4.2 Special Member Functions
AntiTensor (void) ;
Samplecode:
AntiTensor A; // Construct an uninitialized
// AntiTensor
DefaultconstructorforkwtancesoftheclassAnt iTens or.
AntiTensor (const double, const double, const double) ;
37
The PHYSLKB Library
Sample co&:
AntiTensor A(-2. , -3. , -l. );
Construct an antisymmetric tensor with the given components. The second andthird arguments are omitted in 3-D.
AntiTensor (const AntiTensor&) ;
Sample code:
AntiTensor a;
AntiTensor b = a; // Construct and initialize
ThisisthecopyconshwctorforobjectsofclassAntiTensor.It is defined mainlyto enhance vectorization on CRAY computers.
AntiTensor& operator= (const AntiTensor&) ;
Sample code:
AntiTensor a, b;
a=b;
This is the assignment operator for objects of class AntiTensor. It is definedmainly to enhance vectorization on CIWY computers.
Indicia[ notation: A,2
double XY (void) const;
symbolic notation: 3Aj
Sample co&:
AntiTensor A;
printf (“The XY component of A is %f”, A. XY() );
double XZ (void) const;
symbolic notatwn: 2A? Indiciai notation: AlB
Sample co&:
38
The PHYSLIB Library
AntiTensor A;
print’f (“The X2 component of A is %f”, A. XZ() );
double YZ (void) const;
symbolic notation: JA ? Indiciai notation: AZJ
Sample code:
AntiTensor A;
printf(’’The YZ component of A is %f”, A.YZ());
void XY(const double) ;
Symboliciwtution: None Indicial notation: Alz+-s
Sample co&:
AntiTensor A;
A.XY(3.) ; // Set XY component of A to 3.
void XZ(const double) ;
Symbolic notation: None lndicial notation: A1~-s
Sample code:
SymTensor A;
A.XZ(3. ); // Set XZ component of A to 3.
void Y’z(const double) ;
Symbo[ic notation: Nmw lndiciul notation: Az~-+s
AntiTensor A;
A.YZ(3. ); // Set YZ component of A to 3.
39
The PHYSLIB Library
Provide access to components of an antisymmetric tensor through a functional in-terface. The functions corresponding to off-diagonal z terms do not exist in the 2-D version of the lihrwy, since these components always wmish in 2-D finite ele-ment codes.
2.4.3 Utility Functions
int fread (Anti Tensor&, FILE* 1;
int fwrite (const Anti Tensor, FILE*) ;
int fread (AntiTensor*, int, FILE*) ;
int. fwrite (const Anti Tensor*, const int, FILE*) ;
Sample co&:
AntiTensor a, b, c[2], d[5];
FILE* InFile, Out File;
fread (a, InFile) ;
fread (c, 2, InFile);
fwrite (b, OutFile);
fwrite (d, 5, OutFile);
Theseoverloadsprovideaconvenientintefidcetothefreado and fwriteo
Iibraryfunctionsforbinaryinput/output.
The,sefunctions were written to be as consistent as possible with thestanclarcifreado and fwriteo functions.Thus,theyarefriendsratherthanmemberfunctions,andthektegerreturnedisthenumber ofobjectsreadorwritten.
40
The PHYSLIB Library
2.5 operator overload Functions
Vector operator -(void) const;
Synlbc]lictlotuti(Jt~: –i Indickrl notation: –(l,
‘iector a, b;
a= -b ;
Return the opposite of a vector.
Tensor operator- (void) const;
.9JrmTensor operator- (void) const;
Ant.iTensor operator– (void) const;
,TynllJt]!icnotation.: -A Indicial twtution: –Aij
Somple code:
Tensor A, B;
A = -B;
Returntheoppositeofatensor.
Vector operator* (const Vector, const double) ;
Vector operator* (const double, const Vector) ;
Syrnbolicnotation :21: Indiciul notation: UiC
Sumplerode:
Vector a, b;
double c;
a =b * c;
Return theproduct ofascalarancla vector. 1’hisoperation commutes (ascan bcseen from itsindicial representation) butC++makes no assumptions aboutcom-mutivity of operations; hence. both orderings must be defined. C++ does assume
The PHYSLIB Library
the usual rules of associativity for overloaded operators (thus a* b * c means
(a*b) *cor (i).~)~).
Vector& operator*= (const double) ;
Symbolic notation: h + 2C Indicial notation: ai e ait
Sample code:
Vector a;
double c;
a *= c;
Replaceavectorby itsproductwithascalar.
Vector operator/ (const Vector, const double) ;
Symbolic notation: ii/c Indicial notation: ai/c
Sample co&:
Vector a, b;
double c;
a = b/c;
Return the quotient of a vector with a scalar. The case c = O results in a divide-by-zero error, which is handled differently on different computers.
Vector& operator /=(const double) ;
Symbolic notution: 2 + Z/c Indicial notation: Ui6 ai/c
Sample code:
Vector a;
double c;
a /= c;
Replacea vectorby itsquotientwitha scalar.The casec = O resultsina dhMe-
by-zero error, which is handled differently on different computers.
42
The PHYSLI13 Library
double operator* (const Vector, const Vector) ;
Symbolic ~wtution: ;*; Indiciul notution: Uihi
Sumple code:
Vector a, b;
double c;
c=a * b;
Returnthedotorinnerproductoftwo vectors.
Tensor operator%(const Vector, const Vector) ;
Symbolic notation :~@~ Indicia! notation: uibj
Sample code:
Vector a, b;
Tensor c;
c = a %b;
Returnthe tensor orouterproductof twovectors. The operator ’%’represen ~sthemodulo operation when applied to integers. It was selected to represent theouter
productofvectorsbecausethecompilerassignsitthesame precedenceasmulti-
plication.
Vector operator+ (const Vector, const Vector) ;
Symbolic tmtution: ;+; ftufkitd notation: ai + bi
Sample code:
Vector a, b, c;
a= b+c;
Return the sum of two vectors.
43
The PHYSLIB Library
Vector& opera hor+=(const Vectorj ;
Symbolic notation: A+-;+L Indici(ll notation: ai +- ai + hi
Stlmple txx.k:
Vector a, b;
a += b;
Replacea vector by its sum with i.mother vector.
Vector operator–(const Vertor, ronst VeclIC:r!;
,Yymbolicrwtation: 2-; [ndicitil notation: Ui– bi
Sample code:
Vector a, b, c;
a= b–c;
Returnthedifferenceoftwo vectors.
Vector& operator -=(const. Vector) ;
Symbolic notation: h G L - ~ In.dicid n.otution: Ui.+ ai – bi
Sample code:
Vector a, b;
a —= b;
Replace a vector by its difference with a vector.
Tensor operator’ (const Tensor, const double) ;
SymTensor operator* (const SymTer Lsor, const double) ;
AntiTensor operator* (const AntiTer,sor, const double) ;
Tensor operat-ol-*(const chubie, cons~. Terls:~l);
SymTensor operator* (c~nsL double, const SymTensorj ;
AIIti’T’eIISC)r o~eI”iltor*(c!onst doII]jle,can~t ~nt..~’ren~or);
44
The PHYSUB Library
Symbolic notation: A c Indiciai notation: AijC
Sample co&:
Tensor A, B;
double c;
B= A*c;
Returntheproductof a tensor with a scalar.
Tensor& operator* =(const double) ;
SyrnTensor& operator’=(const double);
AntiTensor& operator*=(const double);
Symboiic notation: Ai-Ac Indiciai ?wtation: Aij+ Aijc
Sample code:
Tensor A;
double c;
A *= c;
Replacea tensorby itsproductwitha scalar,
Tensor operator/(const Tensor, const double) ;
SymTensor operator/(const SyrnTensor, const double);
AntiTensor operator/(const AntiTensor, const double) ;
Symbolic notation: A/c Indicialnotation: A1j/c
Sampleco&:
Tensor A, B;
double c;
B = A/c;
Retumthe quotientofatensorwithascalar.Thecasec =Oresultsinaclivicle-
by-zeroerror,whichishandleddifferentlybydifferentcomputers.
45
The PHYSLI13 Library
Tensor operator/ =(const double) ;
SymTensor& operator/ =(const double) ;
AntiTensor& operator/=(const double) ;
Symbolic notation: Ai-A/c Indiciainotation: Aij&Aij/c
Sampiecode:
Tensor A;
double c;
A /= C;
Replaceatensorby itsquotientwithascalar.The casec= oresultsinaclivide-
by-zero error, which is handled differently by different computers.
Vector operator* (const Tensor, const Vector) ;
Vector operator* (const AntiTensor, const Vector) ;
Vector operator* (const SymTensor, const Vector) ;
Symbo[icnotution: A; lndicial notation: Aijbj
Sample code:
Tensor A;
Vector b, c;
c=A*b;
Return the result of left-multiplying avectorby a tensor. There are three cases,corresponding to the three varieties of tensor implemented in PHYSLIB; all areidentical innovation and usage, however.
Vector operator* (const Vector, const Tensor) ;
Vector operator* (const Vector, const AntiTensor) ;
Vector operator* (const Vector, const SymTens,or) ;
Symboiic notation: iB I#ldit’iai tlotatitJrl:ajBji
Sample co&:
46
The PHYSLIB Library
Vector a;
Tensor b, c;
c=a ‘ b;
Returntheresultofright-multiplyinga vectorby atensor,
Tensor operator* (const
Tensor operator* (const
Tensor operator* (const
Tensor operator* (const
Tensor operator* (const
Tensor operator* (const
Tensor operator*(const
Tensor operator* (const
Symbolicnotution :AB
Samplecode:
Tensor A, B, C;
C =A * B;
Tensor, const Tensor) ;
SymTensor, const Tensor) ;
Tensor, const SymTensor) ;
SymTensor, const SymTensor) ;
AntiTensor, const Tensor) ;
Tensor, const AntiTensor) ;
AntiTensor, const SymTensor) ;
SymTensor, const AntiTensor) ;
Indicial twtation: AijBjk
Return theproduct ofatensor witha tensor.
Tensor operator+(const Tensor, const Tensor) ;
Tensor operator+(const SymTensor, const Tensor) ;
Tensor operator+(const Tensor, const ,SymTensor) ;
SyrnTensor operator+(const SymTensor, const SymTensor);
Tensor operator+(const AntiTensor, const Tensor) ;
Tensor operator+(const Tensor, const AntiTensor) ;
Tensor operator+(const AntiTensor, const SymTensor) ;
Tensor operator+(const SymTensor, const AntiTensor) ;
AntiTensor operator+ (const AntiTensor, const AntiTen-
sor) ;
47
The PHYSLI13 Library
Symbolic notation: A + B !ndicid notation: Aij + Bij
Sample code:
Tensor A, B, C;
C= A+B;
Returnthesum of two tensors.
Tensor& operator+= (const Tensor) ;
Tensor& operator+ .(const SymTensor) ;
SymTensor& operator+=(const SymTensor) ;
Tensor& operator+=(const AntiTensor) ;
AntiTensor& operator+=(const AntiTensor);
Symbolic notation :Ai-A+B ]ruficiaf notution: Aij + Ail+ Bij
Sarnplf?code:
Tensor A, B;
A += B;
Replaceatensorby itssum withanothertensor.
Tensor operator–(const Tensor, const Tensor) ;
Tensor operator- (const SymTensor, const Tensor) ;
Tensor operator- (const Tensor, const SymTensor) ;
SymTensor operator-(const SymTensor, const. ~ymTen:~or) ;
Tensor operator-(const AntiTensor, const ‘[(”l”lSOr) ;
Tensor operator- (const Tensor, :;onst AntiTensor);
Tensor Operator-(const AntiTcnsor, const SymTensou) ;
Tensor operator-(const SymTensor, COP.SK. A~:l:~T~l~.:.~l);
AntiTensor operator– (const lWtiTe~i:;or, const Ant.iTen-
sor) ;
Symbolienotation :A-B indicial notation: A,j - Ilij
The PHYSLIB Library
Sampk code:
Tensor A, B, C;
C= A-B;
Returnthedifferenceoftwo tensors,
Tensor& operator- =(const Tensor) ;
Tensor& operator-=(const SymTensor) ;
SymTensor& operator-=(const SymTensor) ;
Tensor& operator-=(const AntiTensor);
AntiTensor& operator-=(const AntiTensor);
Symbolic notation: A~A -B Indicia~notation: Aij+Aij-Bij
Sampkc ode:
Tensor A, B;
A -= B;
Replaceatensorbyitsdifferencewithanothertensor.
49
The PHYSLI13 Library
2.6 Methods
Vector Cross (const Vector, const Vector) ;
Symbolic notation: h x; Indicial notation: cijkajbk
Sample code:
Vector a, b, c;
c = Cross (a, b);
Vector or cross product of two vectors. The symbol Eijk is the permutation sym-
bol, which is O if any of the i, j, or k are equal, 1 if they are an even permutationof the sequence 1, 2, 3, and -1 if they are an odd permutation of the sequence 1, 2,3. For example, &lzz= O; E123 = 1; and E213 = –1. The cross product is distributive
and associative but not commutative.
Vector Dual (const Tensor) ;
symbolicnotation: Dual (A) Indicia[ notation: EijkAjk
Sample co&:
Tensor A;
Vector b;
b = Dual(A) ;
Any tensorA can be split into a symmetric part ~ (A + AT) and an antisymmelric
part ~(A-AT). The dual of a tensor is a vector which depends uniquely on its
antisymrnetric part,
AntiTensor Dual
Symbolic notation:
Sample code:
Vector a;
(const Vector) ;
Dual(~) Indicial notation: Eijk;k
AntiTensor B;
B = Dual(a) ;
50
The PHYSLI13 Library
Dual of a vector. It can be proved that DuaI(Dual(ti)) = Z?, The concept of the dual
is closely related to the cross product, since ~Dual(2) = ii x ~.
double Norm (const. Vector) ;
Symlmlic notation: 161 Indicial notation: %
Sample code:
Vector a;
double b;
b = Nor?n(a);
Returns the magnitude or norm of a vector. This is calculated as the square rootof the dot product of the vector with itself.
double Norm(const Tensor) ;
double Norm(const SymTensor) ;
double Norm(const Anti Tensor) ;
symbolicnotation: 1AI Indicial flotation: G
Sample code:
Tensor A;
double c;
c = Norm(A) ;
Returns the norm of a tensor. This is calculated as the square root of the scalarproduct of the tensor with itself.
double DeL (const Tensor) ;
double Det (const SymTensor) ;
Symbolic notution: da [A] Indiciul notation: ~ E E6 ij~ ‘m”
AilAjmAk,,
Sample code:
Tensor A;
51
The PHYSLIB Library
double c;
c = Det (A);
Determinantofatensor.[tisalwayszeroforanantisymmetrictensor.
Tensor Inverse (const Tensor) ;
SymTensor Inverse (const SymTensor) ;
Symboiic notation: A-l
!hn@e code:
Tensor A, B;
B = Inverse(A);
inverseof a tensor. If the tensor is singular, a divide-by-zero error will result(which may be ignored on machines using the IEEE floating point standard). An-tisymmetric tensors are always singular.
double Tr (const Tensor) ;
double Tr(const SymTensor) ;
Symbolic notution: TrA Indiciul notution: Akk
Sample code:
Tensor A;
double c;
c = Tr (A);
Trace of a tensor. The trace of an antisymmetrk tensor is always zero.
Tensor Trans(const Tensor) ;
Symboiic notation: AT Indicia! mmltion: Ajk
Sumple code:
Tensor A, B;
B = Trans (A);
52
The PHYSLIB Library
Transpose of a tensor. By definition, the transpose of a symmetric tensor is thetensor, while the transpose of an antisymmetric tensor is the opposite of the tc.n-sor.
SymTensor Sym(const Tensor) ;
SymbolicIwt<itl”on: $ (A + A‘) fn.diciu[ notalion: ~ (Aij + Aji)
Sampk code:
Tensor A, B;
B = Sym(A) ;
Symmetric part of a tensor.
AntiTensor Anti.
Symbolic notation:
Sample code:
(c!onst Tensor) ;
~ (A - AT) ]ndicid notution: ~ (Aij - Aji)
Tensor A, B;
B = Anti(A) ;
Antisytnmetricpartofa tensor.
double Colon (const
double Colon (const
double Colon (const
double Colon (corlst
double Colon (const
double Colon (const.
double Colon (const
Symbolic notation: A: B
Su??tph’cod?:
Tensor, const Tensor) ;
Tensor, const SyrnTensor) ;
SymTensor, const Tensor) ;
SyrnTensor, const SymTensor) ;
Tensor, const AntiTensor) ;
Ant.iTensor, const Tensor) ;
Ant iTensor, const AntiTensor) ;
fndiciuf n.otution: AijBij
53
The PHYSLU3 Library
Tensor A, B;
double c;
c = Colon (A, B);
Innerorscakuproductoftwo tensor,also written Tr(A~B). The scalar product ofasymmetric and an antisymmetric tensor is always zero.
Tensor Deviator(const Tensor) ;
SymTensor Deviator(const SymTensor) ;
Symbolic notation: A-~Tr(A)l Indiciui notation: Aij-~Akk6ii
Sampkcode:
Tensor A, B;
B = Deviator(A);
Deviatoricpartofatensor.Thetensor1 istheidentityknsor,whichistheunique
tensorthattransformsany vector into itself and whose components are represent-ed by the Kronecker delta tiij. The deviator of an antisymrnetric tensor is the ten-
sor itself.
double It (const Tensor&) ;
double It (const SymTensor&) ;
double It (const AntiTensor&) ;
Symbolic notation: 1, = Tr(A) Indicial notation: Akk
Sample code:
Tensor A;
double c;
C = It(A);
double IIt(const Tensor&) ;
double IIt(const SyrnTensor&) ;
double IIt(const AntiTensor&) ;
54
The PHYSLIB Library
Symbofic notation: II, = ~ (1A 12- (TrA )‘) IndiciU/ WatiOn: ~ (Ai#ij - (AJ 2,
S(mlple(“(xii’:
Tensor A;
double c;
C = IIt (A);
double IIIt(const Tensor&) ;
double IIIt(const SymTensor&) ;
double IIIt(const AntiTensor&);
Symbolic notation: ~1, = DetA Indicial notation: &ijkE,mnAilAjmAk~
Sample code:
Tensor A;
double c;
c= IIIL(A) ;
Scalarinvariantsofatensor.Thesearethecoefficientsappearinginthecharac-
teristicequationofatensor,They aretheonlythreeindependentscalarsthatcan
beformedina frame-independentmanner from a single tensor; all other scalarsthat can be formed from a tensor are functions of the scalar invariants.
The first invariant is a synonym for the mace; the third is a synonym for the deter-minant. Only the second invariant is nonzero for an antisymmetric tensor.
The characteristic equation itself takes the form
L3– I, A2– II IX-111, = L1 (29)
and its roots are the principal values of the tensor.
Tensor Eigen (const SymTensor, Vector&) ;
This function returns the orthonormal tensor whose columns are the eigenvectorsof the given symmetric matrix. The principal values are placed in the vectorspec-
ifiedby the second argument. Thus, if
A = Eigen(B, Ci) (30)
55
The PHYSLI13 Library
then
D = ATBA (31)
is a diagonal tensor whose elements are given by the vector ei.
2.7 Predefine Constants
const int DIMENSION = 3 ;
This is an integer constant giving the dimensionality of the library. It is defined tobe equal to 2 if the 2-D version of the library is being used.
extern const Vector ZeroVector;
extern const Tensor ZeroTensor;
extern const Anti Tensor ZeroAntiTensor;
extern const SymTensor ZeroSymTensor;
These are objects of the various classes whose components are all zero.
extern const Tensor Identity Tensor;
extern const SymTensor IdentitySymTensor;
Theseareobjects ofthegivenclasses correspondingto the identity tensor, whichis the tensor that transforms anyvector into itself. Theoff-diagonal componentsare zero and the diagonal components are equal to one in any coordinate system.The identity tensor is symmetric and is given in both symmetric and full tensorrepresentations.
56
The PHYSLIB Library
(This page intentionally left blank)
.57
The PHYSLIB Library
58
Using the PHYSLIB classes
3. Using the PHYSLIB classes
The classes defined in PHYSLIB are essentially new arithmetic types analogous to thepredefine int, float, and double types. Their use is illustrated by the programfmgrnent below:
#include “physlib. h” // The example is 3-D
/*...*/
const Tensor One (l., O., 0.,
0 1., 0.,.1
0 0., l.);.1
Tensor GradVel; // Velocity gradient
SymTensor Deformation, deformation, Stretch, Stress;
AntiTensor W, Omega;
Vector omega;
/* . . . */
Deformation = Sym(GradVel);
W = Anti(GradVel);
/’ Integrate rotation and stretch tensors ‘/
omega = 2. *Inverse (Tr(Stretch) *One - Stretch) *
Dual (GradVel*Stretch) ;
Omega = 0.5*Dual(omega) ;
Rotation . Inverse(One - 0.5*delT*Omega) *(One +
59
Using the PHYSLIB classes
O . 5*delT*Omega) ‘Rotation;
Stretch +=
/’ Calculatestress *I
Sym(delT’ (GradVel*Stretch-Stretch*Omega)) ;
unrotated deformation and determine rotated
deformation = Sym(Trans (Rotation) *Deformation*
Rotation) ;
Stress = Sym(Rotation *
ComputeStress (deformation, delT) *
Thisparticularprogramfragmentistakenfromtheintemal
Trans(Rotation)) ;
forcesroutineinRHALE#.
Thevelocity gradient isdecomposed into itsrotation and stretch rate components, thero-tationandstretch areupdatedtothe newtirne,andthe deformation rate isrotatedtothematerial configuration for the calculation of the new stress (which isdonein the user-de-fined routine SymTensor ComputeStress (SymTensor&, double) ).The new
stressisthen rotated back to the laboratory configuration.
3.1 Useless Operations
Certainoperations are mathematically well-defined but useless. For example, the n-ace orthe detenni.nant of an antisymmetic tensor is well-defined but trivially zero. The trans-pose of a symmetric tensor is itself. These operations are not explicitly defined inPHYSLIB, but if the programmer were to write code such as
Antitensor a;
double b;
/* . . . */
b = Tr(a);
thecodewouldcompileandrunnormally.The compilerrecognizesthatthereisastandard
conversionfromAnt iTensor toTensor. Thisconversionk calledfora andtheresult
ispassedtoTr (Tensor), whichreturnsthecorrectvalueofO.
Obviously,programmersshouldavoidsuchuselessconstructs,sincetheyneedlesslycon-sume time and memory. Some users may wish to comment out the standard conversionsresponsible for permitting useless code.
60
Conclusion
PHYSLIB defines vector and tensor classes that are fundamental to the RHALE++ pro-gramming effort, but which are general and should be useful in many scientific applica-tions.
These classes are fundamental components of field classes that represent vector and tensorfields ot’ various types relevant to finite element calculations. These are essentially smartarrays of vectors or tensors with corresponding operations and methods. The arrays are de-fined on a domain represented by a mesh class. Calculus operations such as divergence orgradient are defined in these libraries.
These field classes which utilize the PHYSLIB classes are the subject of a future docu-men t.
61
(This page intentionally left blank)
62
References
[1] M. A.Ellis and B. Stroustrup, The Annotated C+ + R@ret~ce Manuf~l. 1990. Reading,MA: Acldison-Wesley Publishing Company.
[2] L.E.Malvern, Intt-oduczion to the Mechanics ofa Cotltinuous Medium, 1969. Engle-woociCliffs,NJ:Prentice-Hall,Inc.
63
(Thispageintentionallyleftblank)
64
Index of Operators and Functions
AAntiTensor Anti(const Tensor) 53AntiTensor Dual(const Vector) 50AntiTensor operator-( const AntiTensor, const AntiTensor) 48AntiTensor operator-( void) 41AntiTensor oper~tor*(cunst AntiTensor, const double) 44AntiTensor operator* (const double, const AntiTensor) 44AntiTensor operator+ (,const AntiTensor, const AntiTensor) 47AntiTensor operator/(const AntiTensor, const double) 45AntiTensor& operator* =(const double) 45AntiTcnsor& operator+= (const AntiTensor) 48AntiTe.nsol-& oper~tor/=(const double) 46AntiTensor& operator= (const AntiTensor&) 3KAntiTensor& operator-= (const AntiTensor) 49AntiTensor(const ,4ntiTensor&) 38AntiTensor(const double, const double, const double) 37AntiTensor(voici) 37
DdoubleColon(constAntiTensor,constAntiTensor)53doubleC’olon(constSymTenscn-,consrSymTensor)53double Colon(const Tensor, const Tensor) 53double Det(consl SymTensor) 51double Det(const Tensor) 51double Illt(const AntiTensor&) 55double lIIt(const SymTensor&) 55double IIlt(const Tensor&) 55double Ilt(const AntiTensor&) 54double Ilt(.const SynlTensor&) 54double Ht(const Tensor&) 54double [t(const AntiTensor&) 54double It(const SymTensor&) 54doub[e It(const Tensor&) 54double Norm(const Vector) 51double opcrutor*(ccmst Vector. const Vector) 43double T1-(const SymTensor) 52double “rr(const Tensor) 52
double X(void) 22
double XX(void) 27.33double XY(const double) 39double XY(,void) 27,34, 3’?double XZ(cxmst double) 39double XZ(voicl) 28,34,38double Y(voici) 23double YX(void) 28double YY(void’) 28,34
65
double YZ(const double) 39double YZ(void) 28,34,39double Z(void) 23double ZX(void) 28double ZY(void) 29double ZZ(void) 29,35
Iint fread(AntiTensor&, FILE*) 40int fread(AntiTensor*, int, FILE*) 40int fre~d(SymTensor&, FILE*) 36int fread(SymTensor*, int, FILE*) 36int fread(Tensor&, FILE*) 31int fread(Tensor*, int, FILE*) 31int fread(Vector&, FILE*) 24int fretidI(Vector*, int, FILE*) 24int fwrite(const AntiTensor*, const int, FILE*) 40int fwrite(const AntiTensor, FILE*) 40int fwrite(const SymTensor*, const int, FILE*) 36int fwrite(const SytnTensor, FILE*) 36int fwrite(const Tensor*, const int, FILE*) 31int fwrite(const Tensor, FILE*) 31int fwrite(const Vector*, const int, FILE*) 24int fwrite(const Vector, FILE*) 24
sSymTensor Deviator(const SymTensor) 54SymTensor Inverse(const SymTensor) 52SymTensor operator-(const SymTensor, const SymTensor) 48SymTensor operator-( voicf) 41SymTensor operator* (const double, const SymTensor) 44SymTensor operator* (const SymTensor, const double) 44SymTensor operator+ (const SymTensor, const SymTensor) 47SymTensor operator+=(const SymTensor) 48SymTensor operator/(const SymTensor, const double) 45SymTensor Sym(const Tensor) 53SytnTensor& operator*=(const double) 45SytnTensor& operator/= (const double) 46SymTensor& operator= (const SymTensor&) 33SymTensor& operator-=(const SymTensor) 49SymTensor(const double, const double, .,. , const double) 33
SymTensor(const SymTensor&) 33SymTensor(void) 32
TTensor Deviator(const Tensor) 54Tensor Eigen(const SymTensor, Vector&) 55Tensor Inverse(const Tensor) 52Tensor operator% (const Vector, const Vector) 43Tensor operator-(const AntiTensor, const SymTensor) 48
Tensor operator-(const AntiTensor, const Tensor) 48Tensor operator-(const SymTensor, const AntiTensor) 48Tensor operator-(const SymTensor, const Tensor) 48Tensor (>perator-(collst Tensor, co[lst AntiTellsor) 48Tensor operator-(const Tensor, const SymTensor) 48Tensor operi.itor-(const Tensor, const Tensor) 48Tensor operator-( void) 41Tensor operator*(const AntiTensor, const SymTensor)47Tensor operator*(const AntiTensor, const Tensor)47Tensor operator*(const double, constTensor) 44Tensor operator*(const SymTensor, const AntiTensor)47Tensor operator* (const SymTensor, const SymTensor) 47Tensor operator* (const SymTensor, const Tensor) 47Tensor operator* (const Tensor, const AntiTensor) 47Tensor operator* (const Tensor, uonst double) 44Tensor operator*(const Tensor, const SymTensor) 47Tensor operator*(const Tensor, const Tensor) 47Tensor operator+(const AntiTensor, const SymTensor) 47Tensor operator+(const AntiTensor, const Tensor)47Tensor operator+(const SymTensor, const AntiTensor)47Tensor operator+(const S~mTensor, const Tensor)Tensor operator+(const Tensor, const AntiTensor)Tensor operator+(const Tensor, const SymTensor)Tensor operator+(const Tensor, constTensor) 47Tensoroperator/(const Tensor, constciouble) 45
474747
Tensor operator/=(const double) 46Tensor Trans(const Tensor) 52Tensor& operator* =(const double) 45Tensor& operator+= (const AntiTensor)Tensor& operator+= (const SymTensor)Tensor& operator+=(const Tensor) 48
4848
Tensor& operator-= (const AntiTensor) 49Tensor& operator= (const AntiTensor) 27Tensor& operator-= (const SymTensor) 49Tensor& operator=(const SymTensor) 27Tensor& operator=(const Tensor&) 26Tensor& operator-= (const Tensor) 49Tensor(const AntiTensor) 26
Tensor(const double, const double, .... const double) 25Tensor(const SymTensor) 26Tensor(const Tensor&) 26Tensor(void) 25
vVector Cross(const Vector, const Vector) 50Vector Dual(const Tensor) 50Vector operator-(const Vector, const Vector) 44Vector operator-(void) 41Vector operator* (const AntiTensor, const Vector) 46Vector operator* (constdouble, const Vector) 41
67
Vector operator* (const SymTensor, const Vector) 46Vector operator* (const Tensor, const Vector) 46Vector operator* (const Vector, const AntiTensor) 46Vector operator* (const Vector, const double) 41Vector operator* (const Vector, const SymTensor) 46Vector operator* (const Vector, const Tensor) 46Vector operator+ (const Vector, const Vector) 43Vector operator/(const Vector, const double) 42Vector& operator”= (const double) 42Vector& operator+=(const Vector) 44Vector& operator/=(const double) 42Vector& operator= (const Vector&) 22Vector& operator-= (const Vector) 44Vector(const double, constdouble, constdouble) 22Vector(const Vector&) 22Vector(void) 22void XX(const double) 29,35void XY(const double) 29,35void XZ(const double) 30,35void YX(const double) 30void YY(const double) 30,35void YZ(const double) 30,36void Z(const double) 24void ZX(const double) 30void ZY(const double) 31void ZZ(const double) 31, 36
xX(const double) 23
YY(const double)23
zZ(void) 22
68
Distribution
1. External Distribution
R. W. AlcwincDARPA/RMCI140(J Wils~ln Blvd.Arlingtun. VA 22209
R. T. .Alkn
Pacilic:l Tccllnt~kJwP.o. llox 14sDel Mar,CA 9’2[)14
M. .~hllC
Logictm RDA21(rn)W:Ishingt(m Blvd.Arlington. VA 22204-57(M
Anntech lnlcrn;~tion:d Cmpor:llim (2)A[[n: R. S. Dunh:un
R. F,. !’4ick~llJw Rnshid
3344 N. Ttwrcy Pines Ct.
Suite 320Lt Jolla, CA 92037
Jmws C. AIIIWIKI
Directm(’enkr I(w IIigh Pcrl”ornlanL’c Ctmputing
klmws Rcsc:wh Cmkr101(M)N. BurnciRoadAuslin,TX 7S758-44°7
D. M. AustinArmy High Puf, C(mrp. RCSCII.Cntl’.University Of Minnesut:i1300”S. Sccmd S[.Minnu;~polis, MN 5541<
Willi:un E. BxhmhAcroje[ Rcsezrch Prq]ulsi(~n InslilutcP.0, Box 13502Sacrarncnto, CA 95853-4502
F. R,lltiltyMS2(N)-4
I)imMr. kmpl]ysi~sNASA Amc.s Rcsmrch Center
Mtife(t fidd. CA 94(35
()(!
Ken Bannister
US Army Ballistic Research LaboratorySLCBR-IB-MAberdeen Proving Grounds, MD 21005-5066
W. Beck
AT&T Pixel Machines, 4J-214
Crawfords Comer RoadHormtd, NJ 07733-1988
T. BelytschkoDep,artmcnt of Civil EngineeringNorthwestern UniversityEvanston, IL 60201
M, R. BergOrganization 62-30Building 150
Lockheed1111 Lockheed Way
Sunnyvale, CA 94089-3504
B. W. BoehmDARPA/lSTO1400 Wilson Blvd.Arlington, VA 22209
D. Br,andMS N893(JGecdynarnicsFalcon AFB, CO 80912-5000
Lwry BrownInstmmen~ition DevelopmentDenver Research InstituteIJnivcrsity P,arkDtmvm. CO 80208”
John Brunet245 First StreetC’arnbriclgq MA 02142
B.L. Buzke
Scientific Computing Department
NCARP.O. BOX 3[M)0Boulder, CO 80307
Gene CardenLJniversily of Al:dxunaPO Box 870278TUSCdO(X& AL 35487-0278
Art Carlson
Naval Ocean Systems CenterCode 41New London, CT 06320
Bonnie C. Carroll, Sec. Dir.
CEND1
Information IntematiomdP.O. Boix 4141Oak Ridge, TN 37831
J.M.Cnwdlini, Act. Dir.Scientific Computing SktifOffice of Energy ResearchU.S. Department of Energy
Washington, DC 20545
John Champine
University and Government R&D Prog. Mgr.Softw:ue DivisionCray Research Inc.fi55F Lone Oak Dr.Eagan, MN55121
T. F. Chan
Mathematics DepartmentUniversity of California at Los Angeles405 Hilgard AvenueLos Angeles, CA 90024
J, ChandraArmy Research OfilceP.O. Box 12211Rewarch Tri,angk Park, NC 27709
Chuck Charman
GA TechnologiesP.0, Box 81608San Diego, CA 92138
Wwmn C’hem(~kScientific AdvisorDP- 1
U.S. Department of Energy
Forrestd Building4A-045Washington,DC 20585
Ken K. ChipleyMartin Marietta Energy SystemsP.O. Box 2009O:k Ridge, TN 37831-8053
70
Km P. Chong
Department of Civil Engineering
LJniversity of WyomingLaramie. WY X2071
Yong-il Clot)
Orgmimtion81 -12Building 157Lockheed Company1111 Lockheed waySunnyvale, CA 94088-3504
S. C. ChouU.S. Ann y M:iteri:ds Technology Laboratory
SLCMT-BMWatertown, MA 02172-0001
Tien S. ChouEG&G MoundP.O. Box 3000Miamisburg, OH 45343
Eric Chris[i:msen
NASA Johnson Sp:lcc CenterSpace Scicncc Br:mch/SN3Houston, TX 77(I5X
M, Ciment, Deputy Dir.Advanced Scientific Computation Div.RM417National Science FoumkitionWashington, DC 20550”
Dwight ClarkMorton Thiokol CorporationP.O. BOX 524
Mail Stop 281Brighwn City, UT 84302
Richard Claytor, Asst. Secty.
Defense Programs, DE-1
Forrcstal Building 4A-()14
U.S. Deparlmcnt O( EnergyW:~$hington, DC 20550”
T. Cole
MS 180-500Chicl Technologist, Oft. of Tech. Div.
Jet Propulsion L.dxmlory48(N) Oak Grtwc Dr.
Pwtden;t.CA911 09
T. F. Colenmn
Computer Science DepartmentCornell UniversityIthaca, NY 14853
s. ConeyNCUBE19A D:lvis Drive
Belmont, CA 94002
Gerald CollingwoodMorton Thioko] Corporation
Huntsville, AL 35807
John CollinsU.S. Air Force Armament LaboratoryComputational Mcchxnics BranchEglin AFJ3, FL 32542-5434
C. H. ConleySchool of Civil and Environmental EngineeringHollister HallCorrwll UniversityIthwa. NY 14853
D:~vid L. Conover
Swanson Analysis Systems Inc.Johnson Road, P.O. Box 65Houston, PA 15342-0065
J. CoronesAmes L:~boratory236 Wilhelm HdlIowa State UniversityAmes, IA 50011-3020
Ms. C. L. CrothersIBM Corporation]472 Wheelers Farms RoadMilford, CT 06460
J. K. CUl]umThom:N J. Watson Rcse:trch CenterP.o.Box218Yorktown HeighLs, NY 10598
lim CullisXTZ DivisionRoyal Arnmnmt R&D EstablishmentFort H:dstwld
Stweno,aks, KentUnited Kingdom
71
Rich;ud E, D,anellRcsc;wch Officer
Ccn(ral Rcse,arch LnboraloriesBHP Research & Ncw TechnologyP,O. Box 188Wallscnd NSW 2287
Austmlia
L. DavisExecutive Vice President
Cray Research Inc.1168 Industrial Blvd.Chippawa Falls, WI 54729
DARPA/DSO (2)AtIn: L. Auskmdcr
H,L. Buchamm1400 Wilson Blvd.Arlington, VA 22209
Defense Advanced Research Projects Agency (3)Attn: Lt. Col. Joseph Beno
T. KiehneJ. Richardson
1500 Wilson BoulevardArlington, VA 22209-2308
Mr. Frank R. DeisM,artin MariettaFalcon AFB, CO 80912-5000
R. A. DcMilloDirector, Comp. & Colnput. Resch.Rm. 304Na[ion;d Science FoumkltionWashington, DC 20550
L, DengApplied Mathematics Department
SUNY at Stony BrwkSlcmy Brook, NY 11794-3600
A, Trcnl DcPcrstit
Program N4miger
DARPA/ASTO1400 Wilson Blvd.
Arlington, VA 22209-2308
Ramji DigumarthiOrg. 8111. Bldg. 157Lockhed MSDP.O. Box 3504Sunnyvale, CA 94088-3504
J. Dwdl Dixon
Spokmw Research CenterUS. Bureau of Mines315 Montgomery Avenue
Spokane, WA 99207
J.J. Dong.amaComputer Scicncc Department104 Ayres HallUniversity of’TenncssccKnoxville, TN 37996-1301
L. DOWdy
Computer Science DepartmentVanderbilt UniversityNwhville, TN 37235
1. S, DuffCSS Division
Harwell LaboratoryOx[ordshiw, OX11 ORA
United Kingdom
S. C. EisenstatComputer Science Dep,artmcntYale UniversityP.O. BOX 2158New Haven. CT 06520
H. EhnanComputer Science DepartmentUniversity of M,wylandCollege Park, MD 20842
Julius W. EnigEnig Associates, Inc.
11120 New Hampshire Ave.
Suite 500Silver Spring, MD 20904-2633
J. N. En(zminger
DARPA[rTO1400 Wilson Blvd.
Arlington. VA 22209
A. M. Erisman
MS7L-21Boeing Computer ServicesP.O. BOX 24346Seattle, WA 98124-0346
J. GlirnmDcpf. (11Aplllid hl;i[h~’nullicsS[ntc l!niversily t)t’NCW Yljrk A[ S{~my ~r(~,~kstony13nl(kNY 117°’1-3600”
J. ~USClfSOll
(hnpu(cr Scicmx Dqmrmcnt~~6 Wilhc]m Hall[own Sl;il~’[ JnivmilyAlll(’s, M 5(K)I 1
Dr. Jmx P. WldyNTf31(’/GEODYNAfvflCSMS NH930Falcon AFB, CO 8(Y)12-5000”
Brent Henrich
Mobife R&D Laboratory13777 Midway Rd.
P.O. Box 819047DaflM, TX 75244-4312
S[cvc HcrrickTextron Defense Systems
Mail stop I115201 Lowell St.Wihninglon, MA 01887
Hibbitt, Karlsson & Sorensen, Inc. (5)Attn: David Hibbitt
Joop NagtegaalD.P. FlanaganL.M. TaylorW.C. Mills-Curr,an
100 Medway St.Providence. RI 02906
Scott HillNASA Marshall Space Flight CenterMail Code ED52Redstone ArsenalHuntsville, AL 35812
W, D, HillisThinking Machines, Inc.245 First St.Cambridge, MA 02139
Emil HinrichsManager, Computer CenterGecmPrakliIBucholzcr Stral.ie 100P.O. Box 5105 3(I
D-NW() Hanrrover51Germany
L’1’C’Ricllml Hochbewrg
SDIC)/SDA
The PentagonW:ishington, DC 20301-7100
Di-. Albert C. HoltOt’fice of Munitions
Office of the Secretary of StateODDRE/TWPP~n[ii~ol), Room 3B1060”Washington, DC 20301-3100
Mr. Daniel Hulwm,an
V,anguard Research, Inc.10306 Eamrr Place, Suite 450Fairfax. VA 22030-2201
C. J. Holland, DirectorMath and Information Sciences
AFOSR/NM, Boiling AFBWashington, DC 20332-6448
David A. HopkinsU.S. Army Ballistic Research LaboratoryAttn: SLCBR-IB-M
Aberdeen Proving Ground, MD 21 tX)5-5066
William HufferdUnited TechnologiesChemical Systems DivisonP.0, Box 50015
ScanJose, CA 95150-0015
T.J,R. HughesDepartment of Mechanical EngineeringStanford Universitypdo Alto, CA 94306
James P. JohnsonTechnology Dcveloprn&ntRrn L 120, CPC Analysis DepartmentGeneral Motors CorporationEngineering Center3(M)03V:in Dyke Avenue
W,arren, MI 48090-9060”
Jerome B. Johnson
USACRRELBuilding 4070
Ft. Wainwright, AK 99703
Gordon R. Johnson
H(mcywcll, Inc.5901 S, County Rd. 18
Edina, MN 55436
G. S. JonesSubmarine Tech Pmgrarn Support Cen[crDARPA/AVSTO
ISIS Wilson Blvd.Ading[on, VA 22209
74
James W. Jones
Swanson Service Corporation18700 Beach Blvd.Suile 200-210Huntington Be:ich, CA 9264H
T. H. JorditnDepartment of Earth, Atmospheric and Planetary
SciencesMITCambridge, MA 02139
M.H. Kales, Director
Cornell Theory Center514A Engineering and Theory Center
Hoy Road, Cornell UniversityIthaca, NY 14853
Kaman Sciences Corporation (2)
Attn: S. DiehlV, Smith
1500 Garden of the Gods Road
Colorado Springs, CO 80933
H. G. Kaper
Mathematics and Computer Science DivisionArgonne National LaboratoryArgonne, IL 60439
S. K,arin, DirectorSupercomputing Dep.artmcnt9500 Gihnan Drive
University of California at Sian DiegoLa Jok, CA 92009
Dr. A.H. K:izi, DirectorNucle,ar Effects Directorate
U.S. Army Comb:it Systems Test ActivityAberdeen Proving Ground, MD 21005-5059
H. B. Keller
217-50Applied lvlathemaks Deptimenl
CattechPasadena, CA 91125
M. J.KelleyDARPA/DMO1400 Wilson Blvd.Arlington. VA 22209
K. W. Kennedy
Computer Science DepartmentRice UniversityP.O. Box 1892Houston, TX 77251
Gary Kemer
Research EngineerApplied Mechanics and StructuresBattelle Pacific Northwest LaboratoriesP.O. Box 999Richland, WA 99352
Dr. Aram K. Kevorkian
Code 73(MNaval Oce,an SystemsCenter271 CaMina Blvd.
San Diego, CA 92152-5000
Sam. KeyMacNeal-Schwendler815 Colorado Blvd,Los Angeles, CA 90041
D. R. Kinkaid
Center for Numerical AnalysisRLM 13-150University of Texas at AustinAustin, TX 78712
T. A. KitchensOffice of Energy Research
U.S. Department of EnergyWashington, DC 20554
Max KoontzDOE/OAC/DP 5,1
Forrestat Building1000 Independence Ave.Washington, DC 20585
Dr.PeterL. KnepellNTBIC\GEODYNAMICSMSN-8930Falcon AFB, CO 80912-5000
R~ymond D, KriegEngineering Science and Mechanics301 Perkins Hall
University of TennesseeKnoxville, TN 37996
75
V. KunmrComputer Science DepmlnentUniversity of MinnesotaMinneapolis, MN 55455
J. L:mnu(ti
MS B-186Director, Supercomputer Rese,arch Inst.Florida Stme UniversityTallahassw, FL 32306
P, D. LaxNew York University- Courant251 Mercer St.
New York, NY 10012
J.K, LeeDqxwtment Ot-Engineering MechanicsOhio State UniversityColumbus, OH 43210
L;twrence A. Lee, Executive DirectorNorth Carolina Supercomputing CenterP.O. Box 12889
3021 Corn wallis RoadReseamh Triangle Park. NC 27709
D~vid LevineM:tthernatics and Computer ScienceArgonne Natiomd Labormny9700 C,ass Avenue South
Argonne, IL 60439
Trcnt R. Log:tnRockwell lnternationfl GroupM;lil Code NA4012214 L,akewood Blvd.Downcy, CA 90242
M. Louis S, LomeSDIO/TIW
The Pentagon
W;whing[on, ~ qOqOl-7100
(i. LylesCIA
(1219 L:LvcI1Ct ,Springtklcl VA 22152
S. F. McCm-mickComputer M:lthemalics GroupUniversity of Colorado at Denver12(N Larimar St.Denver. CO 80204
Frank M~iesti~
Principti EngineerApplied Research Associates4300 S:m Mateo Blvd.
Suite A220Albuquerque, NM 87110
H. Mair (5)Nmml Surface WarfMe Center10901 New Ehunpshire Ave.
Silver Springs, MD 20903-5000Attn: H. Mnir, W. Reed, W. HoIt, K. B.Kim,
P.Walters
M{wk Ma@usCalifornia Rese:wch and Technology, Inc.
PO Box 2229Princeton, NJ 08543-2229
T. A. Manteuft_elDepartment of MathematicsUniversity of Colorado at DenverDenver. CO 80202
Cmlos Mu_inoIndustry, Science, and Technology Depm_tmentCmy Research Park655 E. Lone Oak Dr.Eagan, MN 55121
William S. Mark, Ph.D.Lockheed - Org. 96-01BuikJing 254E3251 Hznover StreetPato Alto, CA 94303-1191
D, Mttuskir
Orhmlo Technology, Inc.P. o. Box x55Shatimar, FL 32579
John M,Iy (2)Kaman Sciences Corporation1500 Garden of the Gods RodCohmdo Springs, CO 80933Ann: John M:Iy and S. Hones
J, McsirovThinking M:lchirws Inc.245 FirsI StreetC:unbridge. MA 94550
76
JRtJlwrt E. fvlillslcinTh4Czd~~irs(SIWLII(’ambridgr.MA 02 [42
G. Mohnkcl-nN:lv:L1ClCcw Systems Ccnkrcode 73SW Diego. CA ‘)2152-5000
C. MolcrThe M:t{hw~lrks325 Linfield PI: ICCMenlo P~uk. C A ‘)4(V5
V.D. Murly
SOW N. Will;urrctte Blvd.
School of Engineering[Jnivcrsity 01 RM-I1:uKIFl)rlland. 01<97203
C, E. NcedhmnM:lxwclll.:dxw:ikwic~, Inc.2.501 Ynlc S.E,, Suite ‘?00All) IJLIU(LILjUt NM X7 I(K)
D. B. Nelson, Excc. DirOtlice of’ Ent>ryy ResearchU.S. Dep:mtmcnt ~lf EnergyW@inglon. DC 20545
Jim NIH1lMC(MIC6331IN:IVd RCWXUL”IIL:dmrutoryWashington, DC 20375 -5(HM)
Willi:un ,Nes[erOak RirJgc N;ltional LaboratoryPOBox 2009O.&Ridge,TN 37831-8058
Jcl[ Ncwmcycr
Org. 81-WBuilding 1571111 Lockheed waySunnyvale. CA 94089-3504
Dean NormanW:ttmw:Lys Experiment SIatiotlP.O. Box 63 IVicksburg. MS 39180
D. h4. NoscnchuckMech. :uld Aerospw-c Engineering DcpI.D302 E. QUWJl%inc~ton University
Princeton, NJ08544
Office of Nawd Reswrch (2)Altn: Rcmbert Jones
A.S. KushnerStructured Iilccfmnics Division (Code 434)
800 N. Quincy StreetArlington, VA 22217
Dennis L. Orph:d (3)California Research & Technology [nc.5117 Johnson Dr.
Pleasmkm, CA 94588At[n: D. L.Orph;d, P.N.Scl]l~cidcwiIItl. S.P.5cgan
77
J. M. Ortega
Applied Mathematics DepartmentUniversity of VirginiaCharlottesville, VA 22903
John PalmerTMC
245 First StreetCambridge, MA 02142
Robert J. Paluck, PresidentConvex Computer Corporation
3000 Waterview ParkwayP.0, Box 733851
Richardson, TX 75083-3851
Robert P,ardueMartin M,ariettaY-12 Plant, Bldg. 9998
Mail Stop 2Oak Ridge, TN 37831
Kim Parnel]
Failure Analysis Associates, Inc.149 Commonwealth Ave.PO Box 3015Menlo P,ark, CA 94025
S. V. PatterDepartment of MathematicsVan Vleck HallUniversity of WisconsinMadison, WI 53706
Dr. Nisheeth PatelU,S. Ann y Ballistic Rese:wch LabAMXBR-LFDAberdeen Proving Ground, MD 21005-5066
A, T. Pmua
Mcchanica] Engineering Department
77M:mchusetts Ave.MITCambridge, MA 02139
A. Patrinos, Acting DirectorA[mos. and Climate Rcsch. DivisionOffice of Energy Research, ER-74U.S. Department of EnergyWashington, DC 20545
R. F. Peierls
Mathematics Sciences Group, Bldg. 515Brookhaven National LaboratoryUpton, NY 11973
K. Perko
Supercomputing Solutions, Inc.6175 Mancy Ridge Dr.San Diego, CA 92121
John Peu-eskyB.fflistic Research Lab, Launch & Flight Div.
SLCBR-LF-CAberdeen Proving Ground, MD 21 OO5-5W6
Mitchell R. PhillabaumMons,anto Research CorporationMRC-MOUNDMi,amisburg, OH 45342
Philfips Laboratory (3)Attn: F. Allahadi
D. Ftdk
J. Secary
Nuclear Technology BranchKirtlandAFB.NM87117-6008
Dr. Leslie PierreSDIO/ENAThe PentagonWashington, DC 20301-7100
R. J. PlemmonsDepartment of M,athem,atics and Computer Science
Wake Forest UniversityP.O. Box 7311
Winston Salem, NC 27109
John PrenticeAmparo Corporation
3700 Rio Grande, NW
Suite 5Albuquerque, NM 87107-3042
Peter P. F. Mdkowski IIIP.O. Box 1121Los Alamos, NM 87544
J. RattnerIntel Scientific Computers15201 NW Greenbriar Pkwy.Beavcrton, OR 97006
78
Harol(JE.RemlS-CubedP.O. EtOX 1620La Jolla, CA 9203$1620
Dr. John P, ReIelle, JI.
org. 94-90
Lockheed> Bldg. 254G3251 H,mover StreetP:ilo Alto, CA 94304
J.A. ReuscherDepartment of Nuclear Engineering
Texas A & MCollege Station, TX 77843
J ,R. RiceComputer Scicncc DepartmentPurdue UniversityWest Lafayette, IN 47907
J. RichardsonDARPA/TTO1400 Wilson Blvd.Arlington, VA 22209
R. Roh,aniU.S. Army Engineer Wata-wys Experiment StationAttn: CEWES-SD
3909 Hdis Ferry RoadVicksburg, MS 39180-6199
C. RoseElectricity de France1 Ave du Gen. De Gaulle92141 EkunartFrance
R. Z. RwkiesPhysics and Astronomy Dcpartmeflt
100”Allen Hid]
Uniwrsi[y0[Pi[k%urgPiltsburg, PA 15206
Y. SaadUniversity of Minnesota4-192 EE/CSci Bldg.200 Union St.Minneapolis, MN 55455-() 159
A.H. Sameh, CSRD
305 Tatbot LaboratoryUniversity of Illinois104 S. Wright St.Urhan:i, IL 61801
Don;dd W. Sandidge
U.S. Army Missile CcmuruandAMSMI-RLARedstone Arsenal, AZ 35898-5247
Steve !huerK-Tech Corpwation901 Pennsylv,artia N.E.Albuquerque, NM 87110
M, H. SchultzDepartment of Computer Science
Yak UniversityP,O. BOX2158New Haven. CT 06520
he Schw,artzNOSC, Code 733
S,an Diego, CA 92152-5000
L, Se,am,anSRI Intemationat333 Ravenswook Ave.Menlo Park, CA 94025
A. H. ShermanScientific Computing Associates, Inc.Suite 307,246 Church StreetNew Haven, CT 06510
Dr. Horst D. SimonComputer Sciences CorporationNASA Ames Research Center, MS lW45-1
MoffettField,CA 94035-1000
L.Smam,DirectorSupercomputer Applications152 Supercomputer ApplicationsBldg. 605 E. SpringfieldChampaign, IL 61801
Vineet SinghMicroelectronics and Computer Tech. Corp.3500 West Balcones Center Dr,
Austin, TX 78759
79
Mu-k SmilhAcrophysics BrwrchCalspan Corporation/AEDC OperationsMS 440Arnold AFB, TN 37389
William R. SomskyBallistic Research LaboratorySLCBR-SE-A, Bldg. 394Aberdeen Proving Ground, MD 21005-5066
D. C. Sorenson
Department of M:uhematica] Sciences
Rice UniversityP.O. Box 1892Houston, TX 77251
Soulhwest Rcsc:uch Institute (4)Atm: Charles E. Anderson
C.J Kuhlm:mSamit RoyJ.D. W,alker
P.O. Drawer 28510San Antonio, TX 78284
s.squiresDARPA/ISTO1400 Wilson Blvd.
Ading(on, VA 11109
N. Sriniv:LsanAMOCO Cor-por:itionP.O. Box 87703Chic:~g~~,IL 60680-0703
D. E. SteinAT&T
100 South Jefferson Rd.Whippany, NJ 07981
M. Slamrwdl, Progrxm Dirw[or
Divisionof MathematicalSciences
N:~timal Science Fmm&?ticmWashington, DC 20550
G. W. Stew<artComputer Science Dep,artmen(University of MarylandCollege Park, MD 20742
(’. Stmrt
DARPA/TTO1400 Wilson Blvd.Arlington, VA 22209
LTC James SwmkrSDIO/SDAThe Pcnt:igonW:~sllington, DC 2030”1-7100”
D.V. SwensonMechanical Enginw-ing Department
Durhmd HallKWIS;ISSI:I(C[JnivcrsityManh:]utm, KS 66506
H.T, T:mgElectric Power Research Institute3412 Hillview Avenue
P.o, Box 10412Palo Altir, CA 94304
Sing C. TangP.0,BOX 2053RM 3039 Scientific L:ibDearborn, Ml 48121-2053
Bill Tanner
Space Science LaboratoryBaylor UniversityPO Box 7303Waco. TX 76798
R. A. Tapi:~Mtthcmatical Sciences Department
Rice UniversityP,O. BOX 1892
Houston, TX 77251
Gligor A. Tashkovich210 Lake Strw[, Apt. SFIthacil, NY 14H50-3854
W illi:un J. Tedcschi
DNA/SPSP
6801 Telegraph Rd.Alexandria, VA 2231(I
O. Storassli, MS-244NASA Langley Research CenterHampton, VA 23665
80
‘1’clcdyiw l~l-owll En~inccrillp (2)
-AIIn: John W. Wt~lt”shcrgcrB. Singh
Cunlmings Research Park?t)t) Sp:whln:u\ Dr.. NW
Po Box (U(Y)07Hunts\iIlc. AL 1581)7-7007°
L>:~vid‘I’L>llCllh; llllIl
U. S. A~myl’wA A~lt~Jtn~J[iveC~~lnln:mdREWE Ccnlcr
Surviv:~bility DivisionM:lil Code MASTA-RSS
Wumm, Ml 4KW7-5(MM)
A. Thaler, Prog. Dir.Division ol’ M:tthcmatical SciencesComputational Mathematics
No[ion:d Science FoundationW:~shingtou. DC 20550
]ohn TiplonU, S. Army Engineer DivisionHNDED-SYPo Box 1600”Hunlsvi}k, AL 35807
Randy TrumanMechmical Engineering DepartmentLlniversi(y of New MexicoAlhuqucrquc, NM H71.31
D, Z:ippddTechn(dogy Asscssmcnl Elr:mch
Eglin AFB, FL 32542-54.34
11.S.ArmyB;dlistic Rescurch L:h(]r:it{wy ({)j
Atm: R. Coates
Y. Huan.gK. Kimwy
H. MeyerG. Randers-PehrsonD, Ekhd’flers. SeglctcsG. SilsbyB. Sorenson
SLCBR-TB-PAbrdcen proving Ground MD 210()$-5000
Depl. of AMES R-ol I (2)Attn: David J. Benson
S. Nem:~t-NasserUniversity of California S:rn Diego
la Jolla, CA 92093
Department of Aerospace Engineering mlEngineering Mech:mics (4)Attn: E,B. Becker
G.F. CzmyJ.T. OdenM. Smrn
University of TexmAustin. TX 78712
George Vmlergrift. Dist. Mgr.
Convex Computer COW.3916 Juan Tabo NE, Suite 38Albuquerque, NM8711 1
c.VardxlnDepartment of Computer ScienceCornell University, Roo[n 5146
lIhJcii. NY 14853
R. G. Voigh(, MS 32-C
NASA Langley Rcsurch Ccn[er. ICASEHmnpton, VA 36665
David Wink, 36EBc(tis Atomic Power LaboratoryP.(3. Box 79
W’mt Milll;u]d. PA 1$I 22
Krishnan K. Wahi
Gram, Inc.1709 Moon N,E.Albuquerque, NM 87112
Stwtm J. Wallach, Sr. VP, Technology
(lmvcx Computer Coqmralion30(N) Watemiew ParkwayP.O. Box 833X51Richardson. TX 75083-3851
Paul T. WangFabricating Technology DivisionAluminum Company of AmericaAlcoa Technical Center
Alco:l Center. PA 15069
R.C.Ward, Bid. 9207-AM:llhmnatica] Sciences
Oak Ridge National Labor:itoryP,O. Box 4141Oak Ridge, TN 37831-8083
Bob We:iverIdaho Na[ional Engineering LabM,S .2603P.0, BOX 1625Idaho Fails, ID 83415
Brent WebbBattelle Pacific Northwest LaboratoriesM;iil Stop K6-47Po Box 999Richkmd, WA 99352
G. W. WcigandDARPA/CSTO3701 N. Fairfax Ave.Arling[on, VA 22203-1714
W,,(il)gll(lust Electric Corporation (4)AIln: Todd HLM)vcr
Claire Knolle
D:in Kotcher
W~yneLongBe((is Atomic Power LaboratoryP.O. Box 79Wcsl Mifflin. PA 15122-0079
Tomtasz WierzbickiDepartment of Ocean EngineeringBldg. 5-218M,assachuselts Institute of TechnologyCambridge, MA 02139
B, WilcoxDARPA/DSO1400 Wilson Blvd.ArIington, VA 22209
C. W. Wilson, Program ManagerEmerging TechnologiesMS M 102-3/B 11
Digikd Equipment Corporation146 Main StreetMaynard, MA 00175
P. R. Woodward
University of MinnesotaDepartment of Astronomy116 Church Street SEMinneapolis, MN 55455
M. Wunderlich, DirectorMathemalic,al Sciences ProgramNational Security AgencyFt. George, G. Mead, MD 20755
Hishashi YasumoriStaff Senior General ManagerKTEC-Kawasaki Steel
Teehnorese,arch CorporationHihiya Kokusai Bldg. 2-3Uchisaiwaicho 2-chromeChiyoda-ku, Tokyo 100Japan
D. M. YoungCenter for Numerical AnalysisRLM 13.15[)Universliy of TCXM at Auslin
Austin, TX 78712
RobertYoung (2)
Alcoa Laborah>ritsAlcoa Center, PA 15(M9At[n: R. Young, J. McMichxl
M. F. Wheeler’Ma[herna(ical Sciences DepartmentRice UniversityP,O. Box 1892Housl(m, TX 77251
William Zierke (2)Applied Rese,arch LabPenn Shte UniversityP.O. Box 30S~~te College, PA 16804Attn: W. Zierke, G.T.Yeh
Steve ZilliacusDavid Taylor Rese,wch CenterMad Code 1750.1Bethesda, MD 20084
J.A. Zukas
Compumtional Mechanics Consultants, Inc.8600 La Salle RoadSuite 614Towson, MD 21204
Los Ahtmos National LaboratoryMail Station 5000P.O. BOX 1663Los Alamw, NM X7545
Attn: T. F. Ad;uns, MS F(]03
A(tn: J.D. Allen, MS G7X7Ann: C,A. Anderson, MS J576Attn: S.R. Atlas, MS B258Attn: B. 1. Bennett, MS B221Attn: S. T. Btmnion, MS F663
Ann: W. Bimhler, MS G787Attn: P. J. Blewett, MS F663
Attn: M. W. Burken, MS G787Attn: T.A. Buttler, MS J576Ann: E. J. Chapy.ak, MS F663Attn: R. A. Cl<ark, MS B257Ann: W.A. Cook, MS K557Attn: G. E. Cort, MS G787Attn: B, J. Daly, MS B216Attn: R.F. Davidson, MS K557Attn: J.F.Davis, MS B294Attn: J. K. Dicrres, MS J3216Attn: J.L.Fales, MS J575Attn: H. Flaush, MS C936Attn: P.S. Folhsbee, MS G756
Attn: D,Forslund, MS E531Attn: J.H. Fu, MS G787
Attn: S.P. Girrens, MS J576Attn: R. P. Godwin, MS F663Attn: F. Guerra, MS C931Attn: F. Harlow, MS B216Attn: W. B. Harvey, MS F663Altn: R. Hill, MS D449Attn: J.P. Hill, MS C931Attn: B. L. HoIian, MS J569Attn: K. S. Holi.an, MS B221Attn: J. W. Hopson, MS B216Ann: H. Horak, MS C936Altn: M. L, Hudson, MS J970
Attn:E.S,Mar,MSG787Ann; D.L. Jaegar, MS K557Ann: J.N. Johnson, MS K557Attn: N. L. Johnson, MS B216
Attn: J. F. Kerrisk, MS G787At(n: M. Klein. MS F669Attn:W. H. Lee, MS B226Attn: M.W. Lewis, MS G787A[tn: R. Malenl_ant, MS J562
Attn: D.Mandell, MS F663Attn: L. G. M,argolin, MS D405Attn: S. Marsh, MS K557Attn: P.T. Maulden, MS K557Ann: G. H. McC:ill, MS B218
83
Attn: J. K. Mcier, MS G7N7Attn: R, W, Meier, MS G7S7
AI(n: K.A. Meyer, MS Ft563At(n: N.R. Morse, MS B260Attn: D.C. Nelson, MS G787A(tn: A. T.Oyer, MS G787Attn: R.B. Parker, MS G787Attn: D.A. Rabem, MS G787Attn: M. Rich, MS F669Attn: P.R. Romero, MS G787Attn:J.J.Ruminer,MSC931
Attn: M. SaJIota, MS B257Am: DJ. Sandstorm, MS G756Attn: W. Sparks, MS F&i3Attn: L.H. Sullivan, MS K557Attn: D. Tonks, MS B267Attn: H. E. Trease, MS B257Attn: B.M. Whea~ MS G787Attn: A.B. White, MS-265Attn: T.F. Wirnett, MS J562Attn: L. Witt, MS C936Attn: S. Woodruff, MS K557
Attn: Robert Young, MS K574
Univcrsitv 0[ CdifomiaLawrence L iwmnorc National Laboratory
7000 East Ave.P.o. Box 808Livermort, CA 94550
A(tn: R, R. Borcher, MS L-669At[n: D. E. Burton, MS L-18Attn: R. C. Y. Chin, MS L-321Attn: R. B. Christensen, MS L-35Attn: R. E. Huddleston, MS L-61Attn: J. M, LeB1.ant, MS L-35
Attn: J. R. McGraw, MS L-316Atm: G. A. Michael, MS L-306Atul: M. J. Murphy, MS L-368Attn: L. R. Petzold, MS L-316A[tn: J. E. Reaugh, MS L-290Attn: D. J. Steinberg, MS L-35Attn: R. Stoudt, MS L-200Attn: R. E. Tipton, MS L-35Attn: C. E. Rhoades, MS L-298
1. Internal
!23 I T,W.L. Sanford
1270 J. K. I<ice
1271 G. O. AIIshouse1400 E. H, Barsis1420 W, J. Camp1421 S. S. Dostanjh1421 D. R. G,ardner1425 J, H. Biffl~
1425 S.W. AtEiwly
1425 S. T, Montgomery15(X) E. H. Barsis1510 J, C. Cummings
1511 J. S. Rotller1512 A. C. Ratzel1513 J. C. Cummings, Acting1514 H. S. Morg,an
1514 V. L. Bergmann1514 B. J. Thorne
1540 J. R. ASIy1541 J. M. McGlaun1541 K. Budge (50)1541 M. G. Elrick
1541 E, S. Hertel
1541 R. J. Lawrence1541 J. S. Peery
1541 A. C. Robkon1541 T. G. Trucano
1541 L. Barrington1541 RHALE Day File1542 P, Y,a-rrington1542 R. L. Bell1542 W. T. Brown
1542 P. J. Chen1542 J. E. Dunn
1542 H. E. Fang
1542 A. V. FcarIIswOrth
1542 G. 1. Kerley1542 M. E. Kipp1542 F. R, Norwood1542 S. A. Silling1543 P. L. St:inton1543 J. A. Ang
1543 L, C. Chhabildas1543 M, D. Furnish
1543 D. E. Grady1543 J, W. Swegle1543 J. L. Wise1544 J, R. Asay, Acting1544 C. R. Adams1544 K. W. Gwinn
1544 E. Kephart1544 F. J. Mello1544 K. E. MetZinger1544 E. D, Reedy1544 K. W. Schuler
1544 G. D. Sjaardema1544 A.M. Sktvin1544 P. P. Stirbis1544 R. K. Thomas1545 D. R. M,artinez1545 J. J. Allen1545 L. Branstetter
1545 J. Dohner1545 C. R. Dohrmann1545 G. R, Eisler1545 J. T. Foley1545 D. W. Lobirz1545 D. B. Longcope1545 E. L. M,arek1545 J. Pott1545 J. R. Red-Horse1545 D. J. Segalm,an1550 C. W. Petemon
1551 J. K. Cole1552 D. D, McBride
1553 W. L. Hermina1554 D. P. Aeschliman
1555 w,P.Wolfe1556 W. L. Oberkampf1600 W. Herrrnann2513 D. E. Mitchell
2513 S.H. Fischer3141 TechnicaJ Libmry (5)3141-5 Document Processing for DOE/OSTl (X)3151 Technical Communications (3)6418 S, L. Thompson6418 L. N, Kmetyk
6429 K. E, Washington6429 R. W. Osterrsen
6463 M.Berman6463 K.Boyack8240 C.W.Robinson8241 G.A.Benedetti8241 M.L.Chiesa8241 L,E,Voelker8242 M. R. Birnbmrm8242 Jr L. Cherry8242 J. J. Dike8242 B. L, Kistler8242 A. McDonald8242 V. D. Revelli8242 L. A. Rogers8242 K. V. Trinh8242 L. I. Weingarten
8243
824382438244824482458245
85239014912291239123
91239311
9311
M.L.Chll:tbresiD.J. BammannV. K. GabrielsonS. K. GriftithsC. M. HartwigR. J. Kee
W. E, M.won
R. C, Christm:mJ, W. KeizurR. O. Nd]urns
J.M.HolovkaM. J. ForrestalJ, T. Hi(chcock
A. J ChabaiT, Bergstresser