aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/fortpak.spad.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-09-20 10:17:32 +0000
committerdos-reis <gdr@axiomatics.org>2011-09-20 10:17:32 +0000
commit589f3335fb070375ba16d84859ee00267577f8ab (patch)
tree3cdd6a7ed1686085fb0087ca6e1a8a15d60633df /src/algebra/fortpak.spad.pamphlet
parent255be06767355e3b41acd75990c6b90270b8f2bd (diff)
downloadopen-axiom-589f3335fb070375ba16d84859ee00267577f8ab.tar.gz
* algebra/annacat.spad.pamphlet: Remove.
* algebra/routines.spad.pamphlet: Likewise. * algebra/functions.spad.pamphlet: Likewise. * algebra/tools.spad.pamphlet: Likewise. * algebra/cont.spad.pamphlet: Likewise. * algebra/fortran.spad.pamphlet: Likewise. * algebra/fortmac.spad.pamphlet: Likewise. * algebra/fortpak.spad.pamphlet: Likewise.
Diffstat (limited to 'src/algebra/fortpak.spad.pamphlet')
-rw-r--r--src/algebra/fortpak.spad.pamphlet641
1 files changed, 0 insertions, 641 deletions
diff --git a/src/algebra/fortpak.spad.pamphlet b/src/algebra/fortpak.spad.pamphlet
deleted file mode 100644
index 05d33441..00000000
--- a/src/algebra/fortpak.spad.pamphlet
+++ /dev/null
@@ -1,641 +0,0 @@
-\documentclass{article}
-\usepackage{open-axiom}
-\begin{document}
-\title{\$SPAD/src/algebra fortpak.spad}
-\author{Grant Keady, Godfrey Nolan, Mike Dewar, Themos Tsikas}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{package FCPAK1 FortranCodePackage1}
-<<package FCPAK1 FortranCodePackage1>>=
-)abbrev package FCPAK1 FortranCodePackage1
-++ Author: Grant Keady and Godfrey Nolan
-++ Date Created: April 1993
-++ Date Last Updated:
-++ Basic Operations:
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ \spadtype{FortranCodePackage1} provides some utilities for
-++ producing useful objects in FortranCode domain.
-++ The Package may be used with the FortranCode domain and its
-++ \spad{printCode} or possibly via an outputAsFortran.
-++ (The package provides items of use in connection with ASPs
-++ in the AXIOM-NAG link and, where appropriate, naming accords
-++ with that in IRENA.)
-++ The easy-to-use functions use Fortran loop variables I1, I2,
-++ and it is users' responsibility to check that this is sensible.
-++ The advanced functions use SegmentBinding to allow users control
-++ over Fortran loop variable names.
--- Later might add functions to build
--- diagonalMatrix from List, i.e. the FC version of the corresponding
--- AXIOM function from MatrixCategory;
--- bandedMatrix, i.e. the full-matrix-FC version of the corresponding
--- AXIOM function in BandedMatrix Domain
--- bandedSymmetricMatrix, i.e. the full-matrix-FC version of the corresponding
--- AXIOM function in BandedSymmetricMatrix Domain
-
-FortranCodePackage1: Exports == Implementation where
-
- NNI ==> NonNegativeInteger
- PI ==> PositiveInteger
- PIN ==> Polynomial(Integer)
- SBINT ==> SegmentBinding(Integer)
- SEGINT ==> Segment(Integer)
- LSBINT ==> List(SegmentBinding(Integer))
- SBPIN ==> SegmentBinding(Polynomial(Integer))
- SEGPIN ==> Segment(Polynomial(Integer))
- LSBPIN ==> List(SegmentBinding(Polynomial(Integer)))
- FC ==> FortranCode
- EXPRESSION ==> Union(Expression Integer,Expression Float,Expression Complex Integer,Expression Complex Float)
-
- Exports == with
-
- zeroVector: (Symbol,PIN) -> FC
- ++ zeroVector(s,p) \undocumented{}
-
- zeroMatrix: (Symbol,PIN,PIN) -> FC
- ++ zeroMatrix(s,p,q) uses loop variables in the Fortran, I1 and I2
-
- zeroMatrix: (Symbol,SBPIN,SBPIN) -> FC
- ++ zeroMatrix(s,b,d) in this version gives the user control
- ++ over names of Fortran variables used in loops.
-
- zeroSquareMatrix: (Symbol,PIN) -> FC
- ++ zeroSquareMatrix(s,p) \undocumented{}
-
- identitySquareMatrix: (Symbol,PIN) -> FC
- ++ identitySquareMatrix(s,p) \undocumented{}
-
- Implementation ==> add
- import FC
-
- zeroVector(fname:Symbol,n:PIN):FC ==
- ue:Expression(Integer) := 0
- i1:Symbol := "I1"::Symbol
- lp1:PIN := 1::PIN
- hp1:PIN := n
- segp1:SEGPIN:= segment(lp1,hp1)$SEGPIN
- segbp1:SBPIN := equation(i1,segp1)$SBPIN
- ip1:PIN := i1::PIN
- indices:List(PIN) := [ip1]
- fa:FC := forLoop(segbp1,assign(fname,indices,ue)$FC)$FC
- fa
-
- zeroMatrix(fname:Symbol,m:PIN,n:PIN):FC ==
- ue:Expression(Integer) := 0
- i1:Symbol := "I1"::Symbol
- lp1:PIN := 1::PIN
- hp1:PIN := m
- segp1:SEGPIN:= segment(lp1,hp1)$SEGPIN
- segbp1:SBPIN := equation(i1,segp1)$SBPIN
- i2:Symbol := "I2"::Symbol
- hp2:PIN := n
- segp2:SEGPIN:= segment(lp1,hp2)$SEGPIN
- segbp2:SBPIN := equation(i2,segp2)$SBPIN
- ip1:PIN := i1::PIN
- ip2:PIN := i2::PIN
- indices:List(PIN) := [ip1,ip2]
- fa:FC :=forLoop(segbp1,forLoop(segbp2,assign(fname,indices,ue)$FC)$FC)$FC
- fa
-
- zeroMatrix(fname:Symbol,segbp1:SBPIN,segbp2:SBPIN):FC ==
- ue:Expression(Integer) := 0
- i1:Symbol := variable(segbp1)$SBPIN
- i2:Symbol := variable(segbp2)$SBPIN
- ip1:PIN := i1::PIN
- ip2:PIN := i2::PIN
- indices:List(PIN) := [ip1,ip2]
- fa:FC :=forLoop(segbp1,forLoop(segbp2,assign(fname,indices,ue)$FC)$FC)$FC
- fa
-
- zeroSquareMatrix(fname:Symbol,n:PIN):FC ==
- ue:Expression(Integer) := 0
- i1:Symbol := "I1"::Symbol
- lp1:PIN := 1::PIN
- hp1:PIN := n
- segp1:SEGPIN:= segment(lp1,hp1)$SEGPIN
- segbp1:SBPIN := equation(i1,segp1)$SBPIN
- i2:Symbol := "I2"::Symbol
- segbp2:SBPIN := equation(i2,segp1)$SBPIN
- ip1:PIN := i1::PIN
- ip2:PIN := i2::PIN
- indices:List(PIN) := [ip1,ip2]
- fa:FC :=forLoop(segbp1,forLoop(segbp2,assign(fname,indices,ue)$FC)$FC)$FC
- fa
-
- identitySquareMatrix(fname:Symbol,n:PIN):FC ==
- ue:Expression(Integer) := 0
- u1:Expression(Integer) := 1
- i1:Symbol := "I1"::Symbol
- lp1:PIN := 1::PIN
- hp1:PIN := n
- segp1:SEGPIN:= segment(lp1,hp1)$SEGPIN
- segbp1:SBPIN := equation(i1,segp1)$SBPIN
- i2:Symbol := "I2"::Symbol
- segbp2:SBPIN := equation(i2,segp1)$SBPIN
- ip1:PIN := i1::PIN
- ip2:PIN := i2::PIN
- indice1:List(PIN) := [ip1,ip1]
- indices:List(PIN) := [ip1,ip2]
- fc:FC := forLoop(segbp2,assign(fname,indices,ue)$FC)$FC
- f1:FC := assign(fname,indice1,u1)$FC
- fl:List(FC) := [fc,f1]
- fa:FC := forLoop(segbp1,block(fl)$FC)$FC
- fa
-
-@
-\section{package NAGSP NAGLinkSupportPackage}
-<<package NAGSP NAGLinkSupportPackage>>=
-)abbrev package NAGSP NAGLinkSupportPackage
-++ Author: Mike Dewar and Godfrey Nolan
-++ Date Created: March 1993
-++ Date Last Updated: March 4 1994
-++ October 6 1994
-++ Basic Operations:
-++ Related Domains:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ Examples:
-++ References:
-++ Description: Support functions for the NAG Library Link functions
-NAGLinkSupportPackage() : exports == implementation where
-
- exports ==> with
- fortranCompilerName : () -> String
- ++ fortranCompilerName() returns the name of the currently selected
- ++ Fortran compiler
- fortranLinkerArgs : () -> String
- ++ fortranLinkerArgs() returns the current linker arguments
- aspFilename : String -> String
- ++ aspFilename("f") returns a String consisting of "f" suffixed with
- ++ an extension identifying the current AXIOM session.
- dimensionsOf : (Symbol, Matrix DoubleFloat) -> SExpression
- ++ dimensionsOf(s,m) \undocumented{}
- dimensionsOf : (Symbol, Matrix Integer) -> SExpression
- ++ dimensionsOf(s,m) \undocumented{}
- checkPrecision : () -> Boolean
- ++ checkPrecision() \undocumented{}
- restorePrecision : () -> Void
- ++ restorePrecision() \undocumented{}
-
- implementation ==> add
- makeAs: (Symbol,Symbol) -> Symbol
- changeVariables: (Expression Integer,Symbol) -> Expression Integer
- changeVariablesF: (Expression Float,Symbol) -> Expression Float
-
- import String
- import Symbol
-
- checkPrecision():Boolean ==
- (_$fortranPrecision$Lisp = "single"::Symbol) and (_$nagEnforceDouble$Lisp) =>
- systemCommand("set fortran precision double")$MoreSystemCommands
- if _$nagMessages$Lisp then
- print("*** Warning: Resetting fortran precision to double")$PrintPackage
- true
- false
-
- restorePrecision():Void ==
- systemCommand("set fortran precision single")$MoreSystemCommands
- if _$nagMessages$Lisp then
- print("** Warning: Restoring fortran precision to single")$PrintPackage
-
- uniqueId : String := ""
- counter : Integer := 0
- getUniqueId():String ==
- if uniqueId = "" then
- uniqueId := concat(getEnv("HOST")$Lisp,getEnv("SPADNUM")$Lisp)
- concat(uniqueId,string (counter:=counter+1))
-
- fortranCompilerName() == string _$fortranCompilerName$Lisp
- fortranLinkerArgs() == string _$fortranLibraries$Lisp
-
- aspFilename(f:String):String == concat ["/tmp/",f,getUniqueId(),".f"]
-
- dimensionsOf(u:Symbol,m:Matrix DoubleFloat):SExpression ==
- [u,nrows m,ncols m]$Lisp
- dimensionsOf(u:Symbol,m:Matrix Integer):SExpression ==
- [u,nrows m,ncols m]$Lisp
-
-@
-\section{package FORT FortranPackage}
-<<package FORT FortranPackage>>=
-)abbrev package FORT FortranPackage
-
-++ Author: Mike Dewar
-++ Date Created: October 6 1991
-++ Date Last Updated: 13 July 1994
-++ Basic Operations: linkToFortran
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description: provides an interface to the boot code for calling Fortran
-FortranPackage(): Exports == Implementation where
- FST ==> FortranScalarType
- SEX ==> SExpression
- L ==> List
- S ==> Symbol
- FOP ==> FortranOutputStackPackage
- U ==> Union(array:L S,scalar:S)
-
- Exports ==> with
- linkToFortran: (S, L U, L L U, L S) -> SEX
- ++ linkToFortran(s,l,ll,lv) \undocumented{}
- linkToFortran: (S, L U, L L U, L S, S) -> SEX
- ++ linkToFortran(s,l,ll,lv,t) \undocumented{}
- linkToFortran: (S,L S,TheSymbolTable,L S) -> SEX
- ++ linkToFortran(s,l,t,lv) \undocumented{}
- outputAsFortran: FileName -> Void
- ++ outputAsFortran(fn) \undocumented{}
- setLegalFortranSourceExtensions: List String -> List String
- ++ setLegalFortranSourceExtensions(l) \undocumented{}
-
- Implementation ==> add
-
- legalFortranSourceExtensions : List String := ["f"]
-
- setLegalFortranSourceExtensions(l:List String):List String ==
- legalFortranSourceExtensions := l
-
- checkExtension(fn : FileName) : String ==
- -- Does it end in a legal extension ?
- stringFn := fn::String
- not member?(extension fn,legalFortranSourceExtensions) =>
- error [stringFn,"is not a legal Fortran Source File."]
- stringFn
-
- outputAsFortran(fn:FileName):Void ==
--- source : String := checkExtension fn
- source : String := fn::String
- not readable? fn =>
- popFortranOutputStack()$FOP
- error([source,"is not readable"]@List(String))
- target : String := topFortranOutputStack()$FOP
- command : String :=
- concat(["sys rm -f ",target," ; cp ",source," ",target])$String
- systemCommand(command)$MoreSystemCommands
-
- linkToFortran(name:S,args:L U, decls:L L U, res:L(S)):SEX ==
- makeFort(name,args,decls,res,NIL$Lisp,NIL$Lisp)$Lisp
-
- linkToFortran(name:S,args:L U, decls:L L U, res:L(S),returnType:S):SEX ==
- makeFort(name,args,decls,res,returnType,NIL$Lisp)$Lisp
-
- dimensions(type:FortranType):SEX ==
- convert([convert(convert(u)@InputForm)@SEX _
- for u in dimensionsOf(type)])@SEX
-
- ftype(name:S,type:FortranType):SEX ==
- [name,scalarTypeOf(type),dimensions(type),external? type]$Lisp
-
- makeAspList(asp:S,syms:TheSymbolTable):SExpression==
- symtab : SymbolTable := symbolTableOf(asp,syms)
- [asp,returnTypeOf(asp,syms),argumentListOf(asp,syms), _
- [ftype(u,fortranTypeOf(u,symtab)) for u in parametersOf symtab]]$Lisp
-
- linkToFortran(name:S,aArgs:L S,syms:TheSymbolTable,res:L S):SEX ==
- arguments : L S := argumentListOf(name,syms)$TheSymbolTable
- dummies : L S := setDifference(arguments,aArgs)
- symbolTable:SymbolTable := symbolTableOf(name,syms)
- symbolList := newTypeLists(symbolTable)
- rt:Union(fst: FST,void: "void") := returnTypeOf(name,syms)$TheSymbolTable
-
- -- Look for arguments which are subprograms
- asps :=[makeAspList(u,syms) for u in externalList(symbolTable)$SymbolTable]
- rt case fst =>
- makeFort1(name,arguments,aArgs,dummies,symbolList,res,(rt.fst)::S,asps)$Lisp
- makeFort1(name,arguments,aArgs,dummies,symbolList,res,NIL$Lisp,asps)$Lisp
-
-@
-\section{package FOP FortranOutputStackPackage}
-<<package FOP FortranOutputStackPackage>>=
-)abbrev package FOP FortranOutputStackPackage
-
-++ Author: Mike Dewar
-++ Date Created: October 1992
-++ Date Last Updated:
-++ Basic Operations:
-++ Related Domains:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ Examples:
-++ References:
-++ Description: Code to manipulate Fortran Output Stack
-FortranOutputStackPackage() : specification == implementation where
-
- specification == with
-
- clearFortranOutputStack : () -> Stack String
- ++ clearFortranOutputStack() clears the Fortran output stack
- showFortranOutputStack : () -> Stack String
- ++ showFortranOutputStack() returns the Fortran output stack
- popFortranOutputStack : () -> Void
- ++ popFortranOutputStack() pops the Fortran output stack
- pushFortranOutputStack : FileName -> Void
- ++ pushFortranOutputStack(f) pushes f onto the Fortran output stack
- pushFortranOutputStack : String -> Void
- ++ pushFortranOutputStack(f) pushes f onto the Fortran output stack
- topFortranOutputStack : () -> String
- ++ topFortranOutputStack() returns the top element of the Fortran
- ++ output stack
-
- implementation == add
-
- import MoreSystemCommands
-
- -- A stack of filenames for Fortran output. We are sharing this with
- -- the standard Fortran output code, so want to be a bit careful about
- -- how we interact with what the user does independently. We get round
- -- potential problems by always examining the top element of the stack
- -- before we push. If the user has redirected output then we alter our
- -- top value accordingly.
- fortranOutputStack : Stack String := empty()@(Stack String)
-
- topFortranOutputStack():String == string(_$fortranOutputFile$Lisp)
-
- pushFortranOutputStack(fn:FileName):Void ==
- if empty? fortranOutputStack then
- push!(string(_$fortranOutputFile$Lisp),fortranOutputStack)
- else if not(top(fortranOutputStack)=string(_$fortranOutputFile$Lisp)) then
- pop! fortranOutputStack
- push!(string(_$fortranOutputFile$Lisp),fortranOutputStack)
- push!( fn::String,fortranOutputStack)
- systemCommand concat(["set output fortran quiet ", fn::String])$String
-
- pushFortranOutputStack(fn:String):Void ==
- if empty? fortranOutputStack then
- push!(string(_$fortranOutputFile$Lisp),fortranOutputStack)
- else if not(top(fortranOutputStack)=string(_$fortranOutputFile$Lisp)) then
- pop! fortranOutputStack
- push!(string(_$fortranOutputFile$Lisp),fortranOutputStack)
- push!( fn,fortranOutputStack)
- systemCommand concat(["set output fortran quiet ", fn])$String
-
- popFortranOutputStack():Void ==
- if not empty? fortranOutputStack then pop! fortranOutputStack
- if empty? fortranOutputStack then push!("CONSOLE",fortranOutputStack)
- systemCommand concat(["set output fortran quiet append ",_
- top fortranOutputStack])$String
-
- clearFortranOutputStack():Stack String ==
- fortranOutputStack := empty()@(Stack String)
-
- showFortranOutputStack():Stack String ==
- fortranOutputStack
-
-@
-\section{package TEMUTL TemplateUtilities}
-<<package TEMUTL TemplateUtilities>>=
-)abbrev package TEMUTL TemplateUtilities
-++ Author: Mike Dewar
-++ Date Created: October 1992
-++ Date Last Updated:
-++ Basic Operations:
-++ Related Domains:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ Examples:
-++ References:
-++ Description: This package provides functions for template manipulation
-TemplateUtilities(): Exports == Implementation where
-
- Exports == with
- interpretString : String -> Any
- ++ interpretString(s) treats a string as a piece of AXIOM input, by
- ++ parsing and interpreting it.
- stripCommentsAndBlanks : String -> String
- ++ stripCommentsAndBlanks(s) treats s as a piece of AXIOM input, and
- ++ removes comments, and leading and trailing blanks.
-
- Implementation == add
-
- import InputForm
-
- stripC(s:String,u:String):String ==
- i : Integer := position(u,s,1)
- i = 0 => s
- delete(s,i..)
-
- stripCommentsAndBlanks(s:String):String ==
- trim(stripC(stripC(s,"++"),"--"),char " ")
-
- parse(s:String):InputForm ==
- ncParseFromString(s)$Lisp::InputForm
-
- interpretString(s:String):Any ==
- interpret parse s
-
-@
-\section{package MCALCFN MultiVariableCalculusFunctions}
-<<package MCALCFN MultiVariableCalculusFunctions>>=
-)abbrev package MCALCFN MultiVariableCalculusFunctions
-++ Author: Themos Tsikas, Grant Keady
-++ Date Created: December 1992
-++ Date Last Updated: June 1993
-++ Basic Operations:
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ \spadtype{MultiVariableCalculusFunctions} Package provides several
-++ functions for multivariable calculus.
-++ These include gradient, hessian and jacobian,
-++ divergence and laplacian.
-++ Various forms for banded and sparse storage of matrices are
-++ included.
-MultiVariableCalculusFunctions(S,F,FLAF,FLAS) : Exports == Implementation where
- PI ==> PositiveInteger
- NNI ==> NonNegativeInteger
-
- S: SetCategory
- F: PartialDifferentialRing(S)
- FLAS: FiniteLinearAggregate(S)
- with finiteAggregate
- FLAF: FiniteLinearAggregate(F)
-
- Exports ==> with
- gradient: (F,FLAS) -> Vector F
- ++ \spad{gradient(v,xlist)}
- ++ computes the gradient, the vector of first partial derivatives,
- ++ of the scalar field v,
- ++ v a function of the variables listed in xlist.
- divergence: (FLAF,FLAS) -> F
- ++ \spad{divergence(vf,xlist)}
- ++ computes the divergence of the vector field vf,
- ++ vf a vector function of the variables listed in xlist.
- laplacian: (F,FLAS) -> F
- ++ \spad{laplacian(v,xlist)}
- ++ computes the laplacian of the scalar field v,
- ++ v a function of the variables listed in xlist.
- hessian: (F,FLAS) -> Matrix F
- ++ \spad{hessian(v,xlist)}
- ++ computes the hessian, the matrix of second partial derivatives,
- ++ of the scalar field v,
- ++ v a function of the variables listed in xlist.
- bandedHessian: (F,FLAS,NNI) -> Matrix F
- ++ \spad{bandedHessian(v,xlist,k)}
- ++ computes the hessian, the matrix of second partial derivatives,
- ++ of the scalar field v,
- ++ v a function of the variables listed in xlist,
- ++ k is the semi-bandwidth, the number of nonzero subdiagonals,
- ++ 2*k+1 being actual bandwidth.
- ++ Stores the nonzero band in lower triangle in a matrix,
- ++ dimensions k+1 by #xlist,
- ++ whose rows are the vectors formed by diagonal, subdiagonal, etc.
- ++ of the real, full-matrix, hessian.
- ++ (The notation conforms to LAPACK/NAG-F07 conventions.)
- -- At one stage it seemed a good idea to help the ASP<n> domains
- -- with the types of their input arguments and this led to the
- -- standard Gradient|Hessian|Jacobian functions.
- --standardJacobian: (Vector(F),List(S)) -> Matrix F
- -- ++ \spad{jacobian(vf,xlist)}
- -- ++ computes the jacobian, the matrix of first partial derivatives,
- -- ++ of the vector field vf,
- -- ++ vf a vector function of the variables listed in xlist.
- jacobian: (FLAF,FLAS) -> Matrix F
- ++ \spad{jacobian(vf,xlist)}
- ++ computes the jacobian, the matrix of first partial derivatives,
- ++ of the vector field vf,
- ++ vf a vector function of the variables listed in xlist.
- bandedJacobian: (FLAF,FLAS,NNI,NNI) -> Matrix F
- ++ \spad{bandedJacobian(vf,xlist,kl,ku)}
- ++ computes the jacobian, the matrix of first partial derivatives,
- ++ of the vector field vf,
- ++ vf a vector function of the variables listed in xlist,
- ++ kl is the number of nonzero subdiagonals,
- ++ ku is the number of nonzero superdiagonals,
- ++ kl+ku+1 being actual bandwidth.
- ++ Stores the nonzero band in a matrix,
- ++ dimensions kl+ku+1 by #xlist.
- ++ The upper triangle is in the top ku rows,
- ++ the diagonal is in row ku+1,
- ++ the lower triangle in the last kl rows.
- ++ Entries in a column in the band store correspond to entries
- ++ in same column of full store.
- ++ (The notation conforms to LAPACK/NAG-F07 conventions.)
-
- Implementation ==> add
- localGradient(v:F,xlist:List(S)):Vector(F) ==
- vector([D(v,x) for x in xlist])
- gradient(v,xflas) ==
- --xlist:List(S) := [xflas(i) for i in 1 .. maxIndex(xflas)]
- xlist:List(S) := parts(xflas)
- localGradient(v,xlist)
- localDivergence(vf:Vector(F),xlist:List(S)):F ==
- n: NNI
- ans: F
- -- Perhaps should report error if two args of min different
- n:= min(#(xlist),((maxIndex(vf))::NNI))$NNI
- ans:= 0
- for i in 1 .. n repeat ans := ans + D(vf(i),xlist(i))
- ans
- divergence(vf,xflas) ==
- xlist:List(S) := parts(xflas)
- n: NNI
- ans: F
- -- Perhaps should report error if two args of min different
- n:= min(#(xlist),((maxIndex(vf))::NNI))$NNI
- ans:= 0
- for i in 1 .. n repeat ans := ans + D(vf(i),xlist(i))
- ans
- laplacian(v,xflas) ==
- xlist:List(S) := parts(xflas)
- gv:Vector(F) := localGradient(v,xlist)
- localDivergence(gv,xlist)
- hessian(v,xflas) ==
- xlist:List(S) := parts(xflas)
- matrix([[D(v,[x,y]) for x in xlist] for y in xlist])
- --standardJacobian(vf,xlist) ==
- -- i: PI
- -- matrix([[D(vf(i),x) for x in xlist] for i in 1 .. maxIndex(vf)])
- jacobian(vf,xflas) ==
- xlist:List(S) := parts(xflas)
- matrix([[D(vf(i),x) for x in xlist] for i in 1 .. maxIndex(vf)])
- bandedHessian(v,xflas,k) ==
- xlist:List(S) := parts(xflas)
- n: NNI
- bandM: Matrix F
- n:= #(xlist)
- bandM:= new(k+1,n,0)
- for j in 1 .. n repeat setelt(bandM,1,j,D(v,xlist(j),2))
- for iw in 2 .. (k+1) repeat (_
- for j in 1 .. (n-iw+1) repeat (_
- setelt(bandM,iw,j,D(v,[xlist(j),xlist(j+iw-1)])) ) )
- bandM
- bandedJacobian(vf,xflas,kl,ku) ==
- xlist:List(S) := parts(xflas)
- n: NNI
- bandM: Matrix F
- n:= #(xlist)
- bandM:= new(kl+ku+1,n,0)
- for j in 1 .. n repeat setelt(bandM,ku+1,j,D(vf(j),xlist(j)))
- for iw in (ku+2) .. (ku+kl+1) repeat (_
- for j in 1 .. (n-iw+ku+1) repeat (_
- setelt(bandM,iw,j,D(vf(j+iw-1-ku),xlist(j))) ) )
- for iw in 1 .. ku repeat (_
- for j in (ku+2-iw) .. n repeat (_
- setelt(bandM,iw,j,D(vf(j+iw-1-ku),xlist(j))) ) )
- bandM
-
-@
-\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>>
-
-<<package FCPAK1 FortranCodePackage1>>
-<<package NAGSP NAGLinkSupportPackage>>
-<<package FORT FortranPackage>>
-<<package FOP FortranOutputStackPackage>>
-<<package TEMUTL TemplateUtilities>>
-<<package MCALCFN MultiVariableCalculusFunctions>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}