Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

dlpdoc(varargin)
function dlpdoc(varargin)
%***BEGIN PROLOGUE  DLPDOC
%***PURPOSE  Sparse Linear Algebra Package Version 2.0.2 Documentation.
%            Routines to solve large sparse symmetric and nonsymmetric
%            positive definite linear systems, Ax = b, using precondi-
%            tioned iterative methods.
%***LIBRARY   SLATEC (SLAP)
%***CATEGORY  D2A4, D2B4, Z
%***TYPE      doubleprecision (SLPDOC-S, DLPDOC-D)
%***KEYWORDS  BICONJUGATE GRADIENT SQUARED, DOCUMENTATION,
%             GENERALIZED MINIMUM RESIDUAL, ITERATIVE IMPROVEMENT,
%             NORMAL EQUATIONS, ORTHOMIN,
%             PRECONDITIONED CONJUGATE GRADIENT, SLAP,
%             SPARSE ITERATIVE METHODS
%***AUTHOR  Seager, Mark. K., (LLNL)
%             User Systems Division
%             Lawrence Livermore National Laboratory
%             PO BOX 808, L-60
%             Livermore, CA 94550
%             (FTS) 543-3141, (510) 423-3141
%             seager@llnl.gov
%***DESCRIPTION
%                                 The
%                    Sparse Linear Algebra Package
%                      doubleprecision Routines
%
%                @@@@@@@  @            @@@    @@@@@@@@
%               @       @ @           @   @   @       @
%               @         @          @     @  @       @
%                @@@@@@@  @         @       @ @@@@@@@@
%                       @ @         @@@@@@@@@ @
%               @       @ @         @       @ @
%                @@@@@@@  @@@@@@@@@ @       @ @
%
%      @       @                            @@@@@@@        @@@@@
%      @       @                           @       @      @    @@
%      @       @  @@@@@@@  @ @@                    @     @    @  @
%      @       @ @       @ @@  @             @@@@@@      @   @   @
%       @     @  @@@@@@@@@ @                @            @  @    @
%        @   @   @         @               @         @@@  @@    @
%         @@@     @@@@@@@  @               @@@@@@@@@ @@@   @@@@@
%
%
%    =================================================================
%    ========================== Introduction =========================
%    =================================================================
%      This package was  originally derived from a set of  iterative
%      routines written by Anne Greenbaum, as announced in 'Routines
%      for Solving Large Sparse Linear Systems',  Tentacle, Lawrence
%      Livermore  National  Laboratory,  Livermore  Computing Center
%      (January 1986), pp 15-21.
%
%    This document  contains the specifications for  the  SLAP Version
%    2.0 package, a Fortran 77  package  for  the  solution  of  large
%    sparse   linear systems, Ax  =  b,  via  preconditioned iterative
%    methods.   Included in  this  package are 'core'  routines  to do
%    Iterative   Refinement  (Jacobi's  method),  Conjugate  Gradient,
%    Conjugate Gradient on the normal equations, AA'y = b,  (where x =
%    A'y and  A' denotes the  transpose of   A), BiConjugate Gradient,
%    BiConjugate  Gradient  Squared, Orthomin and  Generalized Minimum
%    Residual Iteration.    These 'core' routines   do  not  require a
%    'fixed'   data  structure   for storing  the   matrix  A  and the
%    preconditioning   matrix  M.   The  user  is free  to  choose any
%    structure that facilitates  efficient solution  of the problem at
%    hand.  The drawback  to this approach  is that the user must also
%    supply at least two routines  (MATVEC and MSOLVE,  say).   MATVEC
%    must calculate, y = Ax, given x and the user's data structure for
%    A.  MSOLVE must solve,  r = Mz, for z (*NOT*  r) given r  and the
%    user's data  structure for  M (or its  inverse).  The user should
%    choose M so that  inv(M)*A  is approximately the identity and the
%    solution step r = Mz is 'easy' to  solve.  For some of the 'core'
%    routines (Orthomin,  BiConjugate Gradient and  Conjugate Gradient
%    on the  normal equations)   the user must  also  supply  a matrix
%    transpose times   vector  routine  (MTTVEC,  say)  and (possibly,
%    depending    on the 'core'  method)   a  routine  that solves the
%    transpose  of   the   preconditioning    step     (MTSOLV,  say).
%    Specifically, MTTVEC is a routine which calculates y = A'x, given
%    x and the user's data structure for A (A' is the transpose of A).
%    MTSOLV is a routine which solves the system r = M'z for z given r
%    and the user's data structure for M.
%
%    This process of writing the matrix vector operations  can be time
%    consuming and error  prone.  To alleviate  these problems we have
%    written drivers   for  the  'core' methods  that  assume the user
%    supplies one of two specific data structures (SLAP Triad and SLAP
%    Column format), see  below.  Utilizing these  data structures  we
%    have augmented   each  'core' method  with   two preconditioners:
%    Diagonal  Scaling and Incomplete Factorization.  Diagonal scaling
%    is easy to implement, vectorizes very  well and for problems that
%    are  not too  ill-conditioned  reduces the  number  of iterations
%    enough   to warrant its use.  On   the other  hand, an Incomplete
%    factorization  (Incomplete  Cholesky for  symmetric systems   and
%    Incomplete LU for nonsymmetric  systems) may  take much longer to
%    calculate, but it reduces the iteration count (for most problems)
%    significantly.  Our implementations  of IC and ILU  vectorize for
%    machines with hardware gather scatter, but the vector lengths can
%    be quite short if  the  number  of non-zeros  in a column is  not
%    large.
%
%    =================================================================
%    ==================== Supplied Data Structures ===================
%    =================================================================
%    The following describes the data   structures supplied  with  the
%    package: SLAP Triad and Column formats.
%
%    ====================== S L A P Triad format =====================
%
%    In the SLAP Triad format only the non-zeros are stored.  They may
%    appear in *ANY* order.  The user supplies three  arrays of length
%    NELT, where NELT  is the   number of  non-zeros  in the   matrix:
%    (IA(NELT),  JA(NELT), A(NELT)).  If  the matrix is symmetric then
%    one need only store the lower triangle (including  the  diagonal)
%    and NELT would be the corresponding  number  of non-zeros stored.
%    For each non-zero the user puts the row and column  index of that
%    matrix  element   in the  IA  and JA  arrays.  The  value  of the
%    non-zero matrix element is placed  in  the corresponding location
%    of  the A array.   This  is an extremely  easy  data structure to
%    generate.  On the other hand, it is not very  efficient on vector
%    computers for the iterative  solution of  linear systems.  Hence,
%    SLAP changes this input data structure to  the SLAP Column format
%    for the iteration (but does not change it back).
%
%    Here  is an example   of  the  SLAP  Triad storage  format  for a
%    nonsymmetric 5x5 Matrix.  NELT=11.   Recall that the  entries may
%    appear in any order.
%
%     5x5 Matrix       SLAP Triad format for 5x5 matrix on left.
%                           1  2  3  4  5  6  7  8  9 10 11
%    |11 12  0  0 15|   A: 51 12 11 33 15 53 55 22 35 44 21
%    |21 22  0  0  0|  IA:  5  1  1  3  1  5  5  2  3  4  2
%    | 0  0 33  0 35|  JA:  1  2  1  3  5  3  5  2  5  4  1
%    | 0  0  0 44  0|
%    |51  0 53  0 55|
%
%    ====================== S L A P Column format ====================
%
%    In the SLAP Column format  the non-zeros are stored counting down
%    columns (except for the  diagonal entry,  which must appear first
%    in each 'column') and are stored in the doubleprecision array A.
%    In  other words,  for each  column  in the matrix  first put  the
%    diagonal  entry  in A.  Then  put in the other  non-zero elements
%    going  down the column  (except the  diagonal)  in order.  The IA
%    array holds the row index  for each non-zero.  The JA array holds
%    the  offsets  into the  IA, A  arrays for the  beginning of  each
%    column. That is, IA(JA(ICOL)), A(JA(ICOL)) are the first elements
%    of  the  ICOL-th  column  in  IA  and  A,  and  IA(JA(ICOL+1)-1),
%    A(JA(ICOL+1)-1) are the last elements of the ICOL-th column. Note
%    that we  always have  JA(N+1) = NELT+1, where  N is the number of
%    columns in the matrix  and NELT is the number of non-zeros in the
%    matrix.  If the matrix is symmetric one need only store the lower
%    triangle  (including the diagonal)  and NELT would be the  corre-
%    sponding number of non-zeros stored.
%
%    Here is  an  example of the  SLAP   Column storage format  for  a
%    nonsymmetric 5x5 Matrix (in the  A and  IA arrays '|' denotes the
%    end of a column):
%
%       5x5 Matrix      SLAP Column format for 5x5 matrix on left.
%                           1  2  3    4  5    6  7    8    9 10 11
%    |11 12  0  0 15|   A: 11 21 51 | 22 12 | 33 53 | 44 | 55 15 35
%    |21 22  0  0  0|  IA:  1  2  5 |  2  1 |  3  5 |  4 |  5  1  3
%    | 0  0 33  0 35|  JA:  1  4  6    8  9   12
%    | 0  0  0 44  0|
%    |51  0 53  0 55|
%
%    =================================================================
%    ====================== Which Method To Use ======================
%    =================================================================
%
%                          BACKGROUND
%    In solving a large sparse linear system Ax = b using an iterative
%    method, it   is  not necessary to actually   store  the matrix A.
%    Rather, what is needed is a procedure  for multiplying the matrix
%    A times a given vector y to obtain the matrix-vector product, Ay.
%    SLAP has been written to take advantage of this fact.  The higher
%    level routines in the package require storage only of the non-zero
%    elements of   A (and  their  positions), and  even this   can  be
%    avoided, if the  user  writes his own subroutine for  multiplying
%    the matrix times a vector  and   calls the lower-level  iterative
%    routines in the package.
%
%    If  the matrix A is ill-conditioned,  then most iterative methods
%    will be slow to converge (if they converge  at all!).  To improve
%    the  convergence  rate,  one  may use  a 'matrix  splitting,' or,
%    'preconditioning matrix,' say, M.  It is then necessary to solve,
%    at each iteration, a linear system  with coefficient matrix M.  A
%    good preconditioner  M should have  two  properties: (1) M should
%    'approximate' A, in the sense that the  matrix inv(M)*A  (or some
%    variant  thereof) is better conditioned  than the original matrix
%    A; and  (2) linear  systems with coefficient  matrix M should  be
%    much easier  to solve  than  the original system with coefficient
%    matrix   A.   Preconditioning routines  in the   SLAP package are
%    separate from the  iterative   routines,  so   that any of    the
%    preconditioners provided in the package,   or one that the   user
%    codes himself, can be used with any of the iterative routines.
%
%                        CHOICE OF PRECONDITIONER
%    If you  willing   to live with   either the SLAP Triad or  Column
%    matrix data structure  you  can then  choose one  of two types of
%    preconditioners   to   use:   diagonal  scaling    or  incomplete
%    factorization.  To  choose   between these two   methods requires
%    knowing  something  about the computer you're going  to run these
%    codes on  and how well incomplete factorization  approximates the
%    inverse of your matrix.
%
%    Let us  suppose you have   a scalar  machine.   Then,  unless the
%    incomplete factorization is very,  very poor this  is *GENERALLY*
%    the method to choose.  It  will reduce the  number of  iterations
%    significantly and is not all  that expensive  to compute.  So  if
%    you have just one  linear system to solve  and  'just want to get
%    the job  done' then try  incomplete factorization first.   If you
%    are thinking of integrating some SLAP  iterative method into your
%    favorite   'production  code' then  try incomplete  factorization
%    first,  but  also check  to see that  diagonal  scaling is indeed
%    slower for a large sample of test problems.
%
%    Let us now suppose  you have  a  vector  computer  with  hardware
%    gather/scatter support (Cray X-MP, Y-MP, SCS-40 or Cyber 205, ETA
%    10,  ETA Piper,  Convex C-1,  etc.).   Then  it is much harder to
%    choose  between the  two  methods.   The  versions  of incomplete
%    factorization in SLAP do in fact vectorize, but have short vector
%    lengths and the factorization step is relatively  more expensive.
%    Hence,  for  most problems (i.e.,  unless  your  problem  is  ill
%    conditioned,  sic!)  diagonal  scaling is  faster,  with its very
%    fast    set up  time    and  vectorized  (with   long    vectors)
%    preconditioning step (even though  it  may take more iterations).
%    If you have several systems (or  right hand sides) to  solve that
%    can  utilize  the  same  preconditioner  then the   cost   of the
%    incomplete factorization can   be  amortized over these  several
%    solutions.  This situation gives more advantage to the incomplete
%    factorization methods.  If  you have  a  vector  machine  without
%    hardware  gather/scatter (Cray  1,  Cray  2Cray 3) then  the
%    advantages for incomplete factorization are even less.
%
%    If you're trying to shoehorn SLAP into your  favorite "production
%    code' and can not easily generate either the SLAP Triad or Column
%    format  then  you are  left  to   your  own  devices in terms  of
%    preconditioning.  Also,  you may  find that the   preconditioners
%    supplied with SLAP are not sufficient  for your problem.  In this
%    situation we would  recommend  that you   talk  with a  numerical
%    analyst  versed in   iterative   methods   about   writing  other
%    preconditioning  subroutines (e.g.,  polynomial  preconditioning,
%    shifted incomplete factorization,  SOR  or SSOR  iteration).  You
%    can always 'roll your own'  by using the 'core' iterative methods
%    and supplying your own MSOLVE and MATVEC (and possibly MTSOLV and
%    MTTVEC) routines.
%
%                          SYMMETRIC SYSTEMS
%    If your matrix is symmetric then you would want to use one of the
%    symmetric system  solvers.    If  your  system  is  also positive
%    definite,   (Ax,x) (Ax dot  product  with x) is  positive for all
%    non-zero  vectors x,  then use   Conjugate Gradient (DCG,  DSDCG,
%    DSICSG).  If you're  not sure it's SPD   (symmetric and  Positive
%    Definite)  then try DCG anyway and  if it works, fine.  If you're
%    sure your matrix is not  positive definite  then you  may want to
%    try the iterative refinement   methods  (DIR)  or the  GMRES code
%    (DGMRES) if DIR converges too slowly.
%
%                         NONSYMMETRIC SYSTEMS
%    This   is currently  an  area  of  active research  in  numerical
%    analysis  and   there   are   new  strategies  being   developed.
%    Consequently take the following advice with a grain of salt.   If
%    you matrix is positive definite, (Ax,x)  (Ax  dot product  with x
%    is positive for all non-zero  vectors x), then you can use any of
%    the    methods   for   nonsymmetric   systems (Orthomin,   GMRES,
%    BiConjugate Gradient, BiConjugate Gradient  Squared and Conjugate
%    Gradient applied to the normal equations).  If your system is not
%    too ill conditioned then try  BiConjugate Gradient Squared (BCGS)
%    or GMRES (DGMRES).  Both  of  these methods converge very quickly
%    and do  not require A'  or M' ('  denotes transpose) information.
%    DGMRES  does require  some  additional storage,  though.  If  the
%    system is very  ill conditioned  or   nearly positive  indefinite
%    ((Ax,x) is positive,  but may be  very small),  then GMRES should
%    be the first choice,  but try the  other  methods  if you have to
%    fine tune  the solution process for a  'production code'.  If you
%    have a great preconditioner for the normal  equations (i.e., M is
%    an approximation to the inverse of AA' rather than  just  A) then
%    this is not a bad route to travel.  Old wisdom would say that the
%    normal equations are a disaster  (since it squares the  condition
%    number of the system and DCG convergence is linked to this number
%    of    infamy), but   some     preconditioners    (like incomplete
%    factorization) can reduce the condition number back below that of
%    the original system.
%
%    =================================================================
%    ======================= Naming Conventions ======================
%    =================================================================
%    SLAP  iterative  methods,    matrix vector    and  preconditioner
%    calculation  routines   follow a naming   convention  which, when
%    understood, allows one to determine the iterative method and data
%    structure(s) used.  The  subroutine  naming convention  takes the
%    following form:
%                          P[S][M]DESC
%    where
%        P  stands for the precision (or data type) of the routine and
%           is required in all names,
%        S  denotes whether or not the routine requires the SLAP Triad
%           or Column format (it does if the second letter of the name
%           is S and does not otherwise),
%        M  stands for the type of preconditioner used (only appears
%           in drivers for 'core' routines), and
%     DESC  is some number of letters describing the method or purpose
%           of the routine.  The following is a list of the 'DESC'
%           fields for iterative methods and their meaning:
%             BCG,BC:       BiConjugate Gradient
%             CG:           Conjugate Gradient
%             CGN,CN:       Conjugate Gradient on the Normal equations
%             CGS,CS:       biConjugate Gradient Squared
%             GMRES,GMR,GM: Generalized Minimum RESidual
%             IR,R:         Iterative Refinement
%             JAC:          JACobi's method
%             GS:           Gauss-Seidel
%             OMN,OM:       OrthoMiN
%
%    In the doubleprecision version of SLAP, all routine names start
%    with a D. The brackets around the S and M designate that these
%    fields are optional.
%
%    Here are some examples of the routines:
%    1) DBCG: doubleprecision BiConjugate Gradient 'core' routine.
%       One can deduce that this is a 'core' routine, because the S and
%       M fields are missing and BiConjugate Gradient is an iterative
%       method.
%    2) DSDBCG: doubleprecision, SLAP data structure BCG with Diagonal
%       scaling.
%    3) DSLUBC: doubleprecision, SLAP data structure BCG with incom-
%       plete LU factorization as the preconditioning.
%    4) DCG: doubleprecision Conjugate Gradient 'core' routine.
%    5) DSDCG: doubleprecision, SLAP data structure Conjugate Gradient
%       with Diagonal scaling.
%    6) DSICCG: doubleprecision, SLAP data structure Conjugate Gra-
%       dient with Incomplete Cholesky factorization preconditioning.
%
%
%    =================================================================
%    ===================== USER CALLABLE ROUTINES ====================
%    =================================================================
%    The following is a list of  the 'user callable' SLAP routines and
%    their one line descriptions.  The headers denote  the  file names
%    where the routines can be found, as distributed for UNIX systems.
%
%    Note:  Each core routine, DXXX, has a corresponding stop routine,
%         ISDXXX.  If the stop routine does not have the specific stop
%         test the user requires (e.g., weighted infinity norm),  then
%         the user should modify the source for ISDXXX accordingly.
%
%    ============================= dir.f =============================
%    DIR: Preconditioned Iterative Refinement Sparse Ax = b Solver.
%    DSJAC: Jacobi's Method Iterative Sparse Ax = b Solver.
%    DSGS: Gauss-Seidel Method Iterative Sparse Ax = b Solver.
%    DSILUR: Incomplete LU Iterative Refinement Sparse Ax = b Solver.
%
%    ============================= dcg.f =============================
%    DCG: Preconditioned Conjugate Gradient Sparse Ax=b Solver.
%    DSDCG: Diagonally Scaled Conjugate Gradient Sparse Ax=b Solver.
%    DSICCG: Incomplete Cholesky Conjugate Gradient Sparse Ax=b Solver.
%
%    ============================= dcgn.f ============================
%    DCGN: Preconditioned CG Sparse Ax=b Solver for Normal Equations.
%    DSDCGN: Diagonally Scaled CG Sparse Ax=b Solver for Normal Eqn's.
%    DSLUCN: Incomplete LU CG Sparse Ax=b Solver for Normal Equations.
%
%    ============================= dbcg.f ============================
%    DBCG: Preconditioned BiConjugate Gradient Sparse Ax = b Solver.
%    DSDBCG: Diagonally Scaled BiConjugate Gradient Sparse Ax=b Solver.
%    DSLUBC: Incomplete LU BiConjugate Gradient Sparse Ax=b Solver.
%
%    ============================= dcgs.f ============================
%    DCGS: Preconditioned BiConjugate Gradient Squared Ax=b Solver.
%    DSDCGS: Diagonally Scaled CGS Sparse Ax=b Solver.
%    DSLUCS: Incomplete LU BiConjugate Gradient Squared Ax=b Solver.
%
%    ============================= domn.f ============================
%    DOMN: Preconditioned Orthomin Sparse Iterative Ax=b Solver.
%    DSDOMN: Diagonally Scaled Orthomin Sparse Iterative Ax=b Solver.
%    DSLUOM: Incomplete LU Orthomin Sparse Iterative Ax=b Solver.
%
%    ============================ dgmres.f ===========================
%    DGMRES: Preconditioned GMRES Iterative Sparse Ax=b Solver.
%    DSDGMR: Diagonally Scaled GMRES Iterative Sparse Ax=b Solver.
%    DSLUGM: Incomplete LU GMRES Iterative Sparse Ax=b Solver.
%
%    ============================ dmset.f ============================
%       The following routines are used to set up preconditioners.
%
%    DSDS: Diagonal Scaling Preconditioner SLAP Set Up.
%    DSDSCL: Diagonally Scales/Unscales a SLAP Column Matrix.
%    DSD2S: Diagonal Scaling Preconditioner SLAP Normal Eqns Set Up.
%    DS2LT: Lower Triangle Preconditioner SLAP Set Up.
%    DSICS: Incomplete Cholesky Decomp. Preconditioner SLAP Set Up.
%    DSILUS: Incomplete LU Decomposition Preconditioner SLAP Set Up.
%
%    ============================ dmvops.f ===========================
%       Most of the incomplete  factorization  (LL' and LDU) solvers
%       in this  file require an  intermediate routine  to translate
%       from the SLAP MSOLVE(N, R, Z, NELT, IA,  JA, A, ISYM, RWORK,
%       IWORK) calling  convention to the calling  sequence required
%       by  the solve routine.   This generally  is  accomplished by
%       fishing out pointers to the preconditioner (stored in RWORK)
%       from the  IWORK  array and then making a call to the routine
%       that actually does the backsolve.
%
%    DSMV: SLAP Column Format Sparse Matrix Vector Product.
%    DSMTV: SLAP Column Format Sparse Matrix (transpose) Vector Prod.
%    DSDI: Diagonal Matrix Vector Multiply.
%    DSLI: SLAP MSOLVE for Lower Triangle Matrix (set up for DSLI2).
%    DSLI2: Lower Triangle Matrix Backsolve.
%    DSLLTI: SLAP MSOLVE for LDL' (IC) Fact. (set up for DLLTI2).
%    DLLTI2: Backsolve routine for LDL' Factorization.
%    DSLUI: SLAP MSOLVE for LDU Factorization (set up for DSLUI2).
%    DSLUI2: SLAP Backsolve for LDU Factorization.
%    DSLUTI: SLAP MTSOLV for LDU Factorization (set up for DSLUI4).
%    DSLUI4: SLAP Backsolve for LDU Factorization.
%    DSMMTI: SLAP MSOLVE for LDU Fact of Normal Eq (set up for DSMMI2).
%    DSMMI2: SLAP Backsolve for LDU Factorization of Normal Equations.
%
%    =========================== dlaputil.f ==========================
%       The following utility routines are useful additions to SLAP.
%
%    DBHIN: Read Sparse Linear System in the Boeing/Harwell Format.
%    DCHKW: SLAP WORK/IWORK Array Bounds Checker.
%    DCPPLT: Printer Plot of SLAP Column Format Matrix.
%    DS2Y: SLAP Triad to SLAP Column Format Converter.
%    QS2I1D: Quick Sort Integer array, moving integer and DP arrays.
%            (Used by DS2Y.)
%    DTIN: Read in SLAP Triad Format Linear System.
%    DTOUT: Write out SLAP Triad Format Linear System.
%
%
%***REFERENCES  1. Mark K. Seager, A SLAP for the Masses, in
%                  G. F. Carey, Ed., Parallel Supercomputing: Methods,
%                  Algorithms and Applications, Wiley, 1989, pp.135-155.
%***ROUTINES CALLED  (NONE)
%***REVISION HISTORY  (YYMMDD)
%   890404  DATE WRITTEN
%   890404  Previous REVISION DATE
%   890915  Made changes requested at July 1989 CML Meeting.  (MKS)
%   890921  Removed TeX from comments.  (FNF)
%   890922  Numerous changes to prologue to make closer to SLATEC
%           standard.  (FNF)
%   890929  Numerous changes to reduce SP/DP differences.  (FNF)
%           -----( This produced Version 2.0.1. )-----
%   891003  Rearranged list of user callable routines to agree with
%           order in source deck.  (FNF)
%   891004  Updated reference.
%   910411  Prologue converted to Version 4.0 format.  (BAB)
%           -----( This produced Version 2.0.2. )-----
%   910506  Minor improvements to prologue.  (FNF)
%   920511  Added complete declaration section.  (WRB)
%   920929  Corrected format of reference.  (FNF)
%   921019  Improved one-line descriptions, reordering some.  (FNF)
%***end PROLOGUE  DLPDOC
%***FIRST EXECUTABLE STATEMENT  DLPDOC
%
%     This is a *DUMMY* subroutine and should never be called.
%
%------------- LAST LINE OF DLPDOC FOLLOWS -----------------------------

end
%DECK DLPDP

Contact us at files@mathworks.com