\documentclass{article}
\usepackage{axiom}
\begin{document}
\title{\$SPAD/src/algebra d03routine.spad}
\author{Brian Dupee}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\section{domain D03EEFA d03eefAnnaType}
<<domain D03EEFA d03eefAnnaType>>=
)abbrev domain D03EEFA d03eefAnnaType
++ Author: Brian Dupee
++ Date Created: June 1996
++ Date Last Updated: June 1996
++ Basic Operations: 
++ Description:
++ \axiomType{d03eefAnnaType} is a domain of 
++ \axiomType{PartialDifferentialEquationsSolverCategory}
++ for the NAG routines D03EEF/D03EDF.
d03eefAnnaType():PartialDifferentialEquationsSolverCategory == Result add  -- 2D Elliptic PDE
  LEDF	==> List Expression DoubleFloat
  EDF	==> Expression DoubleFloat
  LDF	==> List DoubleFloat
  MDF	==> Matrix DoubleFloat
  DF	==> DoubleFloat
  F	==> Float
  FI	==> Fraction Integer
  VEF	==> Vector Expression Float
  EF	==> Expression Float
  MEF	==> Matrix Expression Float
  NNI	==> NonNegativeInteger
  INT	==> Integer
  PDEC	==> Record(start:DF, finish:DF, grid:NNI, boundaryType:INT,
                      dStart:MDF, dFinish:MDF)
  PDEB	==> Record(pde:LEDF, constraints:List PDEC,
                      f:List LEDF, st:String, tol:DF)

  import d03AgentsPackage, NagPartialDifferentialEquationsPackage
  import ExpertSystemToolsPackage

  measure(R:RoutinesTable,args:PDEB) ==
    (# (args.constraints) > 2)@Boolean =>
      [0$F,"d03eef/d03edf is unsuitable for PDEs of order more than 2"]
    elliptic?(args) => 
      m := getMeasure(R,d03eef :: Symbol)$RoutinesTable
      [m,"d03eef/d03edf is suitable"]
    [0$F,"d03eef/d03edf is unsuitable for hyperbolic or parabolic PDEs"]

  PDESolve(args:PDEB) ==
    xcon := first(args.constraints)
    ycon := second(args.constraints) 
    nx := xcon.grid
    ny := ycon.grid 
    p := args.pde
    x1 := xcon.start
    x2 := xcon.finish
    y1 := ycon.start
    y2 := ycon.finish
    lda := ((4*(nx+1)*(ny+1)+2) quo 3)$INT
    scheme:String :=
      central?((x2-x1)/2,(y2-y1)/2,args.pde) => "C"
      "U"
    asp73:Union(fn:FileName,fp:Asp73(PDEF)) :=
      [retract(vector([edf2ef u for u in p])$VEF)$Asp73(PDEF)]
    asp74:Union(fn:FileName,fp:Asp74(BNDY)) := 
      [retract(matrix([[edf2ef v for v in w] for w in args.f])$MEF)$Asp74(BNDY)]
    fde := d03eef(x1,x2,y1,y2,nx,ny,lda,scheme,-1,asp73,asp74)
    ub := new(1,nx*ny,0$DF)$MDF
    A := search(a::Symbol,fde)$Result
    A case "failed" => empty()$Result
    AA := A::Any
    fdea := retract(AA)$AnyFunctions1(MDF)
    r := search(rhs::Symbol,fde)$Result
    r case "failed" => empty()$Result
    rh := r::Any
    fderhs := retract(rh)$AnyFunctions1(MDF)
    d03edf(nx,ny,lda,15,args.tol,0,fdea,fderhs,ub,-1)

@
\section{domain D03FAFA d03fafAnnaType}
<<domain D03FAFA d03fafAnnaType>>=
)abbrev domain D03FAFA d03fafAnnaType
++ Author: Brian Dupee
++ Date Created: July 1996
++ Date Last Updated: July 1996
++ Basic Operations: 
++ Description:
++ \axiomType{d03fafAnnaType} is a domain of 
++ \axiomType{PartialDifferentialEquationsSolverCategory}
++ for the NAG routine D03FAF.
d03fafAnnaType():PartialDifferentialEquationsSolverCategory == Result add  -- 3D Helmholtz PDE
  LEDF	==> List Expression DoubleFloat
  EDF	==> Expression DoubleFloat
  LDF	==> List DoubleFloat
  MDF	==> Matrix DoubleFloat
  DF	==> DoubleFloat
  F	==> Float
  FI	==> Fraction Integer
  VEF	==> Vector Expression Float
  EF	==> Expression Float
  MEF	==> Matrix Expression Float
  NNI	==> NonNegativeInteger
  INT	==> Integer
  PDEC	==> Record(start:DF, finish:DF, grid:NNI, boundaryType:INT,
                      dStart:MDF, dFinish:MDF)
  PDEB	==> Record(pde:LEDF, constraints:List PDEC,
                      f:List LEDF, st:String, tol:DF)

  import d03AgentsPackage, NagPartialDifferentialEquationsPackage
  import ExpertSystemToolsPackage

  measure(R:RoutinesTable,args:PDEB) ==
    (# (args.constraints) < 3)@Boolean =>
      [0$F,"d03faf is unsuitable for PDEs of order other than 3"]
    [0$F,"d03faf isn't finished"]

@
\section{License}
<<license>>=
--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are
--met:
--
--    - Redistributions of source code must retain the above copyright
--      notice, this list of conditions and the following disclaimer.
--
--    - Redistributions in binary form must reproduce the above copyright
--      notice, this list of conditions and the following disclaimer in
--      the documentation and/or other materials provided with the
--      distribution.
--
--    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--      names of its contributors may be used to endorse or promote products
--      derived from this software without specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@
<<*>>=
<<license>>

<<domain D03EEFA d03eefAnnaType>>
<<domain D03FAFA d03fafAnnaType>>
@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}