123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- \chapter[ORTHOVEC: scalars and vectors]%
- {ORTHOVEC: Three-dimensional vector analysis}
- \label{ORTHOVEC}
- \typeout{{ORTHOVEC: Three-dimensional vector analysis}}
- {\footnotesize
- \begin{center}
- James W.~Eastwood \\
- AEA Technology, Culham Laboratory \\
- Abingdon \\
- Oxon OX14 3DB, England \\[0.05in]
- e--mail: jim\_eastwood@aeat.co.uk
- \end{center}
- }
- \ttindex{ORTHOVEC}
- The ORTHOVEC package is a collection of \REDUCE\ procedures and
- operations which provide a simple to use environment for the
- manipulation of scalars and vectors. Operations include addition,
- subtraction, dot and cross products, division, modulus, div, grad,
- curl, laplacian, differentiation, integration, ${\bf a \cdot \nabla}$
- and Taylor expansion.
- \section{Initialisation}\label{vstart}
- \ttindex{VSTART}
- The procedure \f{START} initialises ORTHOVEC. VSTART provides a
- menu of standard coordinate systems:-
- \begin{enumerate}
- \index{cartesian coordinates}
- \item cartesian $(x, y, z) = $ {\tt (x, y, z)}
- \index{cylindrical coordinates}
- \item cylindrical $(r, \theta, z) = $ {\tt (r, th, z)}
- \index{spherical coordinates}
- \item spherical $(r, \theta, \phi) = $ {\tt (r, th, ph) }
- \item general $( u_1, u_2, u_3 ) = $ {\tt (u1, u2, u3) }
- \item others
- \end{enumerate}
- which the user selects by number. Selecting options (1)-(4)
- automatically sets up the coordinates and scale factors. Selection
- option (5) shows the user how to select another coordinate system. If
- VSTART is not called, then the default cartesian coordinates are used.
- ORTHOVEC may be re-initialised to a new coordinate system at any time
- during a given \REDUCE\ session by typing
- \begin{verbatim}
- VSTART $.
- \end{verbatim}
- \section{Input-Output}
- ORTHOVEC assumes all quantities are either scalars or 3 component
- vectors. To define a vector $a$ with components $(c_1, c_2, c_3)$ use
- the procedure SVEC:\ttindex{SVEC}
- \begin{verbatim}
- a := svec(c1, c2, c3);
- \end{verbatim}
- The procedure\ttindex{VOUT} \f{VOUT} (which returns the value of its
- argument) can be used to give labelled output of components
- in algebraic form:
- \begin{verbatim}
- b := svec (sin(x)**2, y**2, z)$
- vout(b)$
- \end{verbatim}
- The operator {\tt \_} can be used to select a particular
- component (1, 2 or 3) for output {\em e.g.}
- \begin{verbatim}
- b_1 ;
- \end{verbatim}
- \section{Algebraic Operations}
- Six infix operators, sum, difference, quotient, times, exponentiation
- and cross product, and four prefix
- operators, plus, minus, reciprocal
- and modulus are defined in ORTHOVEC. These operators can take suitable
- combinations of scalar and vector arguments,
- and in the case of scalar arguments reduce to the usual definitions of
- $ +, -, *, /, $ etc.
- The operators are represented by symbols
- \index{+ ! 3-D vector}\index{- ! 3-D vector}\index{/ ! 3-D vector}
- \index{* ! 3-D vector}\index{* ! 3-D vector}\index{"\^{} ! 3-D vector}
- \index{$><$ ! 3-D vector}
- \begin{verbatim}
- +, -, /, *, ^, ><
- \end{verbatim}
- \index{$><$ ! diphthong} The composite {\tt ><} is an
- attempt to represent the cross product symbol
- $\times$ in ASCII characters.
- If we let ${\bf v}$ be a vector and $s$ be a scalar, then
- valid combinations of arguments of the
- procedures and operators and the type of the result
- are as summarised below. The notation used is\\
- {\em result :=procedure(left argument, right argument) } or\\
- {\em result :=(left operand) operator (right operand) } . \\
- \underline{Vector Addition} \\
- \ttindex{VECTORPLUS}\ttindex{VECTORADD}\index{vector ! addition}
- \begin{tabular}{rclcrcl}
- {\bf v} &:=& VECTORPLUS({\bf v}) &{\rm or}& {\bf v} &:=& + {\bf v} \\
- s &:=& VECTORPLUS(s) &{\rm or} & s &:=& + s \\
- {\bf v} &:=& VECTORADD({\bf v},{\bf v}) &{\rm or }& {\bf v} &:=&
- {\bf v} + {\bf v} \\
- s &:=& VECTORADD(s,s) &{\rm or }& s &:=& s + s \\
- \end{tabular} \\
- \underline{Vector Subtraction} \\
- \ttindex{VECTORMINUS}\ttindex{VECTORDIFFERENCE}\index{vector ! subtraction}
- \begin{tabular}{rclcrcl}
- {\bf v} &:=& VECTORMINUS({\bf v}) &{\rm or}&
- {\bf v} &:=& - {\bf v} \\
- s &:=& VECTORMINUS(s) &{\rm or} & s &:=& - s \\
- {\bf v} &:=& VECTORDIFFERENCE({\bf v},{\bf v}) &{\rm or }& {\bf v} &:=&
- {\bf v} - {\bf v} \\
- s &:=& VECTORDIFFERENCE(s,s) &{\rm or }& s &:=& s - s \\
- \end{tabular} \\
- \underline{Vector Division}\\
- \ttindex{VECTORRECIP}\ttindex{VECTORQUOTIENT}\index{vector ! division}
- \begin{tabular}{rclcrcl}
- {\bf v} &:=& VECTORRECIP({\bf v}) &{\rm or}& {\bf v} &:=& /
- {\bf v} \\
- s &:=& VECTORRECIP(s) &{\rm or} & s &:=& / s \\
- {\bf v} &:=& VECTORQUOTIENT({\bf v},{\bf v}) &{\rm or }& {\bf v} &:=&
- {\bf v} / {\bf v} \\
- {\bf v} &:=& VECTORQUOTIENT({\bf v}, s ) &{\rm or }& {\bf v} &:=&
- {\bf v} / s \\
- {\bf v} &:=& VECTORQUOTIENT( s ,{\bf v}) &{\rm or }& {\bf v} &:=&
- s / {\bf v} \\
- s &:=& VECTORQUOTIENT(s,s) &{\rm or }& s &:=& s / s
- \\
- \end{tabular} \\
- \underline{Vector Multiplication}\\
- \ttindex{VECTORTIMES}\index{vector ! multiplication}
- \begin{tabular}{rclcrcl}
- {\bf v} &:=& VECTORTIMES( s ,{\bf v}) &{\rm or }& {\bf v} &:=&
- s * {\bf v} \\
- {\bf v} &:=& VECTORTIMES({\bf v}, s ) &{\rm or }& {\bf v} &:=& {\bf
- v} * s \\
- s &:=& VECTORTIMES({\bf v},{\bf v}) &{\rm or }& s &:=& {\bf
- v} * {\bf v} \\
- s &:=& VECTORTIMES( s , s ) &{\rm or }& s &:=&
- s * s \\
- \end{tabular} \\
- \underline{Vector Cross Product} \\
- \ttindex{VECTORCROSS}\index{cross product}\index{vector ! cross product}
- \begin{tabular}{rclcrcl}
- {\bf v} &:=& VECTORCROSS({\bf v},{\bf v}) &{\rm or }& {\bf v} &:=& {\bf
- v} $\times$ {\bf v} \\
- \end{tabular} \\
- \underline{Vector Exponentiation}\\
- \ttindex{VECTOREXPT}\index{vector ! exponentiation}
- \begin{tabular}{rclcrcl}
- s &:=& VECTOREXPT ({\bf v}, s ) &{\rm or }& s &:=& {\bf
- v} \^{} s \\
- s &:=& VECTOREXPT ( s , s ) &{\rm or }& s &:=& s
- \^{} s \\
- \end{tabular} \\
- \underline{Vector Modulus}\\
- \ttindex{VMOD}\index{vector ! modulus}
- \begin{tabular}{rcl}
- s &:=& VMOD (s)\\
- s &:=& VMOD ({\bf v}) \\
- \end{tabular} \\
- All other combinations of operands for these operators lead to error
- messages being issued. The first two instances of vector
- multiplication are scalar multiplication of vectors, the third is the
- \index{vector ! dot product}\index{vector ! inner product}
- \index{inner product}\index{dot product}
- product of two scalars and the last is the inner (dot) product. The
- prefix operators {\tt +, -, /} can take either scalar or vector
- arguments and return results of the same type as their arguments.
- VMOD returns a scalar.
- In compound expressions, parentheses may be used to specify the order of
- combination. If parentheses are omitted the ordering of the
- operators, in increasing order of precedence is
- \begin{verbatim}
- + | - | dotgrad | * | >< | ^ | _
- \end{verbatim}
- and these are placed in the precedence list defined in \REDUCE{}
- after $<$.
- Vector divisions are defined as follows: If ${\bf a}$ and ${\bf b}$ are
- vectors and $c$ is a scalar, then
- \begin{eqnarray*}
- {\bf a} / {\bf b} & = & \frac{{\bf a} \cdot {\bf b}}{ \mid {\bf b}
- \mid^2}\\
- c / {\bf a} & = & \frac{c {\bf a} }{ \mid {\bf a} \mid^2}
- \end{eqnarray*}
- Both scalar multiplication and dot products are given by the same symbol,
- braces are advisable to ensure the correct
- precedences in expressions such as $({\bf a} \cdot {\bf b})
- ({\bf c} \cdot {\bf d})$.
- Vector exponentiation is defined as the power of the modulus:\\
- ${\bf a}^n \equiv {\rm VMOD}(a)^n = \mid {\bf a} \mid^n$
- \section{Differential Operations}
- Differential operators provided are div, grad, curl, delsq, and dotgrad.
- \index{div operator}\index{grad operator}\index{curl operator}
- \index{delsq operator}\index{dotgrad operator}
- All but the last of these are prefix operators having a single
- vector or scalar argument as appropriate. Valid combinations of
- operator and argument, and the type of the result are shown in
- table~\ref{vvecttable}.
- \begin{table}
- \begin{center}
- \begin{tabular}{rcl}
- s & := & div ({\bf v}) \\
- {\bf v} & := & grad(s) \\
- {\bf v} & := & curl({\bf v}) \\
- {\bf v} & := & delsq({\bf v}) \\
- s & := & delsq(s) \\
- {\bf v} & := & {\bf v} dotgrad {\bf v} \\
- s & := & {\bf v} dotgrad s
- \end{tabular}
- \end{center}
- \caption{ORTHOVEC valid combinations of operator and argument}\label{vvecttable}
- \end{table}
- All other combinations of operator and argument type cause error
- messages to be issued. The differential operators have their usual
- meanings. The coordinate system used by these operators is
- set by invoking VSTART (cf. Sec.~\ref{vstart}). The names {\tt h1},
- {\tt h2} and {\tt h3 } are
- reserved for the scale factors, and {\tt u1}, {\tt u2} and {\tt u3} are
- used for the coordinates.
- A vector extension, VDF, of the \REDUCE\ procedure DF allows the
- differentiation of a vector (scalar) with respect to a scalar to be
- performed. Allowed forms are\ttindex{VDF}
- VDF({\bf v}, s) $\rightarrow$ {\bf v} and
- VDF(s, s) $\rightarrow$ s ,
- where, for example\\
- \begin{eqnarray*}
- {\tt vdf( B,x)} \equiv \frac{\partial {\bf B}}{\partial x}
- \end{eqnarray*}
- The standard \REDUCE\ procedures DEPEND and NODEPEND have been redefined
- to allow dependences of vectors to be compactly
- defined. For example\index{DEPEND statement}\index{NODEPEND statement}
- \begin{verbatim}
- a := svec(a1,a2,a3)$;
- depend a,x,y;
- \end{verbatim}
- causes all three components {\tt a1},{\tt a2} and {\tt a3} of {\tt a}
- to be treated as functions of {\tt x} and {\tt y}.
- Individual component dependences can still be defined if desired.
- \begin{verbatim}
- depend a3,z;
- \end{verbatim}
- The procedure VTAYLOR gives truncated Taylor series expansions of scalar
- or vector functions:-\ttindex{VTAYLOR}
- \begin{verbatim}
- vtaylor(vex,vx,vpt,vorder);
- \end{verbatim}
- returns the series expansion of the expression
- VEX with respect to variable VX\ttindex{VORDER}
- about point VPT to order VORDER. Valid
- combinations of argument types are shown in table~\ref{ORTHOVEC:validexp}. \\
- \begin{table}
- \begin{center}
- \begin{tabular}{cccc}
- VEX & VX & VPT & VORDER \\[2ex]
- {\bf v} & {\bf v} & {\bf v} & {\bf v}\\
- {\bf v} & {\bf v} & {\bf v} & s\\
- {\bf v} & s & s & s \\
- s & {\bf v} & {\bf v} & {\bf v} \\
- s & {\bf v} & {\bf v} & s\\
- s & s & s & s\\
- \end{tabular}
- \end{center}
- \caption{ORTHOVEC valid combination of argument types.}\label{ORTHOVEC:validexp}
- \end{table}
- Any other combinations cause error messages to be issued. Elements of
- VORDER must be non-negative integers, otherwise error messages are
- issued. If scalar VORDER is given for a vector expansion, expansions
- in each component are truncated at the same order, VORDER.
- The new version of Taylor expansion applies\index{l'H\^opital's rule}
- l'H\^opital's rule in evaluating coefficients, so handle cases such as
- $\sin(x) / (x) $ , etc. which the original version of ORTHOVEC could
- not. The procedure used for this is LIMIT,\ttindex{LIMIT} which can
- be used directly to find the limit of a scalar function {\tt ex} of
- variable {\tt x} at point {\tt pt}:-
- \begin{verbatim}
- ans := limit(ex,x,pt);
- \end{verbatim}
- \section{Integral Operations}
- Definite and indefinite vector, volume and scalar line integration
- procedures are included in ORTHOVEC. They are defined as follows:
- \ttindex{VINT}\ttindex{DVINT}
- \ttindex{VOLINT}\ttindex{DVOLINT}\ttindex{LINEINT}\ttindex{DLINEINT}
- \begin{eqnarray*}
- {\rm VINT} ({\bf v},x) & = & \int {\bf v}(x)dx\\
- %
- {\rm DVINT} ({\bf v},x, a, b) & = & \int^b_a {\bf v} (x) dx\\
- %
- {\rm VOLINT} ({\bf v}) & = & \int {\bf v} h_1 h_2 h_3 du_1 du_2 du_3\\
- %
- {\rm DVOLINT}({\bf v},{\bf l},{\bf u},n) & = & \int^{\bf u}_{\bf l}
- {\bf v} h_1 h_2 h_3 du_1 du_2 du_3\\
- %
- {\rm LINEINT} ({\bf v, \omega}, t) & = & \int {\bf v} \cdot {\bf dr}
- \equiv \int v_i h_i \frac{\partial \omega_i}{\partial t} dt\\
- %
- {\rm DLINEINT} ({\bf v, \omega} t, a, b) & = & \int^b_a v_i h_i
- \frac{\partial \omega_i}{\partial t} dt\\
- \end{eqnarray*}
- In the vector and volume integrals, ${\bf v}$ are vector or scalar,
- $a, b,x$ and $n$ are scalar. Vectors ${\bf l}$ and ${\bf u}$ contain
- expressions for lower and upper bounds to the integrals. The integer
- index $n$ defines the order in which the integrals over $u_1, u_2$ and
- $u_3$ are performed in order to allow for functional dependencies in
- the integral bounds:
- \begin{center}
- \begin{tabular}{ll}
- n & order\\ 1 & $u_1~u_2~u_3$\\
- %
- 2 & $u_3~u_1~u_2$\\
- %
- 3 & $u_2~u_3~u_1$\\
- %
- 4 & $u_1~u_3~u_2$\\
- %
- 5 & $u_2~u_1~u_3$\\ otherwise & $u_3~u_2~u_1$\\
- \end{tabular}
- \end{center}
- The vector ${\bf \omega}$ in the line integral's arguments contain
- explicit parameterisation of the coordinates $u_1, u_2, u_3$ of the
- line ${\bf u}(t)$ along which the integral is taken.
|