aboutsummaryrefslogtreecommitdiff
path: root/src/interp/nag-d02.boot.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/interp/nag-d02.boot.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/interp/nag-d02.boot.pamphlet')
-rw-r--r--src/interp/nag-d02.boot.pamphlet2168
1 files changed, 2168 insertions, 0 deletions
diff --git a/src/interp/nag-d02.boot.pamphlet b/src/interp/nag-d02.boot.pamphlet
new file mode 100644
index 00000000..93edfc46
--- /dev/null
+++ b/src/interp/nag-d02.boot.pamphlet
@@ -0,0 +1,2168 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/interp nag-d02.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>>
+
+d02bbf() ==
+ htInitPage('"D02BBF - ODEs, IVP, Runge-Kutta-Merson method, over a range, intermediate output",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02bbf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02bbf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02BBF integrates a system of {\it n} ordinary differential ")
+ (text . "equations, {\htbitmap{yi}}' = {\htbitmap{fi}}(x,y), for ")
+ (text . "{\it i} = 1,2,...,{\it n}, over a range with given initial ")
+ (text . "conditions using a Runge-Kutta-Merson method; the solution ")
+ (text . "may be output at specified points.")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Initial value of {\it x}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "0.0" x F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "End of integration range {\it xend}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "8.0" xend F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Number of differential equations {\it n}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 n PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Tolerance required {\it tol}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0001" tol F))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Error control indicator {\it irelab}:")
+ (radioButtons irelab
+ ("" " 0, mixed" mix)
+ ("" " 1, absolute" abs)
+ ("" " 2, relative" rel))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Ifail value:")
+ (radioButtons ifail
+ ("" " -1, Print error messages" minusOne)
+ ("" " 1, Suppress error messages" one)))
+ htMakeDoneButton('"Continue", 'd02bbfSolve)
+ htShowPage()
+
+d02bbfSolve htPage ==
+ x := htpLabelInputString(htPage,'x)
+ xend := htpLabelInputString(htPage,'xend)
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ tol := htpLabelInputString(htPage,'tol)
+ control := htpButtonValue(htPage,'irelab)
+ irelab :=
+ control = 'mix => '0
+ control = 'abs => '1
+ '2
+ error := htpButtonValue(htPage,'ifail)
+ ifail :=
+ error = 'minusOne => '-1
+ '1
+ n = '3 => d02bbfDefaultSolve(htPage,x,xend,tol,irelab,ifail)
+ funcList :=
+ "append"/[fa(i) for i in 1..n] where fa(i) ==
+ prefix := ('"\newline {\em Function ")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ funct := STRCONC ('"Y[",STRINGIMAGE i ,"]")
+ nam := INTERN STRCONC ('"n",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, funct, nam, 'EM]]]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the initial ")
+ middle := STRCONC(middle,'"values of \htbitmap{yi}: \newline \tab{2}")
+ yList :=
+ "append"/[fb(i) for i in 1..n] where fb(i) ==
+ ynam := INTERN STRCONC ('"u",STRINGIMAGE i)
+ [['bcStrings,[6, 0, ynam, 'F]]]
+ yList := [['text,:middle],:yList]
+ mid:= ('"\blankline \menuitemstyle{} \tab{2} Intermediate values of {\it x}")
+ mid := STRCONC(mid,'" at which \htbitmap{yi} is required: \newline \tab{2}")
+ vList := [['bcStrings,[30, "0", 'out, 'EM]]]
+ vList := [['text,:mid],:vList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :funcList,:yList,:vList]
+ page := htInitPage('"D02BBF - ODEs, IVP, Runge-Kutta-Merson method, over a range, intermediate output",nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the functions (i.e. the derivatives) below "
+ htSay '"as functions of Y[1]...Y[n]: "
+ htSay '"\newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02bbfGen)
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'irelab,irelab)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02bbfDefaultSolve(htPage,x,xend,tol,irelab,ifail) ==
+ n := '3
+ page := htInitPage('"D02BBF - ODEs, IVP, Runge-Kutta-Merson method, over a range, intermediate output",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions (i.e. the derivatives) below ")
+ (text . "as functions of Y[1]...Y[n]: ")
+ (text . "\newline ")
+ (text . "\newline {\em Function 1:} \space{1}")
+ (bcStrings (44 "tan(Y[3])" f1 EM))
+ (text . "\newline {\em Function 2:} \space{1}")
+ (bcStrings (44 "-0.032*tan(Y[3])/Y[2] -0.02*Y[2]/cos(Y[3])" f2 EM))
+ (text . "\newline {\em Function 3:} \space{1}")
+ (bcStrings (44 "-0.032/(Y[2]**2)" f3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the initial values of \htbitmap{yi}:")
+ (text . "\newline \tab{2}")
+ (bcStrings (8 "0.0" y1 EM))
+ (bcStrings (8 "0.5" y2 EM))
+ (bcStrings (8 "\%pi*0.2" y3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Intermediate values of {\it x} at which \htbitmap{yi} is required:")
+ (text . "\newline \tab{2}")
+ (bcStrings (30 "1,2,3,4,5,6,7,8" out EM)))
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'irelab,irelab)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02bbfGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02bbfGen htPage ==
+ x := htpProperty(htPage, 'x)
+ xend := htpProperty(htPage, 'xend)
+ n := htpProperty(htPage, 'n)
+ tol := htpProperty(htPage, 'tol)
+ irelab := htpProperty(htPage, 'irelab)
+ ifail := htpProperty(htPage, 'ifail)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ outp := ((first y).1)
+ oList := [outp,:oList]
+ y := rest y
+ ostring := bcwords2liststring oList
+ -- This is distictly horrible! OUTP is a comma-seperated string so we
+ -- count up the commas to see how many elements it has. We return this
+ -- quantity plus 1 since the ASP OUTPUT is always called at least once.
+ numberOfPoints :=
+ ZEROP LENGTH(outp) => 1
+ 2+COUNT(CHARACTER(44),outp)
+ for i in 1..n repeat
+ ytemp := STRCONC((first y).1," ")
+ yList := [ytemp,:yList]
+ y := rest y
+ ystring := bcwords2liststring yList
+ while y repeat
+ f := STRCONC((first y).1," ")
+ fList := [f,:fList]
+ y := rest y
+ fstring := bcwords2liststring fList
+ prefix := STRCONC("d02bbf(", xend,", ", STRINGIMAGE numberOfPoints, ", ",STRINGIMAGE n,", ",STRINGIMAGE irelab)
+ prefix := STRCONC(prefix,", ",x,", [", ystring,"],",tol)
+ prefix := STRCONC(prefix,", ",STRINGIMAGE ifail,",(")
+ end := STRCONC(fstring,"::Vector Expression Float)::ASP7('FCN),(",ostring)
+ end := STRCONC(end,"::Vector MachineFloat)::ASP8('OUTPUT))")
+ linkGen STRCONC(prefix,end)
+
+d02bhf() ==
+ htInitPage('"D02BHF - ODEs, IVP, Runge-Kutta-Merson method, until function of solution is zero",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02bhf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02bhf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02BHF integrates a system of {\it n} ordinary differential ")
+ (text . "equations, {\htbitmap{yi}}' = {\htbitmap{fi}}(x,y), for ")
+ (text . "{\it i} = 1,2,...,{\it n}, over a range with given initial ")
+ (text . "conditions using a Runge-Kutta-Merson method until a specified ")
+ (text . "function {\em g(x,y)} of the solution is zero. ")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Initial value of {\it x}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "0.0" x F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "End of integration range {\it xend}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "10.0" xend F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Number of differential equations {\it n}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 n PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Tolerance required {\it tol}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0001" tol F))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Error control indicator {\it irelab}:")
+ (radioButtons irelab
+ ("" " 0, mixed" mix)
+ ("" " 1, absolute" abs)
+ ("" " 2, relative" rel))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Upper bound on size of the interval {\it hmax}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0" hmax F))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Ifail value:")
+ (radioButtons ifail
+ ("" " -1, Print error messages" minusOne)
+ ("" " 1, Suppress error messages" one)))
+ htMakeDoneButton('"Continue", 'd02bhfSolve)
+ htShowPage()
+
+d02bhfSolve htPage ==
+ x := htpLabelInputString(htPage,'x)
+ xend := htpLabelInputString(htPage,'xend)
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ tol := htpLabelInputString(htPage,'tol)
+ control := htpButtonValue(htPage,'irelab)
+ irelab :=
+ control = 'mix => '0
+ control = 'abs => '1
+ '2
+ hmax := htpLabelInputString(htPage,'hmax)
+ error := htpButtonValue(htPage,'ifail)
+ ifail :=
+ error = 'one => '1
+ '-1
+ n = '3 => d02bhfDefaultSolve(htPage,x,xend,tol,irelab,hmax,ifail)
+ funcList :=
+ "append"/[fa(i) for i in 1..n] where fa(i) ==
+ prefix := ('"\newline {\em Function ")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ funct := STRCONC ('"Y[",STRINGIMAGE i ,"]")
+ nam := INTERN STRCONC ('"n",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, funct, nam, 'EM]]]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the initial ")
+ middle := STRCONC(middle,'"values of \htbitmap{yi}: \newline ")
+ yList :=
+ "append"/[fb(i) for i in 1..n] where fb(i) ==
+ ynam := INTERN STRCONC ('"u",STRINGIMAGE i)
+ [['bcStrings,[6, 0, ynam, 'F]]]
+ yList := [['text,:middle],:yList]
+ mid:= ('"\blankline \menuitemstyle{} \tab{2} Enter the function below ")
+ mid := STRCONC(mid,'"{\em g(x,y)}: \newline ")
+ vList := [['bcStrings,[30, '"Y[1]", 'g, 'EM]]]
+ vList := [['text,:mid],:vList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :funcList,:yList,:vList]
+ page := htInitPage('"D02BHF - ODEs, IVP, Runge-Kutta-Merson method, until function of solution is zero",nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the functions (i.e. the derivatives) below \htbitmap{fi} "
+ htSay '"as functions of Y[1]...Y[n]: "
+ htSay '"\newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02bhfGen)
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'irelab,irelab)
+ htpSetProperty(page,'hmax,hmax)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02bhfDefaultSolve(htPage,x,xend,tol,irelab,hmax,ifail) ==
+ n := '3
+ page := htInitPage('"D02BHF - ODEs, IVP, Runge-Kutta-Merson method, until function of solution is zero",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions (i.e. the derivatives) below \htbitmap{fi} ")
+ (text . "as functions of Y[1]...Y[n]: ")
+ (text . "\newline {\em Function 1:} \space{1}")
+ (bcStrings (44 "tan(Y[3])" f1 EM))
+ (text . "\newline {\em Function 2:} \space{1}")
+ (bcStrings (44 "-0.032*tan(Y[3])/Y[2] -0.02*Y[2]/cos(Y[3])" f2 EM))
+ (text . "\newline {\em Function 3:} \space{1}")
+ (bcStrings (44 "-0.032/(Y[2]**2)" f3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the initial values of \htbitmap{yi}:")
+ (text . "\newline ")
+ (bcStrings (8 "0.5" y1 EM))
+ (bcStrings (8 "0.5" y2 EM))
+ (bcStrings (8 "\%pi*0.2" y3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the function below {\em g(x,y)}: ")
+ (text . "\newline ")
+ (bcStrings (30 "Y[1]" g EM)))
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'irelab,irelab)
+ htpSetProperty(page,'hmax,hmax)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02bhfGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02bhfGen htPage ==
+ x := htpProperty(htPage, 'x)
+ xend := htpProperty(htPage, 'xend)
+ n := htpProperty(htPage, 'n)
+ tol := htpProperty(htPage, 'tol)
+ irelab := htpProperty(htPage, 'irelab)
+ hmax := htpProperty(htPage, 'hmax)
+ ifail := htpProperty(htPage, 'ifail)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ g := ((first y).1)
+ y := rest y
+ for i in 1..n repeat
+ ytemp := STRCONC((first y).1," ")
+ yList := [ytemp,:yList]
+ y := rest y
+ ystring := bcwords2liststring yList
+ while y repeat
+ f := STRCONC((first y).1," ")
+ fList := [f,:fList]
+ y := rest y
+ fstring := bcwords2liststring fList
+ prefix := STRCONC("d02bhf(", xend,", ",STRINGIMAGE n,", ",STRINGIMAGE irelab)
+ mid := STRCONC(", ",hmax,", ",x,", [", ystring,"],")
+ mid := STRCONC(mid,tol,", ",STRINGIMAGE ifail,",(",g)
+ mid := STRCONC(mid,"::Expression Float)::ASP9('G),(")
+ end := STRCONC(fstring,"::Vector Expression Float)::ASP7('FCN))")
+ linkGen STRCONC(prefix,mid,end)
+
+
+d02cjf() ==
+ htInitPage('"D02CJF - ODEs, IVP, Adams method, until function of solution is zero, intermediate output",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02cjf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02cjf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02CJF integrates a system of {\it n} ordinary differential ")
+ (text . "equations, {\htbitmap{yi}}' = {\htbitmap{fi}}(x,y), for ")
+ (text . "{\it i} = 1,2,...,{\it n}, over a range with given initial ")
+ (text . "conditions using an Adams method until a specified ")
+ (text . "function {\em g(x,y)} of the solution is zero; the solution may ")
+ (text . "be output at specified points. \blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Initial value of {\it x}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "0.0" x F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "End of integration range {\it xend}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "10.0" xend F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Number of differential equations {\it n}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 n PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Tolerance required {\it tol}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0001" tol F))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Type of error test used {\it relabs}:")
+ (radioButtons relabs
+ ("" " D, default (mixed)" mix)
+ ("" " A, absolute" abs)
+ ("" " R, relative" rel))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Ifail value:")
+ (radioButtons ifail
+ ("" " -1, Print error messages" minusOne)
+ ("" " 1, Suppress error messages" one)))
+ htMakeDoneButton('"Continue", 'd02cjfSolve)
+ htShowPage()
+
+d02cjfSolve htPage ==
+ x := htpLabelInputString(htPage,'x)
+ xend := htpLabelInputString(htPage,'xend)
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ tol := htpLabelInputString(htPage,'tol)
+ control := htpButtonValue(htPage,'relabs)
+ relabs :=
+ control = 'mix => '"D"
+ control = 'abs => '"A"
+ '"R"
+ error := htpButtonValue(htPage,'ifail)
+ ifail :=
+ error = 'one => '1
+ '-1
+ n = '3 => d02cjfDefaultSolve(htPage,x,xend,tol,relabs,ifail)
+ funcList :=
+ "append"/[fa(i) for i in 1..n] where fa(i) ==
+ prefix := ('"\newline {\em Function ")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ funct := STRCONC ('"Y[",STRINGIMAGE i ,"]")
+ nam := INTERN STRCONC ('"n",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, funct, nam, 'EM]]]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the initial ")
+ middle := STRCONC(middle,'"values of \htbitmap{yi}: \newline ")
+ yList :=
+ "append"/[fb(i) for i in 1..n] where fb(i) ==
+ ynam := INTERN STRCONC ('"u",STRINGIMAGE i)
+ [['bcStrings,[6, 0, ynam, 'F]]]
+ yList := [['text,:middle],:yList]
+ mid:= ('"\blankline \menuitemstyle{} \tab{2} Intermediate values of {\it x}")
+ mid := STRCONC(mid,'" at which \htbitmap{yi} is required: \newline ")
+ vList := [['bcStrings,[30, "2,4", 'out, 'EM]]]
+ vList := [['text,:mid],:vList]
+ midd := ('"\blankline \menuitemstyle{} \tab{2} Enter the function below ")
+ midd := STRCONC(midd,'"{\em g(x,y)}: \newline ")
+ uList := [['bcStrings,[30, '"Y[1]", 'g, 'EM]]]
+ uList := [['text,:midd],:uList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :funcList,:yList,:vList,:uList]
+ page := htInitPage('"D02CJF - ODEs, IVP, Adams method, until function of solution is zero, intermediate output",nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the functions (i.e. the derivatives) below \htbitmap{fi} "
+ htSay '"as functions of Y[1]...Y[n]: "
+ htSay '"\newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02cjfGen)
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'relabs,relabs)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02cjfDefaultSolve(htPage,x,xend,tol,relabs,ifail) ==
+ n := '3
+ page := htInitPage('"D02CJF - ODEs, IVP, Adams method, until function of solution is zero, intermediate output",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions (i.e. the derivatives) below \htbitmap{fi} ")
+ (text . "as functions of Y[1]...Y[n]: ")
+ (text . "\newline {\em Function 1:} \space{1}")
+ (bcStrings (44 "tan(Y[3])" f1 EM))
+ (text . "\newline {\em Function 2:} \space{1}")
+ (bcStrings (44 "-0.032*tan(Y[3])/Y[2] -0.02*Y[2]/cos(Y[3])" f2 EM))
+ (text . "\newline {\em Function 3:} \space{1}")
+ (bcStrings (44 "-0.032/(Y[2]**2)" f3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the initial values of \htbitmap{yi}:")
+ (text . "\newline ")
+ (bcStrings (8 "0.5" y1 EM))
+ (bcStrings (8 "0.5" y2 EM))
+ (bcStrings (8 "\%pi*0.2" y3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2} Intermediate")
+ (text . " values of {\it x} at which \htbitmap{yi} is required:")
+ (text . "\newline ")
+ (bcStrings (30 "2,4,6,8" out EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the function below {\em g(x,y)}: ")
+ (text . "\newline ")
+ (bcStrings (30 "Y[1]" g EM)))
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'relabs,relabs)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02cjfGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02cjfGen htPage ==
+ x := htpProperty(htPage, 'x)
+ xend := htpProperty(htPage, 'xend)
+ n := htpProperty(htPage, 'n)
+ tol := htpProperty(htPage, 'tol)
+ relabs := htpProperty(htPage, 'relabs)
+ ifail := htpProperty(htPage, 'ifail)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ g := ((first y).1)
+ y := rest y
+ outp := ((first y).1)
+ oList := [outp,:oList]
+ ostring := bcwords2liststring oList
+ -- This is distictly horrible! OUTP is a comma-seperated string so we
+ -- count up the commas to see how many elements it has. We return this
+ -- quantity plus 1 since the ASP OUTPUT is always called at least once.
+ numberOfPoints :=
+ ZEROP LENGTH(outp) => 1
+ 2+COUNT(CHARACTER(44),outp)
+ y := rest y
+ for i in 1..n repeat
+ ytemp := STRCONC((first y).1," ")
+ yList := [ytemp,:yList]
+ y := rest y
+ ystring := bcwords2liststring yList
+ while y repeat
+ f := STRCONC((first y).1," ")
+ fList := [f,:fList]
+ y := rest y
+ fstring := bcwords2liststring fList
+ prefix := STRCONC("d02cjf(",xend,", ",STRINGIMAGE numberOfPoints ,", ", STRINGIMAGE n,", ",tol,",_"",relabs)
+ mid := STRCONC("_", ",x ,", [", ystring,"],",STRINGIMAGE ifail)
+ mid := STRCONC(mid,",(",g,"::Expression Float)::ASP9('G),(",fstring)
+ end := STRCONC("::Vector Expression Float)::ASP7('FCN),(",ostring)
+ end := STRCONC(end,"::Vector MachineFloat)::ASP8('OUTPUT))")
+ linkGen STRCONC(prefix,mid,end)
+
+
+
+d02ejf() ==
+ htInitPage('"D02EJF - ODEs, stiff IVP, BDF method, until function of solution is zero, intermediate output",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02ejf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02ejf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02EJF integrates a system of {\em n} ordinary differential ")
+ (text . "equations, {\htbitmap{yi}}' = {\htbitmap{fi}}(x,y), for {\it i} ")
+ (text . "= 1,,2,...,{\it n}, over a range with given initial conditions")
+ (text . " using backward differentiation formulae until a specified ")
+ (text . "function {\em g(x,y)} of the solution is zero; the solution may ")
+ (text . "be output at specified points. \blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Initial value of {\it x}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "0.0" x F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "End of integration range {\it xend}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "10.0" xend F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Number of differential equations {\it n}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 n PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Tolerance required {\it tol}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0001" tol F))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Type of error test used {\it relabs}:")
+ (radioButtons relabs
+ ("" " D, default (mixed)" mix)
+ ("" " A, absolute" abs)
+ ("" " R, relative" rel))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Ifail value:")
+ (radioButtons ifail
+ ("" " -1, Print error messages" minusOne)
+ ("" " 1, Suppress error messages" one)))
+ htMakeDoneButton('"Continue", 'd02ejfSolve)
+ htShowPage()
+
+d02ejfSolve htPage ==
+ x := htpLabelInputString(htPage,'x)
+ xend := htpLabelInputString(htPage,'xend)
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ tol := htpLabelInputString(htPage,'tol)
+ control := htpButtonValue(htPage,'relabs)
+ relabs :=
+ control = 'mix => '"D"
+ control = 'abs => '"A"
+ '"R"
+ iw := (n + 12) * n + 50
+ error := htpButtonValue(htPage,'ifail)
+ ifail :=
+ error = 'one => '1
+ '-1
+ n = '3 => d02ejfDefaultSolve(htPage,x,xend,tol,relabs,iw,ifail)
+ funcList :=
+ "append"/[fa(i) for i in 1..n] where fa(i) ==
+ prefix := ('"\newline {\em Function ")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ funct := STRCONC ('"Y[",STRINGIMAGE i ,"]")
+ nam := INTERN STRCONC ('"n",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, funct, nam, 'EM]]]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the initial ")
+ middle := STRCONC(middle,'"values of \htbitmap{yi}: \newline ")
+ yList :=
+ "append"/[fb(i) for i in 1..n] where fb(i) ==
+ ynam := INTERN STRCONC ('"u",STRINGIMAGE i)
+ [['bcStrings,[6, 0, ynam, 'F]]]
+ yList := [['text,:middle],:yList]
+ mid:= ('"\blankline \menuitemstyle{} \tab{2} Intermediate values of {\it x}")
+ mid := STRCONC(mid,'" at which \htbitmap{yi} is required: \newline ")
+ vList := [['bcStrings,[30, "2,4,6,8", 'out, 'EM]]]
+ vList := [['text,:mid],:vList]
+ midd := ('"\blankline \menuitemstyle{} \tab{2} Enter the function below ")
+ midd := STRCONC(midd,'"{\em g(x,y)}: \newline ")
+ uList := [['bcStrings,[30, '"Y[1]", 'g, 'EM]]]
+ uList := [['text,:midd],:uList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :funcList,:yList,:vList,:uList]
+ page := htInitPage('"D02EJF - ODEs, stiff IVP, BDF method, until function of solution is zero, intermediate output",nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the functions (i.e. the derivatives) below \htbitmap{fi} "
+ htSay '"as functions of Y[1]...Y[n]: "
+ htSay '"\newline "
+ htMakePage equationPart
+ htSay '"\blankline {\em Note:} PEDERV is automatically generated using the vector "
+ htSay '"of derivatives given above. "
+ htMakeDoneButton('"Continue",'d02ejfGen)
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'relabs,relabs)
+ htpSetProperty(page,'iw,iw)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02ejfDefaultSolve(htPage,x,xend,tol,relabs,iw,ifail) ==
+ n := '3
+ page := htInitPage('"D02EJF - ODEs, stiff IVP, BDF method, until function of solution is zero, intermediate output",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions (i.e. the derivatives) below \htbitmap{fi} ")
+ (text . "as functions of Y[1]...Y[n]: ")
+ (text . "\newline {\em Function 1:} \space{1}")
+ (bcStrings (44 "-0.04*Y[1]+1.0E4*Y[2]*Y[3]" f1 EM))
+ (text . "\newline {\em Function 2:} \space{1}")
+ (bcStrings (44 "0.04*Y[1]-1.0E4*Y[2]*Y[3]-3.0E7*Y[2]*Y[2]" f2 EM))
+ (text . "\newline {\em Function 3:} \space{1}")
+ (bcStrings (44 "3.0E7*Y[2]*Y[2]" f3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the initial values of \htbitmap{yi}:")
+ (text . "\newline ")
+ (bcStrings (8 "1.0" y1 EM))
+ (bcStrings (8 "0.0" y2 EM))
+ (bcStrings (8 "0.0" y3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2} Intermediate")
+ (text . " values of {\it x} at which \htbitmap{yi} is required:")
+ (text . "\newline ")
+ (bcStrings (30 "2,4,6,8" out EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the function below {\em g(x,y)}: ")
+ (text . "\newline ")
+ (bcStrings (30 "Y[1]-0.9" g EM))
+ (text . "\blankline ")
+ (text . "{\em Note:} PEDERV is automatically generated using the vector ")
+ (text . "of derivatives given above. "))
+ htpSetProperty(page,'x,x)
+ htpSetProperty(page,'xend,xend)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'relabs,relabs)
+ htpSetProperty(page,'iw,iw)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02ejfGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02ejfGen htPage ==
+ x := htpProperty(htPage, 'x)
+ xend := htpProperty(htPage, 'xend)
+ n := htpProperty(htPage, 'n)
+ tol := htpProperty(htPage, 'tol)
+ relabs := htpProperty(htPage, 'relabs)
+ iw := htpProperty(htPage, 'iw)
+ ifail := htpProperty(htPage, 'ifail)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ g := ((first y).1)
+ y := rest y
+ outp := ((first y).1)
+ oList := [outp,:oList]
+ ostring := bcwords2liststring oList
+ -- This is distictly horrible! OUTP is a comma-seperated string so we
+ -- count up the commas to see how many elements it has. We return this
+ -- quantity plus 1 since the ASP OUTPUT is always called at least once.
+ numberOfPoints :=
+ ZEROP LENGTH(outp) => 1
+ 2+COUNT(CHARACTER(44),outp)
+ y := rest y
+ for i in 1..n repeat
+ ytemp := STRCONC((first y).1," ")
+ yList := [ytemp,:yList]
+ y := rest y
+ ystring := bcwords2liststring yList
+ while y repeat
+ f := STRCONC((first y).1," ")
+ fList := [f,:fList]
+ y := rest y
+ fstring := bcwords2liststring fList
+ prefix := STRCONC("d02ejf(",xend,", ",STRINGIMAGE numberOfPoints,", ", STRINGIMAGE n,",_"",relabs,"_", ")
+ mid:=STRCONC(STRINGIMAGE iw,", ",x ,", [", ystring,"], ",tol,", ")
+ mid := STRCONC(mid,STRINGIMAGE ifail,",(",g,"::Expression Float)::ASP9(G),(")
+ end := STRCONC(fstring,"::Vector Expression Float)::ASP7('FCN),(",fstring)
+ end := STRCONC(end,"::Vector Expression Float)::ASP31('PEDERV),(",ostring)
+ end := STRCONC(end,"::Vector MachineFloat)::ASP8('OUTPUT))")
+ linkGen STRCONC(prefix,mid,end)
+
+d02gaf() ==
+ htInitPage('"D02GAF - ODEs, boundary value problem, finite difference technique with deferred correction, simple nonlinear problem", nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02gaf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02gaf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02GAF solves a two-point boundary value problem for a system ")
+ (text . "of n ODEs \center{\htbitmap{d02gaf},} for i = 1,2,...,n, on ")
+ (text . "the range [a,b] with assigned boundary conditions using a ")
+ (text . "deferred correction technique and a Newton iteration; ")
+ (text . "the solution is computed on a mesh. ")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the number of equations in the system {\it n}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 n PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Left hand boundary point {\it a}: ")
+ (text . "\tab{32} \menuitemstyle{}\tab{34} ")
+ (text . "Right hand boundary {\it b}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0" a F))
+ (text . "\tab{34} ")
+ (bcStrings (10 "10.0" b F))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Max number of mesh points {\it mnp}:")
+ (text . "\tab{32} \menuitemstyle{}\tab{34} ")
+ (text . "Number of points {\it np} ({\it np} = 0 or {\it np} ")
+ (text . "\htbitmap{great=} 4): ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 64 mnp PI))
+ (text . "\tab{34} ")
+ (bcStrings (10 26 np PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Accuracy required {\it tol}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "1.0e-3" tol F))
+ (text . "\blankline ")
+ (text . "\newline \tab{2} ")
+ (text . "Ifail is input in three components: ")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it a} ")
+ (radioButtons afail
+ ("" " 0, hard failure" azero)
+ ("" " 1, soft failure" aone))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it b} ")
+ (radioButtons bfail
+ ("" " 1, print error messages" bone)
+ ("" " 0, suppress error messages" bzero))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it c} ")
+ (radioButtons cfail
+ ("" " 1, print warning messages" cone)
+ ("" " 0, suppress warning messages" czero)))
+ htMakeDoneButton('"Continue", 'd02gafSolve)
+ htShowPage()
+
+d02gafSolve htPage ==
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ a := htpLabelInputString(htPage,'a)
+ b := htpLabelInputString(htPage,'b)
+ mnp :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'mnp)
+ objValUnwrap htpLabelSpadValue(htPage, 'mnp)
+ np :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'np)
+ objValUnwrap htpLabelSpadValue(htPage, 'np)
+ lw := mnp * (3*n*n + 6*n + 2) + 4*n*n + 4*n
+ liw := mnp * (2*n + 1) + n*n + 4*n + 2
+ tol := htpLabelInputString(htPage,'tol)
+ aerror := htpButtonValue(htPage,'afail)
+ afail :=
+ aerror = 'azero => '0
+ '1
+ berror := htpButtonValue(htPage,'bfail)
+ bfail :=
+ berror = 'bone => '1
+ '0
+ cerror := htpButtonValue(htPage,'cfail)
+ cfail :=
+ cerror = 'cone => '1
+ '0
+ ifail := 100*cfail + 10*bfail + afail
+ n = '3 => d02gafDefaultSolve(htPage,a,b,mnp,np,lw,liw,tol,ifail)
+ funcList :=
+ "append"/[fa(i) for i in 1..n] where fa(i) ==
+ prefix := ('"\newline {\em Function ")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ funct := STRCONC ('"Y[",STRINGIMAGE i ,"]")
+ nam := INTERN STRCONC ('"n",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, funct, nam, 'EM]]]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter known or estimated ")
+ middle := STRCONC(middle,'"values of \htbitmap{yi} at a and b, ")
+ middle := STRCONC(middle,"{\it U(n,2)}. [\htbitmap{yi}(a) in the first ")
+ middle := STRCONC(middle,"column, \htbitmap{yi}(b) in the second.] ")
+ middle := STRCONC(middle,"\newline ")
+ uList :=
+ "append"/[fb(i) for i in 1..n] where fb(i) ==
+ labelList :=
+ "append"/[fc(i,j) for j in 1..2] where fc(i,j) ==
+ unam := INTERN STRCONC ('"u",STRINGIMAGE i,STRINGIMAGE j)
+ [['bcStrings,[6, 0, unam, 'F]]]
+ prefix := ('"\newline ")
+ labelList := [['text,:prefix],:labelList]
+ uList := [['text,:middle],:uList]
+ mid := ('"\blankline \menuitemstyle{} \tab{2} Enter {\it V(n,2)}. ")
+ mid := STRCONC(mid,'"If U(i,j) is known V(i,j) ")
+ mid := STRCONC(mid,'"= 0.0, else V(i,j) = 1.0. \newline ")
+ vList :=
+ "append"/[fd(i) for i in 1..n] where fd(i) ==
+ labelList :=
+ "append"/[fe(i,j) for j in 1..2] where fe(i,j) ==
+ vnam := INTERN STRCONC ('"v",STRINGIMAGE i,STRINGIMAGE j)
+ [['bcStrings,[6, 0, vnam, 'F]]]
+ prefix := ('"\newline ")
+ labelList := [['text,:prefix],:labelList]
+ vList := [['text,:mid],:vList]
+ xList :=
+ "append"/[ff(i) for i in 1..mnp] where ff(i) ==
+ xnam := INTERN STRCONC ('"x",STRINGIMAGE i)
+ [['bcStrings,[8, "0.0", xnam, 'F]]]
+ end := ('"\blankline \menuitemstyle{} \tab{2} Enter the initial mesh ")
+ end := STRCONC(end,'"{\it X(mnp)}: \newline ")
+ xList := [['text,:end],:xList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :funcList,:uList,:vList,:xList]
+ page := htInitPage('"D02GAF - ODEs, boundary value problem, finite difference technique with deferred correction, simple nonlinear problem", nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the functions (i.e. the derivatives) below as functions of "
+ htSay '"Y[1]...Y[n]: "
+ htSay '"\newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02gafGen)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'a,a)
+ htpSetProperty(page,'b,b)
+ htpSetProperty(page,'mnp,mnp)
+ htpSetProperty(page,'np,np)
+ htpSetProperty(page,'lw,lw)
+ htpSetProperty(page,'liw,liw)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02gafDefaultSolve(htPage,a,b,mnp,np,lw,liw,tol,ifail) ==
+ n := '3
+ page := htInitPage('"D02GAF - ODEs, boundary value problem, finite difference technique with deferred correction, simple nonlinear problem", nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions (i.e. the derivatives) below ")
+ (text . "as functions of Y[1]...Y[n]: ")
+ (text . "\newline ")
+ (text . "\newline {\em Function 1:} \space{1}")
+ (bcStrings (42 "Y[2]" f1 EM))
+ (text . "\newline {\em Function 2:} \space{1}")
+ (bcStrings (42 "Y[3]" f2 EM))
+ (text . "\newline {\em Function 3:} \space{1}")
+ (bcStrings (42 "-Y[1]*Y[3]-0.2*(1-Y[2]*Y[2])" f3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter known or estimated values of \htbitmap{yi} at a and b,")
+ (text . " {\it U(n,2)}. ")
+ (text . " [\htbitmap{yi}(a) in the first column, \htbitmap{yi}(b) ")
+ (text . "in the second.] \newline ")
+ (bcStrings (6 "0" u11 F))
+ (bcStrings (6 "10" u21 F))
+ (text . "\newline ")
+ (bcStrings (6 "0" u12 F))
+ (bcStrings (6 "1" u22 F))
+ (text . "\newline ")
+ (bcStrings (6 "0" u13 F))
+ (bcStrings (6 "0" u23 F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter {\it V(n,2)}. ")
+ (text . "If U(i,j) is known V(i,j) = 0.0, else V(i,j) = 1.0: \newline")
+ (bcStrings (6 "0.0" v11 F))
+ (bcStrings (6 "1.0" v21 F))
+ (text . "\newline ")
+ (bcStrings (6 "0.0" v12 F))
+ (bcStrings (6 "0.0" v22 F))
+ (text . "\newline ")
+ (bcStrings (6 "1.0" v13 F))
+ (bcStrings (6 "1.0" v23 F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2} ")
+ (text . "Enter the initial mesh {\it X(mnp)}: ")
+ (text . "\newline ")
+ (bcStrings (8 "0.0" x1 F))
+ (bcStrings (8 "0.4" x2 F))
+ (bcStrings (8 "0.8" x3 F))
+ (bcStrings (8 "1.2" x4 F))
+ (bcStrings (8 "1.6" x5 F))
+ (bcStrings (8 "2.0" x6 F))
+ (bcStrings (8 "2.4" x7 F))
+ (bcStrings (8 "2.8" x8 F))
+ (bcStrings (8 "3.2" x9 F))
+ (bcStrings (8 "3.6" x10 F))
+ (bcStrings (8 "4.0" x11 F))
+ (bcStrings (8 "4.4" x12 F))
+ (bcStrings (8 "4.8" x13 F))
+ (bcStrings (8 "5.2" x14 F))
+ (bcStrings (8 "5.6" x15 F))
+ (bcStrings (8 "6.0" x16 F))
+ (bcStrings (8 "6.4" x17 F))
+ (bcStrings (8 "6.8" x18 F))
+ (bcStrings (8 "7.2" x19 F))
+ (bcStrings (8 "7.6" x20 F))
+ (bcStrings (8 "8.0" x21 F))
+ (bcStrings (8 "8.4" x22 F))
+ (bcStrings (8 "8.8" x23 F))
+ (bcStrings (8 "9.2" x24 F))
+ (bcStrings (8 "9.6" x25 F))
+ (bcStrings (8 "10.0" x26 F))
+ (bcStrings (8 "0.0" x27 F))
+ (bcStrings (8 "0.0" x28 F))
+ (bcStrings (8 "0.0" x29 F))
+ (bcStrings (8 "0.0" x30 F))
+ (bcStrings (8 "0.0" x31 F))
+ (bcStrings (8 "0.0" x32 F))
+ (bcStrings (8 "0.0" x33 F))
+ (bcStrings (8 "0.0" x34 F))
+ (bcStrings (8 "0.0" x35 F))
+ (bcStrings (8 "0.0" x36 F))
+ (bcStrings (8 "0.0" x37 F))
+ (bcStrings (8 "0.0" x38 F))
+ (bcStrings (8 "0.0" x39 F))
+ (bcStrings (8 "0.0" x40 F))
+ (bcStrings (8 "0.0" x41 F))
+ (bcStrings (8 "0.0" x42 F))
+ (bcStrings (8 "0.0" x43 F))
+ (bcStrings (8 "0.0" x44 F))
+ (bcStrings (8 "0.0" x45 F))
+ (bcStrings (8 "0.0" x46 F))
+ (bcStrings (8 "0.0" x47 F))
+ (bcStrings (8 "0.0" x48 F))
+ (bcStrings (8 "0.0" x49 F))
+ (bcStrings (8 "0.0" x50 F))
+ (bcStrings (8 "0.0" x51 F))
+ (bcStrings (8 "0.0" x52 F))
+ (bcStrings (8 "0.0" x53 F))
+ (bcStrings (8 "0.0" x54 F))
+ (bcStrings (8 "0.0" x55 F))
+ (bcStrings (8 "0.0" x56 F))
+ (bcStrings (8 "0.0" x57 F))
+ (bcStrings (8 "0.0" x58 F))
+ (bcStrings (8 "0.0" x59 F))
+ (bcStrings (8 "0.0" x60 F))
+ (bcStrings (8 "0.0" x61 F))
+ (bcStrings (8 "0.0" x62 F))
+ (bcStrings (8 "0.0" x63 F))
+ (bcStrings (8 "0.0" x64 F)))
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'a,a)
+ htpSetProperty(page,'b,b)
+ htpSetProperty(page,'mnp,mnp)
+ htpSetProperty(page,'np,np)
+ htpSetProperty(page,'lw,lw)
+ htpSetProperty(page,'liw,liw)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02gafGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02gafGen htPage ==
+ n := htpProperty(htPage, 'n)
+ a := htpProperty(htPage, 'a)
+ b := htpProperty(htPage, 'b)
+ mnp := htpProperty(htPage, 'mnp)
+ np := htpProperty(htPage, 'np)
+ lw := htpProperty(htPage, 'lw)
+ liw := htpProperty(htPage, 'liw)
+ ifail := htpProperty(htPage,'ifail)
+ tol := htpProperty(htPage,'tol)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ for i in 1..mnp repeat
+ x := STRCONC((first y).1," ")
+ xList := [x,:xList]
+ y := rest y
+ xstring := bcwords2liststring xList
+ for i in 1..n repeat
+ for j in 1..2 repeat
+ v := STRCONC((first y).1," ")
+ rowList := [v,:rowList]
+ y := rest y
+ vList := [:vList,rowList]
+ rowList := []
+ for i in 1..n repeat
+ for j in 1..2 repeat
+ u := STRCONC((first y).1," ")
+ rowList := [u,:rowList]
+ y := rest y
+ uList := [:uList,rowList]
+ rowList := []
+ vList := reverse vList
+ uList := reverse uList
+ vstring := bcwords2liststring [bcwords2liststring x for x in vList]
+ ustring := bcwords2liststring [bcwords2liststring x for x in uList]
+ while y repeat
+ f := STRCONC((first y).1," ")
+ fList := [f,:fList]
+ y := rest y
+ fstring := bcwords2liststring fList
+ Y:='Y
+ prefix := STRCONC("d02gaf(",ustring,", ",vstring,", ",STRINGIMAGE n,", ")
+ prefix := STRCONC(prefix,a,", ",b,", ",tol,", ")
+ prefix := STRCONC(prefix,STRINGIMAGE mnp,", ",STRINGIMAGE lw,", ")
+ prefix := STRCONC(prefix,STRINGIMAGE liw,", [",xstring,"], ",STRINGIMAGE np)
+ end:=STRCONC (",",STRINGIMAGE ifail,",(",fstring,"::Vector Expression Float")
+ linkGen STRCONC (prefix,end,")::ASP7('FCN))")
+
+d02gbf() ==
+ htInitPage('"D02GBF - ODEs, boundary value problem, finite difference technique with deferred correction, general nonlinear problem", nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02gbf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02gbf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02GBF solves a general linear two-point boundary value problem ")
+ (text . "for a system of n ODEs {\it y' = F(x)y + g(x)} on the range ")
+ (text . "[a,b] with boundary conditions {\it Cy(a) + Dy(b) = \gamma} ")
+ (text . "using a deferred correction technique.")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the number of equations in the system {\it n}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 2 n PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Left hand boundary point {\it a}: ")
+ (text . "\tab{32} \menuitemstyle{}\tab{34} ")
+ (text . "Right hand boundary {\it b}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0" a F))
+ (text . "\tab{34} ")
+ (bcStrings (10 "1.0" b F))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Max number of mesh points {\it mnp}:")
+ (text . "\tab{32} \menuitemstyle{}\tab{34} ")
+ (text . "Number of points {\it np}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 70 mnp PI))
+ (text . "\tab{34} ")
+ (bcStrings (10 0 np PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Accuracy required {\it tol}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "1.0e-3" tol F))
+ (text . "\blankline ")
+ (text . "\newline \tab{2} ")
+ (text . "Ifail is input in three components: ")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it a} ")
+ (radioButtons afail
+ ("" " 0, hard failure" azero)
+ ("" " 1, soft failure" aone))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it b} ")
+ (radioButtons bfail
+ ("" " 1, print error messages" bone)
+ ("" " 0, suppress error messages" bzero))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it c} ")
+ (radioButtons cfail
+ ("" " 1, print warning messages" cone)
+ ("" " 0, suppress warning messages" czero)))
+ htMakeDoneButton('"Continue", 'd02gbfSolve)
+ htShowPage()
+
+d02gbfSolve htPage ==
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ a := htpLabelInputString(htPage,'a)
+ b := htpLabelInputString(htPage,'b)
+ mnp :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'mnp)
+ objValUnwrap htpLabelSpadValue(htPage, 'mnp)
+ np :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'np)
+ objValUnwrap htpLabelSpadValue(htPage, 'np)
+ lw := mnp * (3*n*n + 5*n + 2) + 3*n*n + 5*n
+ liw := mnp * (2*n + 1) + n
+ tol := htpLabelInputString(htPage,'tol)
+ aerror := htpButtonValue(htPage,'afail)
+ afail :=
+ aerror = 'azero => '0
+ '1
+ berror := htpButtonValue(htPage,'bfail)
+ bfail :=
+ berror = 'bone => '1
+ '0
+ cerror := htpButtonValue(htPage,'cfail)
+ cfail :=
+ cerror = 'cone => '1
+ '0
+ ifail := 100*cfail + 10*bfail + afail
+ n = '2 => d02gbfDefaultSolve(htPage,a,b,mnp,np,lw,liw,tol,ifail)
+ cList :=
+ "append"/[fa(i,n) for i in 1..n] where fa(i,n) ==
+ labelList :=
+ "append"/[fb(i,j) for j in 1..n] where fb(i,j) ==
+ cnam := INTERN STRCONC ('"c",STRINGIMAGE i,STRINGIMAGE j)
+ [['bcStrings,[6, 0, cnam, 'F]]]
+ prefix := ('"\newline ")
+ labelList := [['text,:prefix],:labelList]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the matrix {\it D}: ")
+ middle := STRCONC(middle,"\newline ")
+ dList :=
+ "append"/[fc(i,n) for i in 1..n] where fc(i,n) ==
+ labelList :=
+ "append"/[fd(i,j) for j in 1..n] where fd(i,j) ==
+ dnam := INTERN STRCONC ('"d",STRINGIMAGE i,STRINGIMAGE j)
+ [['bcStrings,[6, 0, dnam, 'F]]]
+ prefix := ('"\newline ")
+ labelList := [['text,:prefix],:labelList]
+ dList := [['text,:middle],:dList]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the vector \gamma: ")
+ middle := STRCONC(middle,"\newline ")
+ gamList :=
+ "append"/[fe(i) for i in 1..n] where fe(i) ==
+ gamnam := INTERN STRCONC ('"gam",STRINGIMAGE i)
+ [['bcStrings,[6, 0, gamnam, 'F]]]
+ prefix := ('"\newline ")
+ gamList := [['text,:middle],:gamList]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the matrix ")
+ middle := STRCONC(middle,"{\it F(x)} from the equation {\it y' =} ")
+ middle := STRCONC(middle,"{\it F(x)y + g(x)}: \newline ")
+ fList :=
+ "append"/[ff(i,n) for i in 1..n] where ff(i,n) ==
+ labelList :=
+ "append"/[fg(i,j) for j in 1..n] where fg(i,j) ==
+ fnam := INTERN STRCONC ('"f",STRINGIMAGE i,STRINGIMAGE j)
+ [['bcStrings,[6, 0, fnam, 'F]]]
+ prefix := ('"\newline ")
+ labelList := [['text,:prefix],:labelList]
+ fList := [['text,:middle],:fList]
+ mid := ('"\blankline \menuitemstyle{} \tab{2} Enter the vector {\it g(x)}: ")
+ mid := STRCONC(mid,'"\newline ")
+ gList :=
+ "append"/[fh(i) for i in 1..n] where fh(i) ==
+ gnam := INTERN STRCONC ('"g",STRINGIMAGE i)
+ [['bcStrings,[6, 0, gnam, 'F]]]
+ prefix := ('"\newline ")
+ gList := [['text,:middle],:gList]
+ xList :=
+ "append"/[fi(i) for i in 1..mnp] where fi(i) ==
+ xnam := INTERN STRCONC ('"x",STRINGIMAGE i)
+ [['bcStrings,[8, "0.0", xnam, 'F]]]
+ end := ('"\blankline \menuitemstyle{} \tab{2} The initial mesh {\it X(mnp)}")
+ end := STRCONC(end,'", (all entries = 0 if np < 4): \newline ")
+ xList := [['text,:end],:xList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :cList,:dList,:gamList,:fList,:gList,:xList]
+ page := htInitPage('"D02GBF - ODEs, boundary value problem, finite difference technique with deferred correction, general nonlinear problem", nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the matrix {\it C} form the equation {\it Cy(a) + Dy(b)} "
+ htSay '"= \gamma \newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02gbfGen)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'a,a)
+ htpSetProperty(page,'b,b)
+ htpSetProperty(page,'mnp,mnp)
+ htpSetProperty(page,'np,np)
+ htpSetProperty(page,'lw,lw)
+ htpSetProperty(page,'liw,liw)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02gbfDefaultSolve(htPage,a,b,mnp,np,lw,liw,tol,ifail) ==
+ n := '2
+ page := htInitPage('"D02GBF - ODEs, boundary value problem, finite difference technique with deferred correction, general nonlinear problem", nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the matrix {\it C} from the equation {\it Cy(a) + Dy(b)} = \gamma:")
+ (text . "\newline ")
+ (bcStrings (6 "1" c11 F))
+ (bcStrings (6 "0" c12 F))
+ (text . "\newline ")
+ (bcStrings (6 "0" c21 F))
+ (bcStrings (6 "0" c22 F))
+ (text . "\blankline \menuitemstyle{}\tab{2}")
+ (text . "Enter the matrix {\it D}: \newline ")
+ (bcStrings (6 "0" d11 F))
+ (bcStrings (6 "0" d12 F))
+ (text . "\newline ")
+ (bcStrings (6 "1" d21 F))
+ (bcStrings (6 "0" d22 F))
+ (text . "\blankline \menuitemstyle{}\tab{2}")
+ (text . "Enter the vector \gamma: \newline ")
+ (bcStrings (6 "0" gam1 F))
+ (bcStrings (6 "1" gam2 F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the matrix {\it F(x)} from the equation {\it y' = F(x)y + g(x)} : ")
+ (text . "\newline ")
+ (bcStrings (6 "0" f11 F))
+ (bcStrings (6 "1" f12 F))
+ (text . "\newline ")
+ (bcStrings (6 "0" f21 F))
+ (bcStrings (6 "-10" f22 F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the vector {\it g(x)}: ")
+ (text . "\newline ")
+ (bcStrings (6 "0" g1 F))
+ (bcStrings (6 "0" g2 F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2} The initial mesh {\it X(mnp)}, ")
+ (text . "(all entries = 0 if np < 4): \newline ")
+ (bcStrings (8 "0.0" x1 F))
+ (bcStrings (8 "0.0" x2 F))
+ (bcStrings (8 "0.0" x3 F))
+ (bcStrings (8 "0.0" x4 F))
+ (bcStrings (8 "0.0" x5 F))
+ (bcStrings (8 "0.0" x6 F))
+ (bcStrings (8 "0.0" x7 F))
+ (bcStrings (8 "0.0" x8 F))
+ (bcStrings (8 "0.0" x9 F))
+ (bcStrings (8 "0.0" x10 F))
+ (bcStrings (8 "0.0" x11 F))
+ (bcStrings (8 "0.0" x12 F))
+ (bcStrings (8 "0.0" x13 F))
+ (bcStrings (8 "0.0" x14 F))
+ (bcStrings (8 "0.0" x15 F))
+ (bcStrings (8 "0.0" x16 F))
+ (bcStrings (8 "0.0" x17 F))
+ (bcStrings (8 "0.0" x18 F))
+ (bcStrings (8 "0.0" x19 F))
+ (bcStrings (8 "0.0" x20 F))
+ (bcStrings (8 "0.0" x21 F))
+ (bcStrings (8 "0.0" x22 F))
+ (bcStrings (8 "0.0" x23 F))
+ (bcStrings (8 "0.0" x24 F))
+ (bcStrings (8 "0.0" x25 F))
+ (bcStrings (8 "0.0" x26 F))
+ (bcStrings (8 "0.0" x27 F))
+ (bcStrings (8 "0.0" x28 F))
+ (bcStrings (8 "0.0" x29 F))
+ (bcStrings (8 "0.0" x30 F))
+ (bcStrings (8 "0.0" x31 F))
+ (bcStrings (8 "0.0" x32 F))
+ (bcStrings (8 "0.0" x33 F))
+ (bcStrings (8 "0.0" x34 F))
+ (bcStrings (8 "0.0" x35 F))
+ (bcStrings (8 "0.0" x36 F))
+ (bcStrings (8 "0.0" x37 F))
+ (bcStrings (8 "0.0" x38 F))
+ (bcStrings (8 "0.0" x39 F))
+ (bcStrings (8 "0.0" x40 F))
+ (bcStrings (8 "0.0" x41 F))
+ (bcStrings (8 "0.0" x42 F))
+ (bcStrings (8 "0.0" x43 F))
+ (bcStrings (8 "0.0" x44 F))
+ (bcStrings (8 "0.0" x45 F))
+ (bcStrings (8 "0.0" x46 F))
+ (bcStrings (8 "0.0" x47 F))
+ (bcStrings (8 "0.0" x48 F))
+ (bcStrings (8 "0.0" x49 F))
+ (bcStrings (8 "0.0" x50 F))
+ (bcStrings (8 "0.0" x51 F))
+ (bcStrings (8 "0.0" x52 F))
+ (bcStrings (8 "0.0" x53 F))
+ (bcStrings (8 "0.0" x54 F))
+ (bcStrings (8 "0.0" x55 F))
+ (bcStrings (8 "0.0" x56 F))
+ (bcStrings (8 "0.0" x57 F))
+ (bcStrings (8 "0.0" x58 F))
+ (bcStrings (8 "0.0" x59 F))
+ (bcStrings (8 "0.0" x60 F))
+ (bcStrings (8 "0.0" x61 F))
+ (bcStrings (8 "0.0" x62 F))
+ (bcStrings (8 "0.0" x63 F))
+ (bcStrings (8 "0.0" x64 F))
+ (bcStrings (8 "0.0" x65 F))
+ (bcStrings (8 "0.0" x66 F))
+ (bcStrings (8 "0.0" x67 F))
+ (bcStrings (8 "0.0" x68 F))
+ (bcStrings (8 "0.0" x69 F))
+ (bcStrings (8 "0.0" x70 F)))
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'a,a)
+ htpSetProperty(page,'b,b)
+ htpSetProperty(page,'mnp,mnp)
+ htpSetProperty(page,'np,np)
+ htpSetProperty(page,'lw,lw)
+ htpSetProperty(page,'liw,liw)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02gbfGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02gbfGen htPage ==
+ n := htpProperty(htPage, 'n)
+ a := htpProperty(htPage, 'a)
+ b := htpProperty(htPage, 'b)
+ mnp := htpProperty(htPage, 'mnp)
+ np := htpProperty(htPage, 'np)
+ lw := htpProperty(htPage, 'lw)
+ liw := htpProperty(htPage, 'liw)
+ ifail := htpProperty(htPage,'ifail)
+ tol := htpProperty(htPage,'tol)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ for i in 1..mnp repeat -- matrix
+ x := STRCONC((first y).1," ")
+ xList := [x,:xList]
+ y := rest y
+ xstring := bcwords2liststring xList
+ for i in 1..n repeat -- vector g
+ g := STRCONC((first y).1," ")
+ gList := [g,:gList]
+ y := rest y
+ gstring := bcwords2liststring gList
+ for i in 1..n repeat -- matrix F
+ for j in 1..n repeat
+ f := STRCONC((first y).1," ")
+ flist := [f,:flist]
+ y := rest y
+ fmatlist := [:fmatlist,flist]
+ flist := []
+ fmatlist := reverse fmatlist
+ fmatstr := bcwords2liststring [bcwords2liststring x for x in fmatlist]
+ for i in 1..n repeat -- vector gamma
+ gam := STRCONC((first y).1," ")
+ gamList := [gam,:gamList]
+ y := rest y
+ gamstr := bcwords2liststring gamList
+ for i in 1..n repeat -- matrix D
+ for j in 1..n repeat
+ d := STRCONC((first y).1," ")
+ dlist := [d,:dlist]
+ y := rest y
+ dmatlist := [:dmatlist,dlist]
+ dlist := []
+ dmatlist := reverse dmatlist
+ dmatstr := bcwords2liststring [bcwords2liststring x for x in dmatlist]
+ for i in 1..n repeat -- matrix C
+ for j in 1..n repeat
+ c := STRCONC((first y).1," ")
+ clist := [c,:clist]
+ y := rest y
+ cmatlist := [:cmatlist,clist]
+ clist := []
+ cmatlist := reverse cmatlist
+ cmatstr := bcwords2liststring [bcwords2liststring x for x in cmatlist]
+ prefix := STRCONC("d02gbf(",STRINGIMAGE a,", ",STRINGIMAGE b,", ")
+ prefix := STRCONC(prefix,STRINGIMAGE n,", ",tol,", ",STRINGIMAGE mnp,", ")
+ prefix := STRCONC(prefix,STRINGIMAGE lw,", ",STRINGIMAGE liw,", ")
+ prefix := STRCONC(prefix,cmatstr,"::Matrix DoubleFloat,",dmatstr,"::Matrix DoubleFloat,[",gamstr,"]::Matrix DoubleFloat,[",xstring,"]::Matrix DoubleFloat, ")
+ mid := STRCONC(STRINGIMAGE np,", ",STRINGIMAGE ifail,", ")
+ end := STRCONC("(",fmatstr,"::Matrix(Expression(Float)))::ASP77(FCNF),(",gstring)
+ linkGen STRCONC(prefix,mid,end,"::Vector(Expression(Float)))::ASP78(FCNG))")
+
+d02kef() ==
+ htInitPage('"D02KEF - 2nd order Sturm-Liouville problem, regular/singular system, finite/infinite range, eigenvalue and eigenfunction, user-specified break-points", nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02kef} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02kef| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02KEF finds a specified eigenvalue \htbitmap{lamdab} of a ")
+ (text . "regular or second-order Sturm-Liouville system ")
+ (text . "{\it(p(x)y')' + q(x; \lambda)y = 0} on a finite or infinite ")
+ (text . "range [a,b]; a Pruefer transformation and shooting method ")
+ (text . "are used; discontinuities in coefficient functions or their ")
+ (text . "derivatives are permitted. ")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Number of points in XPOINT {\it m}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (6 5 m PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Index of the `break-point' {\it match}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (6 0 match PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Index of the required eigenvalue {\it k}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (6 11 k PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Accuracy required {\it tol}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "0.0001" tol F))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} \newline ")
+ (text . "Eigenvalue estimate {\it elam}: ")
+ (text . "\tab{32} \menuitemstyle{}\tab{34} ")
+ (text . "Scale of the problem {\it delam}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "14" elam F))
+ (text . "\tab{34} ")
+ (bcStrings (10 "1" delam F))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} \newline ")
+ (text . "Max iterations {\it maxit}:")
+ (text . "\tab{32} \menuitemstyle{}\tab{34} ")
+ (text . "Max COEFFN calls {\it maxfun}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 0 maxit PI))
+ (text . "\tab{34} ")
+ (bcStrings (10 0 maxfun PI))
+ (text . "\blankline ")
+ (text . "\tab{2} \newline {\it Note:} no bound is assumed ")
+ (text . "if maxit = 0 \blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Ifail value:")
+ (radioButtons ifail
+ ("" " -1, Print error messages" minusOne)
+ ("" " 1, Suppress error messages" one)))
+ htMakeDoneButton('"Continue", 'd02kefSolve)
+ htShowPage()
+
+d02kefSolve htPage ==
+ m :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'm)
+ objValUnwrap htpLabelSpadValue(htPage, 'm)
+ match :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'match)
+ objValUnwrap htpLabelSpadValue(htPage, 'match)
+ k :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'k)
+ objValUnwrap htpLabelSpadValue(htPage, 'k)
+ tol := htpLabelInputString(htPage,'tol)
+ elam := htpLabelInputString(htPage,'elam)
+ delam := htpLabelInputString(htPage,'delam)
+ maxit :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'maxit)
+ objValUnwrap htpLabelSpadValue(htPage, 'maxit)
+ maxfun :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'maxfun)
+ objValUnwrap htpLabelSpadValue(htPage, 'maxfun)
+ error := htpButtonValue(htPage,'ifail)
+ ifail :=
+ error = 'minusOne => '-1
+ '1
+ m = '5 =>d02kefDefaultSolve(htPage,match,k,tol,elam,delam,maxit,maxfun,ifail)
+ xpList :=
+ "append"/[fa(i) for i in 1..m] where fa(i) ==
+ xpnam := INTERN STRCONC ('"xp",STRINGIMAGE i)
+ [['bcStrings,[10, "0.0", xpnam, 'EM]]]
+ middle:=('"\blankline \menuitemstyle{} \tab{2} Value of {\it p} for COEFFN:")
+ middle := STRCONC(middle,"\newline ")
+ cList := [['text,:middle],['bcStrings,[42, "0.0", 'c1, 'EM]]]
+ middle:=('"\blankline \menuitemstyle{} \tab{2} Value of {\it q} for COEFFN:")
+ middle := STRCONC(middle,"\newline ")
+ c1List := [['text,:middle],['bcStrings,[42, "0.0", 'c2, 'EM]]]
+ cList := [:cList,:c1List]
+ middle:=('"\blankline \menuitemstyle{} \tab{2} Value of {\it dqdl}")
+ middle := STRCONC(middle," for COEFFN: \newline ")
+ c2List := [['text,:middle],['bcStrings,[42, "0.0", 'c3, 'EM]]]
+ cList := [:cList,:c2List]
+ middle:=('"\blankline \menuitemstyle{} \tab{2} Values of YL(1) & YL(2) ")
+ middle := STRCONC(middle,"for BDYVAL: \newline ")
+ ylList :=
+ "append"/[fb(i) for i in 1..2] where fb(i) ==
+ ylnam := INTERN STRCONC ('"yl",STRINGIMAGE i)
+ [['bcStrings,[42, "0.0", ylnam, 'EM]]]
+ ylList := [['text,:middle],:ylList]
+ middle:=('"\blankline \menuitemstyle{} \tab{2} Values of YR(1) & YR(2) ")
+ middle := STRCONC(middle,"for BDYVAL: \newline ")
+ yrList :=
+ "append"/[fc(i) for i in 1..2] where fc(i) ==
+ yrnam := INTERN STRCONC ('"yr",STRINGIMAGE i)
+ [['bcStrings,[42, "0.0", yrnam, 'EM]]]
+ yrList := [['text,:middle],:yrList]
+ middle:=('"\blankline \menuitemstyle{} \tab{2} Maximum step size ")
+ middle := STRCONC(middle,"{\it hmax(2,m)}: \newline ")
+ hList :=
+ "append"/[fd(i,m) for i in 1..2] where fd(i,m) ==
+ labelList :=
+ "append"/[fe(i,j) for j in 1..m] where fe(i,j) ==
+ hnam := INTERN STRCONC ('"h",STRINGIMAGE i,STRINGIMAGE j)
+ [['bcStrings,[6, "0.0", hnam, 'F]]]
+ prefix := ('"\newline ")
+ labelList := [['text,:prefix],:labelList]
+ hList := [['text,:middle],:hList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :xpList,:cList,:ylList,:yrList,:hList]
+ page := htInitPage('"D02KEF - 2nd order Sturm-Liouville problem, regular/singular system, finite/infinite range, eigenvalue and eigenfunction, user-specified break-points", nil)
+ htSay '"\menuitemstyle{}\tab{2} Enter points where boundary "
+ htSay '"conditions are to be imposed {\it xpoint}: \newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02kefGen)
+ htpSetProperty(page,'m,m)
+ htpSetProperty(page,'match,match)
+ htpSetProperty(page,'k,k)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'elam,elam)
+ htpSetProperty(page,'delam,delam)
+ htpSetProperty(page,'maxit,maxit)
+ htpSetProperty(page,'maxfun,maxfun)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02kefDefaultSolve(htPage,match,k,tol,elam,delam,maxit,maxfun,ifail) ==
+ m := '5
+ page := htInitPage('"D02KEF - 2nd order Sturm-Liouville problem, regular/singular system, finite/infinite range, eigenvalue and eigenfunction, user-specified break-points", nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter points where boundary conditions are to be imposed ")
+ (text . "{\it xpoint}: \newline ")
+ (bcStrings (10 "0.0" xp1 F))
+ (bcStrings (10 "0.1" xp2 F))
+ (bcStrings (10 "4**(1/3)" xp3 F))
+ (bcStrings (10 "30.0" xp4 F))
+ (bcStrings (10 "30.0" xp5 F))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Value of {\it p} for COEFFN: \newline ")
+ (bcStrings (42 "1.0" c1 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Value of {\it q} for COEFFN: \newline ")
+ (bcStrings (42 "ELAM-X-2.0/(X*X)" c2 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Value of {\it dqdl} for COEFFN: \newline ")
+ (bcStrings (42 "1.0" c3 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Values of YL(1) & YL(2) for BDYVAL: \newline ")
+ (bcStrings (42 "XL" yl1 EM))
+ (bcStrings (42 "2.0" yl2 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Values of YR(1) & YR(2) for BDYVAL: \newline ")
+ (bcStrings (42 "1.0" yr1 EM))
+ (bcStrings (42 "-sqrt(XR-ELAM)" yr2 EM))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Maximum step size {\it hmax(2,m)}: \newline ")
+ (bcStrings (6 "0.0" h11 F))
+ (bcStrings (6 "0.0" h12 F))
+ (bcStrings (6 "0.0" h13 F))
+ (bcStrings (6 "0.0" h14 F))
+ (bcStrings (6 "0.0" h15 F))
+ (text . "\newline ")
+ (bcStrings (6 "0.0" h21 F))
+ (bcStrings (6 "0.0" h22 F))
+ (bcStrings (6 "0.0" h23 F))
+ (bcStrings (6 "0.0" h24 F))
+ (bcStrings (6 "0.0" h25 F)))
+ htpSetProperty(page,'m,m)
+ htpSetProperty(page,'match,match)
+ htpSetProperty(page,'k,k)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'elam,elam)
+ htpSetProperty(page,'delam,delam)
+ htpSetProperty(page,'maxit,maxit)
+ htpSetProperty(page,'maxfun,maxfun)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02kefGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02kefGen htPage ==
+ m := htpProperty(htPage, 'm)
+ match := htpProperty(htPage, 'match)
+ k := htpProperty(htPage, 'k)
+ tol := htpProperty(htPage, 'tol)
+ elam := htpProperty(htPage, 'elam)
+ delam := htpProperty(htPage, 'delam)
+ maxit := htpProperty(htPage, 'maxit)
+ maxfun := htpProperty(htPage, 'maxfun)
+ ifail := htpProperty(htPage,'ifail)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ for i in 1..m repeat
+ for j in 1..2 repeat
+ h := STRCONC((first y).1," ")
+ rowList := [h,:rowList]
+ y := rest y
+ hList := [:hList,rowList]
+ rowList := []
+ hList := reverse hList
+ hstring := bcwords2liststring [bcwords2liststring x for x in hList]
+ for i in 1..2 repeat
+ for j in 1..2 repeat
+ b := STRCONC((first y).1," ")
+ rowList := [b,:rowList]
+ y := rest y
+ bList := [:bList,rowList]
+ rowList := []
+ bList := reverse bList
+ bstring := bcwords2liststring [bcwords2liststring x for x in bList]
+ for i in 1..3 repeat
+ c := STRCONC((first y).1," ")
+ cList := [c,:cList]
+ y := rest y
+ cstring := bcwords2liststring cList
+ while y repeat
+ x := STRCONC((first y).1," ")
+ xList := [x,:xList]
+ y := rest y
+ xstring := bcwords2liststring xList
+ prefix := STRCONC("d02kef([",xstring,"]::Matrix DoubleFloat, ",STRINGIMAGE m)
+ prefix := STRCONC(prefix,", ",STRINGIMAGE k,", ",tol,", ",STRINGIMAGE maxfun)
+ prefix := STRCONC(prefix,", ",STRINGIMAGE match,", ",STRINGIMAGE elam,", ")
+ prefix:=STRCONC(prefix,STRINGIMAGE delam,", ",hstring,", ",STRINGIMAGE maxit)
+ end := STRCONC(", ",STRINGIMAGE ifail,",(",cstring,"::Vector(Expression Float))::ASP10(COEFFN)")
+ end := STRCONC(end,", (",bstring,"::Matrix Expression Float)::ASP80('BDYVAL))")
+ linkGen STRCONC (prefix,end)
+
+d02raf() ==
+ htInitPage('"D02RAF - ODEs, general nonlinear boundary value problem, finite difference technique with deferred correction, continuation facility",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\windowlink{Manual Page}{manpageXXd02raf} for this routine ")
+ (text . "\newline ")
+ (text . "\lispwindowlink{Browser operation page}{(|oPageFrom| '|d02raf| '|NagOrdinaryDifferentialEquationsPackage|)} for this routine")
+ (text . "\newline \horizontalline ")
+ (text . "\newline ")
+ (text . "D02RAF solves a two-point boundary value problem for a system ")
+ (text . "of {\it n} first-order ordinary differential equations ")
+ (text . "{\it \htbitmap{yi}'= \htbitmap{fi}(x,y)}, for {\it i} = 1,2,...,")
+ (text . "{\it n}, on the range [a,b] with {\it n} nonlinear boundary ")
+ (text . "conditions \htbitmap{gi}{\it (y(a),y(b)) = 0} for {\it i} = 1,2,")
+ (text . "...,{\it n} using a deferred correction technique and a Newton ")
+ (text . "iteration; the solution is computed on a mesh. A continuation ")
+ (text . "facility is provided for which a family of problems is solved ")
+ (text . "posed as {\it y' = f(x,y,\epsilon)} subject to the boundary ")
+ (text . "conditions {\it g(y(a),y(b),\epsilon) = 0}, where \epsilon ")
+ (text . "is the continuation parameter. The choice \epsilon = 0 should ")
+ (text . "define an easy problem to solve and \epsilon = 1 the problem ")
+ (text . "whose solution is required; a sequence of problems is solved ")
+ (text . "with 0 = \htbitmap{ep1} < \htbitmap{ep2} < ... \htbitmap{epp} ")
+ (text . "= 1 where {\it p} and the \htbitmap{epi} are chosen by D02RAF. ")
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the number of differential equations {\it n}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 n PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "The maximum number of points in the mesh {\it mnp}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 40 mnp PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Number of points in the initial mesh {\it np}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 17 np PI))
+ (text . "\blankline ")
+ (text . "\newline \menuitemstyle{}\tab{2} ")
+ (text . "\newline Number of boundary conditions involving y(a) only ")
+ (text . "{\it numbeg}: \newline\tab{2} ")
+ (bcStrings (5 2 numbeg PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "\newline Boundary conditions involving both y(a) and ")
+ (text . "y(b) {\it nummix}: \newline\tab{2} ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 0 nummix PI))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Absolute error tolerance {\it tol}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (10 "1.0e-4" tol F))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Do you wish to use an intial mesh or default values,{\it init} ")
+ (radioButtons init
+ ("" " default values" init_zero)
+ ("" " initial mesh" init_nonZero))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "First dimension of y, {\it iy}: ")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 3 iy PI))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Are JACOBF & JACOBG routines being supplied, {\it ijac}:")
+ (radioButtons ijac
+ ("" " yes" ijac_nonZero)
+ ("" " no" ijac_zero))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Continuation facility {\it deleps}:")
+ (text . "\newline\tab{2} ")
+ (bcStrings (5 "0.1" deleps F))
+ (text . "\newline\tab{2} ")
+ (text . "Note: For 0.0 \htbitmap{great=} deleps > 1.0, continuation ")
+ (text . "is not used. ")
+ (text . "\blankline ")
+ (text . "\newline \tab{2} ")
+ (text . "Ifail is input in three components: ")
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it a} ")
+ (radioButtons afail
+ ("" " 0, hard failure" azero)
+ ("" " 1, soft failure" aone))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it b} ")
+ (radioButtons bfail
+ ("" " 1, print error messages" bone)
+ ("" " 0, suppress error messages" bzero))
+ (text . "\blankline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "{\it c} ")
+ (radioButtons cfail
+ ("" " 1, print warning messages" cone)
+ ("" " 0, suppress warning messages" czero)))
+ htMakeDoneButton('"Continue", 'd02rafSolve)
+ htShowPage()
+
+d02rafSolve htPage ==
+ n :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'n)
+ objValUnwrap htpLabelSpadValue(htPage, 'n)
+ mnp :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'mnp)
+ objValUnwrap htpLabelSpadValue(htPage, 'mnp)
+ np :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'np)
+ objValUnwrap htpLabelSpadValue(htPage, 'np)
+ numbeg :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'numbeg)
+ objValUnwrap htpLabelSpadValue(htPage, 'numbeg)
+ nummix :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'nummix)
+ objValUnwrap htpLabelSpadValue(htPage, 'nummix)
+ tol := htpLabelInputString(htPage,'tol)
+ mesh := htpButtonValue(htPage,'init)
+ init :=
+ mesh = 'init_zero => '0
+ '1
+ iy :=
+ $bcParseOnly => PARSE_-INTEGER htpLabelInputString(htPage, 'iy)
+ objValUnwrap htpLabelSpadValue(htPage, 'iy)
+ jacob := htpButtonValue(htPage,'ijac)
+ ijac :=
+ jacob = 'ijac_zero => '0
+ '1
+ deleps := htpLabelInputString(htPage,'deleps)
+ lwork := mnp*(3*n*n + 6*n +2) +4*n*n + 3*n
+ liwork :=
+ ijac = 0 => mnp*(2*n +1) + n*n + 4*n +2
+ mnp*(2*n +1) + n
+ aerror := htpButtonValue(htPage,'afail)
+ afail :=
+ aerror = 'azero => '0
+ '1
+ berror := htpButtonValue(htPage,'bfail)
+ bfail :=
+ berror = 'bone => '1
+ '0
+ cerror := htpButtonValue(htPage,'cfail)
+ cfail :=
+ cerror = 'cone => '1
+ '0
+ ifail := 100*cfail + 10*bfail + afail
+ (n = '3 and init = '0 and iy = '3 and nummix = '0 and numbeg = '2 and np = '17 and mnp = '40) => d02rafDefaultSolve(htPage,mnp,np,numbeg,nummix,tol,init,iy,ijac,deleps,lwork,liwork,ifail)
+ init = '1 => d02rafCopOut()
+ funcList :=
+ "append"/[fa(i) for i in 1..n] where fa(i) ==
+ prefix := ('"\newline {\em Function f")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ funct := STRCONC ('"Y[",STRINGIMAGE i ,"]")
+ fnam := INTERN STRCONC ('"f",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, funct, fnam, 'EM]]]
+ middle := ('"\blankline \menuitemstyle{} \tab{2} Enter the functions ")
+ middle := STRCONC(middle,'"\htbitmap{gi} below ")
+ middle := STRCONC(middle,'"as functions of YA[i] and YB[i]: \newline ")
+ gList :=
+ "append"/[fb(i) for i in 1..n] where fb(i) ==
+ prefix := ('"\newline {\em Function g")
+ prefix := STRCONC(prefix,STRINGIMAGE i,'":} \space{1}")
+ fnc := STRCONC ('"YA[",STRINGIMAGE i ,"]")
+ gnam := INTERN STRCONC ('"g",STRINGIMAGE i)
+ [['text,:prefix],['bcStrings,[42, fnc, gnam, 'EM]]]
+ gList := [['text,:middle],:gList]
+ mid:= ('"\blankline \menuitemstyle{} \tab{2} Enter the array ")
+ mid := STRCONC(mid,'"{\it x(mnp)}: \newline ")
+ xList :=
+ "append"/[fc(i) for i in 1..mnp] where fc(i) ==
+ xnam := INTERN STRCONC ('"x",STRINGIMAGE i)
+ [['bcStrings,[4, 0, xnam, 'F]]]
+ xList := [['text,:mid],:xList]
+ equationPart := [
+ '(domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain S (String))
+ (isDomain F (Float))
+ (isDomain I (Integer))),
+ :funcList,:gList,:xList]
+ page := htInitPage('"D02RAF - ODEs, general nonlinear boundary value problem, finite difference technique with deferred correction, continuation facility",nil)
+ htSay '"\menuitemstyle{}\tab{2} "
+ htSay '"Enter the functions \htbitmap{fi} (i.e. the derivatives) below "
+ htSay '"as functions of Y[1]...Y[n]: "
+ htSay '"\newline "
+ htMakePage equationPart
+ htMakeDoneButton('"Continue",'d02rafGen)
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'mnp,mnp)
+ htpSetProperty(page,'np,np)
+ htpSetProperty(page,'numbeg,numbeg)
+ htpSetProperty(page,'nummix,nummix)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'init,init)
+ htpSetProperty(page,'iy,iy)
+ htpSetProperty(page,'ijac,ijac)
+ htpSetProperty(page,'deleps,deleps)
+ htpSetProperty(page,'lwork,lwork)
+ htpSetProperty(page,'liwork,liwork)
+ htpSetProperty(page,'ifail,ifail)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+
+d02rafDefaultSolve(htPage,mnp,np,numbeg,nummix,tol,init,iy,ijac,deleps,lwork,liwork,ifail) ==
+ n := '3
+ page := htInitPage('"D02RAF - ODEs, general nonlinear boundary value problem, finite difference technique with deferred correction, continuation facility",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain EM $EmptyMode)
+ (isDomain F (Float))
+ (isDomain I (Integer)))
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions \htbitmap{fi} (i.e. the derivatives) below ")
+ (text . "as functions of Y[1]...Y[n]: ")
+ (text . "\newline {\em Function f1:} \space{1}")
+ (bcStrings (44 "Y[2]" f1 EM))
+ (text . "\newline {\em Function f2:} \space{1}")
+ (bcStrings (44 "Y[3]" f2 EM))
+ (text . "\newline {\em Function f3:} \space{1}")
+ (bcStrings (44 "-Y[1]*Y[3] - 2*EPS*(1-Y[2]*Y[2])" f3 EM))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the functions \htbitmap{gi} below ")
+ (text . "as functions of YA[i] and YB[i]: ")
+ (text . "\newline {\em Function g1:} \space{1}")
+ (bcStrings (44 "YA[1]" g1 EM))
+ (text . "\newline {\em Function g2:} \space{1}")
+ (bcStrings (44 "YA[2]" g2 EM))
+ (text . "\newline {\em Function g3:} \space{1}")
+ (bcStrings (44 "YB[2] -1" g3 EM))
+ (text . "\blankline ")
+ (text . "\newline ")
+ (text . "\menuitemstyle{}\tab{2}")
+ (text . "Enter the array {\it x(mnp)}: \newline ")
+ (bcStrings (4 "0.0" x1 F))
+ (bcStrings (4 "0.0" x2 F))
+ (bcStrings (4 "0.0" x3 F))
+ (bcStrings (4 "0.0" x4 F))
+ (bcStrings (4 "0.0" x5 F))
+ (bcStrings (4 "0.0" x6 F))
+ (bcStrings (4 "0.0" x7 F))
+ (bcStrings (4 "0.0" x8 F))
+ (bcStrings (4 "0.0" x9 F))
+ (bcStrings (4 "0.0" x10 F))
+ (bcStrings (4 "0.0" x11 F))
+ (bcStrings (4 "0.0" x12 F))
+ (bcStrings (4 "0.0" x13 F))
+ (bcStrings (4 "0.0" x14 F))
+ (bcStrings (4 "0.0" x15 F))
+ (bcStrings (4 "0.0" x16 F))
+ (bcStrings (4 "10.0" x17 F))
+ (bcStrings (4 "0.0" x18 F))
+ (bcStrings (4 "0.0" x19 F))
+ (bcStrings (4 "0.0" x20 F))
+ (bcStrings (4 "0.0" x21 F))
+ (bcStrings (4 "0.0" x22 F))
+ (bcStrings (4 "0.0" x23 F))
+ (bcStrings (4 "0.0" x24 F))
+ (bcStrings (4 "0.0" x25 F))
+ (bcStrings (4 "0.0" x26 F))
+ (bcStrings (4 "0.0" x27 F))
+ (bcStrings (4 "0.0" x28 F))
+ (bcStrings (4 "0.0" x29 F))
+ (bcStrings (4 "0.0" x30 F))
+ (bcStrings (4 "0.0" x31 F))
+ (bcStrings (4 "0.0" x32 F))
+ (bcStrings (4 "0.0" x33 F))
+ (bcStrings (4 "0.0" x34 F))
+ (bcStrings (4 "0.0" x35 F))
+ (bcStrings (4 "0.0" x36 F))
+ (bcStrings (4 "0.0" x37 F))
+ (bcStrings (4 "0.0" x38 F))
+ (bcStrings (4 "0.0" x39 F))
+ (bcStrings (4 "0.0" x40 F)))
+ htpSetProperty(page,'n,n)
+ htpSetProperty(page,'mnp,mnp)
+ htpSetProperty(page,'np,np)
+ htpSetProperty(page,'numbeg,numbeg)
+ htpSetProperty(page,'nummix,nummix)
+ htpSetProperty(page,'tol,tol)
+ htpSetProperty(page,'init,init)
+ htpSetProperty(page,'iy,iy)
+ htpSetProperty(page,'ijac,ijac)
+ htpSetProperty(page,'deleps,deleps)
+ htpSetProperty(page,'lwork,lwork)
+ htpSetProperty(page,'liwork,liwork)
+ htpSetProperty(page,'ifail,ifail)
+ htMakeDoneButton('"Continue",'d02rafGen)
+ htpSetProperty(page,'inputArea, htpInputAreaAlist htPage)
+ htShowPage()
+
+d02rafGen htPage ==
+ n := htpProperty(htPage, 'n)
+ mnp := htpProperty(htPage, 'mnp)
+ np := htpProperty(htPage, 'np)
+ numbeg := htpProperty(htPage, 'numbeg)
+ nummix := htpProperty(htPage, 'nummix)
+ tol := htpProperty(htPage, 'tol)
+ init := htpProperty(htPage, 'init)
+ iy := htpProperty(htPage, 'iy)
+ ijac := htpProperty(htPage, 'ijac)
+ deleps := htpProperty(htPage, 'deleps)
+ lwork := htpProperty(htPage, 'lwork)
+ liwork := htpProperty(htPage, 'liwork)
+ ifail := htpProperty(htPage, 'ifail)
+ alist := htpInputAreaAlist htPage
+ y := alist
+ for i in 1..mnp repeat
+ xtemp := STRCONC((first y).1," ")
+ xList := [xtemp,:xList]
+ y := rest y
+ xstring := bcwords2liststring xList
+ for i in 1..n repeat
+ gtemp := STRCONC((first y).1," ")
+ gList := [gtemp,:gList]
+ y := rest y
+ gstring := bcwords2liststring gList
+ while y repeat
+ f := STRCONC((first y).1," ")
+ fList := [f,:fList]
+ y := rest y
+ fstring := bcwords2liststring fList
+ prefix := STRCONC("d02raf(",STRINGIMAGE n,", ",STRINGIMAGE mnp,", ")
+ prefix := STRCONC(prefix,STRINGIMAGE numbeg,", ",STRINGIMAGE nummix,", ")
+ prefix := STRCONC(prefix,tol,", ",STRINGIMAGE init,", ",STRINGIMAGE iy,", ")
+ middle:= STRCONC(STRINGIMAGE ijac,", ",STRINGIMAGE lwork,", ")
+ middle := STRCONC(middle,STRINGIMAGE liwork,", ",STRINGIMAGE np,", [")
+ middle := STRCONC(middle,xstring,"],[[0.0 for i in 1..", STRINGIMAGE mnp)
+ middle := STRCONC(middle,"] for j in 1..",STRINGIMAGE iy,"]")
+ middle := STRCONC(middle,":: Matrix DoubleFloat,",STRINGIMAGE deleps,", ")
+ middle := STRCONC(middle,STRINGIMAGE ifail,", (",fstring,"::Vector ")
+ middle := STRCONC(middle,"Expression Float)::ASP41('FCN,'JACOBF,'JACEPS),(")
+ middle := STRCONC(middle,gstring,"::Vector Expression Float)::ASP42('G,'JACOBG,")
+ middle := STRCONC(middle,"'JACGEP))")
+ linkGen STRCONC(prefix,middle)
+
+
+d02rafCopOut() ==
+ htInitPage('"D02RAF - ODEs, general nonlinear boundary value problem, finite difference technique with deferred correction, continuation facility",nil)
+ htMakePage '(
+ (domainConditions
+ (isDomain PI (PositiveInteger)))
+ (text . "\blankline ")
+ (text . "{\center{\em Hyperdoc interface not available for initial mesh}}")
+ (text . "\newline ")
+ (text . "{\center{\em Please use the command line.}}"))
+ htMakeDoneButton('"Continue",'d02raf)
+ htShowPage()
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}