\documentclass{article}
\usepackage{axiom}
\begin{document}
\title{\$SPAD/src/interp nag-d03.boot}
\author{The Axiom Team}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\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>>

d03edf() ==
  htInitPage('"D03EDF - Elliptic PDE, solution of finite difference equations by a multigrid technique ",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "\windowlink{Manual Page}{manpageXXd03edf} for this routine ")
    (text . "\newline ")
    (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d03edf| '|NagPartialDifferentialEquationsPackage|)} for this routine")
    (text . "\newline \horizontalline ")
    (text . "\newline ")
    (text . "D03EDF solves, by multigrid iteration, the seven point scheme ")
    (text . "\newline \htbitmap{d03edf} \newline which arises from the  ")
    (text . "discretization of an elliptic partial differential equation of  ")
    (text . "the form \center{\htbitmap{d03edf1}} and its boundary conditions")
    (text . ", defined on a rectangular region. This we can write in matrix ")
    (text . "form as \newline \center{{\it Au =f}}")
    (text . "\blankline")
    (text . "\newline ")
    (text . "Read the input file to see the example program. ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\spadcommand{)read d03edf \bound{s0}} ")
    (text . "\blankline")
    (text . "\newline ")
    (text . "If you would like to enter a problem, ")
    (text . "how would you like to input the matrices? ")
    (radioButtons matrix
        ("" "  By entering individual entries" long)
        ("" "  By entering matrix names already defined on the command line" short)))
  htMakeDoneButton('"Continue", 'd03edfControl)
  htShowPage()

d03edfControl(htPage) ==
  type := htpButtonValue(htPage,'matrix)
  if (type = 'long) then 
    d03edfLong()
  else
    d03edfShort()

d03edfLong() ==
  htInitPage('"D03EDF - Elliptic PDE, solution of finite difference equations by a multigrid technique ",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Number of interior grid points in the {\it x}-direction ")
    (text . "{\it ngx}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 3 ngx PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Number of interior grid points in the {\it y}-direction ")
    (text . "{\it ngy}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 3 ngy PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "First dimension of A, {\it lda}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 22 lda PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Maximum permitted number of multigrid iterations, {\it maxit}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 1 maxit PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Tolerance required, {\it acc}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "1.0e-4" acc F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\newline Output of printed information for routine {\it iout}:")
    (radioButtons iout
        ("" " 0 - no output" zero)
        ("" " 1 - the solution \htbitmap{uij} {\it i} = 1,2,...,NGX; {\it j} = 1,2,...,NGY" one)
        ("" " 2 - residual 2-norm after each iteration " two)
        ("" " 3 - as for iout = 1 & iout = 2" three)
        ("" " 4 - as for iout = 3, plus the final residual" four)
        ("" " 5 - as for iout = 4, plus initial elements of A & RHS" five)
        ("" " 6 - as for iout = 5, plus Galerkin coarse grid approximations" six)
        ("" " 7 - as for iout = 6, plus the incomplete Crout decompositions" seven)
        ("" " 8 - as for iout = 7, plus the residual after each iteration" eight))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\newline Ifail value:")
    (radioButtons ifail
        ("" " -1, Print error messages" ifail_minusOne)
        ("" "  1, Suppress error messages" ifail_one)))
  htMakeDoneButton('"Continue", 'd03edfSolve)
  htShowPage()


d03edfSolve htPage ==
  ngx :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'ngx)
    objValUnwrap htpLabelSpadValue(htPage, 'ngx)
  ngy :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'ngy)
    objValUnwrap htpLabelSpadValue(htPage, 'ngy)
  lda :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'lda)
    objValUnwrap htpLabelSpadValue(htPage, 'lda)
  maxit :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'maxit)
    objValUnwrap htpLabelSpadValue(htPage, 'maxit)
  acc := htpLabelInputString(htPage,'acc)
  control := htpButtonValue(htPage,'iout)
  iout :=
    control = 'zero => '0
    control = 'one => '1
    control = 'two => '2
    control = 'three => '3
    control = 'four => '4
    control = 'five => '5
    control = 'six => '6
    control = 'seven => '7
    '8
  error := htpButtonValue(htPage,'ifail)
  ifail :=
    error = 'ifail_one => '1
    '-1
  aList := 
    "append"/[fa(i) for i in 1..lda] where fa(i) ==
       labelList := 
         "append"/[fb(i,j) for j in 1..7] where fb(i,j) ==
            anam := INTERN STRCONC ('"a",STRINGIMAGE i,STRINGIMAGE j)
            [['bcStrings,[5, 0, anam, 'F]]]
       prefix := ('"\newline ")
       labelList := [['text,:prefix],:labelList]
  middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the matrix ")
  middle := STRCONC(middle,'"{\it rhs(lda)}: \newline ")
  rList := 
    "append"/[fc(i) for i in 1..lda] where fc(i) ==
        rnam := INTERN STRCONC ('"r",STRINGIMAGE i)
        [['bcStrings,[6, "0.0", rnam, 'F]]]
  rList :=  [['text,:middle],:rList]
  mid:= ('"\blankline \menuitemstyle{} \tab{2} Enter the matrix ")
  mid := STRCONC(mid,'" {\it ub(ngx*ngy)}: \newline ")
  uList := 
    "append"/[fd(i) for i in 1..(ngx*ngy)] where fd(i) ==
        unam := INTERN STRCONC ('"u",STRINGIMAGE i)
        [['bcStrings,[6, 0, unam, 'F]]]
  uList :=  [['text,:mid],:uList]
  equationPart := [
     '(domainConditions 
	(isDomain EM $EmptyMode)
          (isDomain S (String))
            (isDomain F (Float))
	      (isDomain I (Integer))),
 		:aList,:rList,:uList]
  page := htInitPage('"D03EDF - Elliptic PDE, solution of finite difference equations by a multigrid technique ",nil)
  htSay '"\menuitemstyle{}\tab{2} "
  htSay '"Enter the matrix {\it a(lda,7)}: "
  htSay '"\newline "
  htMakePage equationPart
  htMakeDoneButton('"Continue",'d03edfLongGen)
  htpSetProperty(page,'ngx,ngx)
  htpSetProperty(page,'ngy,ngy)
  htpSetProperty(page,'lda,lda)
  htpSetProperty(page,'maxit,maxit)
  htpSetProperty(page,'acc,acc)
  htpSetProperty(page,'iout,iout)
  htpSetProperty(page,'ifail,ifail)
  htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
  htShowPage()

d03edfLongGen htPage ==
  ngx := htpProperty(htPage, 'ngx)
  ngy := htpProperty(htPage, 'ngy)
  lda := htpProperty(htPage, 'lda)
  maxit := htpProperty(htPage, 'maxit)
  acc := htpProperty(htPage, 'acc)
  iout := htpProperty(htPage, 'iout)
  ifail := htpProperty(htPage, 'ifail)
  alist := htpInputAreaAlist htPage
  y := alist
  for i in 1..(ngx*ngy) repeat
    utemp := STRCONC((first y).1," ")
    uList := [utemp,:uList]
    y := rest y
  ustring := bcwords2liststring uList
  for i in 1..lda repeat
    rtemp := STRCONC((first y).1," ")
    rList := [rtemp,:rList]
    y := rest y
  rstring := bcwords2liststring rList
  for i in 1..lda repeat
    for j in 1..7 repeat
      v := STRCONC((first y).1," ")
      rowList := [v,:rowList]
      y := rest y
    vList := [:vList,rowList]
    rowList := []
  vList := reverse vList
  astring := bcwords2liststring [bcwords2liststring x for x in vList]
  prefix := STRCONC("d03edf(", STRINGIMAGE ngx,", ",STRINGIMAGE ngy,", ")
  prefix := STRCONC(prefix,STRINGIMAGE lda,", ",STRINGIMAGE maxit,", ",acc)
  mid := STRCONC(", ",STRINGIMAGE iout,", ",astring,"::Matrix DoubleFloat,[")
  mid := STRCONC(mid,rstring,"],[",ustring,"],",STRINGIMAGE ifail,")")
  linkGen STRCONC(prefix,mid)
  
d03edfShort() ==
  htInitPage('"D03EDF - Elliptic PDE, solution of finite difference equations by a multigrid technique ",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Number of interior grid points in the {\it x}-direction ")
    (text . "\htbitmap{nx}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 0 ngx PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Number of interior grid points in the {\it y}-direction ")
    (text . "\htbitmap{ny}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 0 ngy PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "First dimension of A, {\it lda}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 0 lda PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Name of the array {\it a(lda,7)} defined on the command line: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "a" a EM))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Name of the array {\it rhs(lda)} defined on the command line: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "rhs" rhs EM))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Name of the array {\it ub(ngx*ngy)} defined on the command line:")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "ub" ub EM))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Maximum permitted number of multigrid iterations, {\it maxit}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 0 maxit PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Tolerance required, {\it acc}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "1.0e-4" acc F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\newline Output of printed information for routine {\it iout}:")
    (radioButtons iout
        ("" " 0 - no output" zero)
        ("" " 1 - the solution \htbitmap{uij} {\it i} = 1,2,...,NGX; {\it j} = 1,2,...,NGY" one)
        ("" " 2 - residual 2-norm after each iteration " two)
        ("" " 3 - as for iout = 1 & iout = 2" three)
        ("" " 4 - as for iout = 3, plus the final residual" four)
        ("" " 5 - as for iout = 4, plus initial elements of A & RHS" five)
        ("" " 6 - as for iout = 5, plus Galerkin coarse grid approximations" six)
        ("" " 7 - as for iout = 6, plus the incomplete Crout decompositions" seven)
        ("" " 8 - as for iout = 7, plus the residual after each iteration" eight))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\newline Ifail value:")
    (radioButtons ifail
        ("" " -1, Print error messages" ifail_minusOne)
        ("" "  1, Suppress error messages" ifail_one)))
  htMakeDoneButton('"Continue", 'd03edfShortGen)
  htShowPage()


d03edfShortGen htPage ==
  ngx :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'ngx)
    objValUnwrap htpLabelSpadValue(htPage, 'ngx)
  ngy :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'ngy)
    objValUnwrap htpLabelSpadValue(htPage, 'ngy)
  lda :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'lda)
    objValUnwrap htpLabelSpadValue(htPage, 'lda)
  maxit :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'maxit)
    objValUnwrap htpLabelSpadValue(htPage, 'maxit)
  a := htpLabelInputString(htPage, 'a)
  rhs := htpLabelInputString(htPage, 'rhs)
  ub := htpLabelInputString(htPage, 'ub)
  acc := htpLabelInputString(htPage,'acc)
  control := htpButtonValue(htPage,'iout)
  iout :=
    control = 'zero => '0
    control = 'one => '1
    control = 'two => '2
    control = 'three => '3
    control = 'four => '4
    control = 'five => '5
    control = 'six => '6
    control = 'seven => '7
    '8
  error := htpButtonValue(htPage,'ifail)
  ifail :=
    error = 'ifail_one => '1
    '-1
  prefix := STRCONC("d03edf(", STRINGIMAGE ngx,", ",STRINGIMAGE ngy,", ")
  prefix := STRCONC(prefix,STRINGIMAGE lda,", ",STRINGIMAGE maxit,", ",acc)
  mid := STRCONC(", ",STRINGIMAGE iout,", ",a,", ")
  mid := STRCONC(mid,rhs,", ",ub,", ",STRINGIMAGE ifail,")")
  linkGen STRCONC(prefix,mid)



d03eef() ==
  htInitPage('"D03EEF - Discretize a 2nd order elliptic PDE on a rectangle",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "\windowlink{Manual Page}{manpageXXd03eef} for this routine ")
    (text . "\newline ")
    (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d03eef| '|NagPartialDifferentialEquationsPackage|)} for this routine")
    (text . "\newline \horizontalline ")
    (text . "\newline ")
    (text . "D03EEF discretizes a second order linear elliptic partial ")
    (text . "differential equation of the form \center{\htbitmap{d03eef}} ")
    (text . "on a rectangular region \newline \tab{2} ")
    (text  . "{\it x}a \htbitmap{less=} {\it x}  \htbitmap{less=} {\it x}b ")
    (text . "\newline \tab{2} {\it y}a \htbitmap{less=} {\it y} ")
    (text . "\htbitmap{less=} {\it y}b \newline subject to the boundary ")
    (text . "conditions of the form \newline \htbitmap{d03eef1} \newline ")
    (text . "where {\it \delta U/ \delta n} denotes the outward pointing ")
    (text . "normal derivative on the boundary. The equation is said to be ")
    (text . "elliptic if \center{\htbitmap{d03eef2}} \newline for all points ")
    (text . "in the rectangular region. The seven-diagonal linear equations ")
    (text . "produced are in a form suitable for passing directly to the ")
    (text . "multigrid routine D03EDF. \blankline ")
    (text . "The equation is discretized on a rectangular grid, with ")
    (text . "\htbitmap{nx} grid points in the {\it x}-direction and ")
    (text . "\htbitmap{ny} grid points in the {\it y}-direction. "))
  htMakeDoneButton('"Continue", 'd03eefInput)
  htShowPage()

d03eefInput() ==
  htInitPage('"D03EEF - Discretize a 2nd order elliptic PDE on a rectangle",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Enter the value {\it x}a, {\it xmin}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "0.0" xmin F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Enter the value {\it x}b, {\it xmax}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "1.0" xmax F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Enter the value {\it y}a, {\it ymin}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "0.0" ymin F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Enter the value {\it y}b, {\it ymax}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 "1.0" ymax F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Number of interior grid points in the {\it x}-direction ")
    (text . "{\it ngx}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 9 ngx PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Number of interior grid points in the {\it y}-direction ")
    (text . "{\it ngy}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 9 ngy PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "First dimension of A, {\it lda}: ")
    (text . "\newline\tab{2} ")
    (bcStrings (10 133 lda PI))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\newline Which {\it scheme} would you like to use: ")
    (radioButtons scheme
        (" C" "  central differences" cent)
        (" U" "  upwind differences" up))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\newline Ifail value:")
    (radioButtons ifail
        ("" " -1, Print error messages" minusOne)
        ("" "  1, Suppress error messages" one)))
  htMakeDoneButton('"Continue", 'd03eefSolve)
  htShowPage()



d03eefSolve htPage ==
  xmin := htpLabelInputString(htPage,'xmin)
  xmax := htpLabelInputString(htPage,'xmax)
  ymin := htpLabelInputString(htPage,'ymin)
  ymax := htpLabelInputString(htPage,'ymax)
  ngx :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'ngx)
    objValUnwrap htpLabelSpadValue(htPage, 'ngx)
  ngy :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'ngy)
    objValUnwrap htpLabelSpadValue(htPage, 'ngy)
  lda :=
    $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'lda)
    objValUnwrap htpLabelSpadValue(htPage, 'lda)
  diff := htpButtonValue(htPage,'scheme)
  scheme :=
    diff = 'cent => '"C"
    '"U"
  error := htpButtonValue(htPage,'ifail)
  ifail :=
    error = 'one => '1
    '-1
  d03eefDefaultSolve(htPage,xmin,xmax,ymin,ymax,ngx,ngy,lda,scheme,ifail)

d03eefDefaultSolve(htPage,xmin,xmax,ymin,ymax,ngx,ngy,lda,scheme,ifail) ==
  page := htInitPage('"D03EEF - Discretize a 2nd order elliptic PDE on a rectangle",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "Please enter the values of \alpha to \psi to construct PDEF.")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\alpha (x,y): \tab{10} ")
    (bcStrings (46 1 alpha F))
    (text . "\blankline ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\beta (x,y): \tab{10} ")
    (bcStrings (46 0 beta F))
    (text . "\blankline ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\gamma (x,y): \tab{10} ")
    (bcStrings (46 1 gamma F))
    (text . "\blankline ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\delta (x,y): \tab{10} ")
    (bcStrings (46 50 delta F))
    (text . "\blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\epsilon (x,y): \tab{10} ")
    (bcStrings (46 50 eps F))
    (text . "\blankline ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\phi (x,y): \tab{10} ")
    (bcStrings (46 0 phi F))
    (text . "\blankline ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\psi (x,y): \tab{10} ")    
    (bcStrings (55 "-2*sin(X)*sin(Y) + 50*cos(X)*sin(Y) +50*sin(X)*cos(Y)" psi EM))
    (text . "\blankline ")
    (text . "Please enter the boundary conditions a(x,y), b(x,y), and c(x,y) ")
    (text . "for the top, bottom, left and right hand sides, to construct ")
    (text . "BNDY. \blankline")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Bottom boundary conditions: ")
    (text . "\newline a(x,y): \tab{10} ")
    (bcStrings (46 0 a11 F))
    (text . "\newline b(x,y): \tab{10} ")
    (bcStrings (46 1 a12 F))
    (text . "\newline c(x,y): \tab{10} ")
    (bcStrings (46 "-sin(X)" a13 EM))
    (text . "\blankline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Right boundary conditions: ")
    (text . "\newline a(x,y): \tab{10} ")
    (bcStrings (46 1 a21 F))
    (text . "\newline b(x,y): \tab{10} ")
    (bcStrings (46 0 a22 F))
    (text . "\newline c(x,y): \tab{10} ")
    (bcStrings (46 "sin(X)*sin(Y)" a23 EM))
    (text . "\blankline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Top boundary conditions: ")
    (text . "\newline a(x,y): \tab{10} ")
    (bcStrings (46 1 a31 F))
    (text . "\newline b(x,y): \tab{10} ")
    (bcStrings (46 0 a32 F))
    (text . "\newline c(x,y): \tab{10} ")
    (bcStrings (46 "sin(X)*sin(Y)" a33 EM))
    (text . "\blankline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "Left boundary conditions: ")
    (text . "\newline a(x,y): \tab{10} ")
    (bcStrings (46 0 a41 F))
    (text . "\newline b(x,y): \tab{10} ")
    (bcStrings (46 1 a42 F))
    (text . "\newline c(x,y): \tab{10} ")
    (bcStrings (46 "-sin(Y)" a43 EM)))
  htMakeDoneButton('"Continue",'d03eefGen)
  htpSetProperty(page,'xmin,xmin)
  htpSetProperty(page,'xmax,xmax)
  htpSetProperty(page,'ymin,ymin)
  htpSetProperty(page,'ymax,ymax)
  htpSetProperty(page,'ngx,ngx)
  htpSetProperty(page,'ngy,ngy)
  htpSetProperty(page,'lda,lda)
  htpSetProperty(page,'scheme,scheme)
  htpSetProperty(page,'ifail,ifail)
  htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
  htShowPage()

d03eefGen htPage ==
  xmin := htpProperty(htPage, 'xmin)
  xmax := htpProperty(htPage, 'xmax)
  ymin := htpProperty(htPage, 'ymin)
  ymax := htpProperty(htPage, 'ymax)
  ngx := htpProperty(htPage, 'ngx)
  ngy := htpProperty(htPage, 'ngy)
  lda := htpProperty(htPage, 'lda)
  scheme := htpProperty(htPage, 'scheme)
  ifail := htpProperty(htPage, 'ifail)
  alist := htpInputAreaAlist htPage
  y := alist
  for i in 1..4 repeat
    for j in 1..3 repeat
      v := STRCONC((first y).1," ")
      rowList := [v,:rowList]
      y := rest y
    vList := [:vList,rowList]
    rowList := []
  vList := reverse vList
  astring := bcwords2liststring [bcwords2liststring x for x in vList]
  for i in 1..7 repeat
    utemp := STRCONC((first y).1," ")
    uList := [utemp,:uList]
    y := rest y
  ustring := bcwords2liststring uList
  prefix := STRCONC("d03eef(",xmin,", ",xmax,", ",ymin,", ",ymax,", ")
  prefix := STRCONC(prefix,STRINGIMAGE ngx,", ",STRINGIMAGE ngy,", ")
  prefix := STRCONC(prefix,STRINGIMAGE lda,",_"",scheme,"_", ")
  prefix := STRCONC(prefix,STRINGIMAGE ifail,", (",ustring)
  prefix := STRCONC(prefix,"::Vector Expression Float)::ASP73('PDEF),(")
  prefix := STRCONC(prefix,astring,"::Matrix Expression Float)::ASP74('BNDY))")
  linkGen prefix
  
d03faf() ==
  htInitPage('"D03FAF - Elliptic PDE, Helmholtz equation, 3-D Cartesian co-ordinates",nil)
  htMakePage '(
    (domainConditions 
       (isDomain EM $EmptyMode)
       (isDomain F  (Float)))
    (text . "\windowlink{Manual Page}{manpageXXd03faf} for this routine ")
    (text . "\newline ")
    (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d03faf| '|NagPartialDifferentialEquationsPackage|)} for this routine")
    (text . "\newline \horizontalline ")
    (text . "\newline ")
    (text . "D03FAF solves the three-dimensional Helmholtz equation ")
    (text . "in cartesian co-ordinates: \center{\htbitmap{d03faf}} \newline ")
    (text . "This subroutine forms the system of linear equations resulting ")
    (text . "fom the standard seven-point finite difference equations, ")
    (text . "and then solves the system using a method based on the fast ")
    (text . "Fourier transform (FFT) described by Swartztrauber. ")
    (text . "\blankline")
    (text . "\newline ")
    (text . "Read the input file to see the example program. ")
    (text . "\newline ")
    (text . "\menuitemstyle{}\tab{2} ")
    (text . "\spadcommand{)read d03faf \bound{s0}} "))
  htShowPage()
@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}