+ All Categories
Home > Documents > A C++ Tensor Class Library - prod.sandia.gov · SAND91-1752 Unlimited Release Printed 10/9/9 1...

A C++ Tensor Class Library - prod.sandia.gov · SAND91-1752 Unlimited Release Printed 10/9/9 1...

Date post: 08-Nov-2018
Category:
Upload: dotruc
View: 222 times
Download: 0 times
Share this document with a friend
86
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 11111 *8433967* SAND91 -1752 0002 UNCLASSIFIED 05/91 86P STAC: ,,, /,,
Transcript

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


Recommended