TEST_CON
Continuation Tests
TEST_CON
is a FORTRAN90 library which
defines test functions for continuation codes.
A simple continuation code is an algorithm
for producing a sequence of solutions of the system of equations
F(X) = 0, where there are fewer equations F than variables X.
Commonly, there is one more variable than equation, resulting in
one degree of freedom. The set of solutions will then generally
describe a curve.
A continuation code might carry out the following steps:
-
choose a problem by picking an index number.
-
for problems with several options, pick an option index.
-
find out the number of variables.
-
get a starting point X0.
-
get a suggested stepsize H.
-
get the tangent vector T at X0.
-
use the estimate X1=X0+H*T as a starting point for
a new point on the curve; use Newton method to refine the estimate.
-
If the Newton iteration failed, reduce H and try again.
-
If the new point was computed "easily", increase H.
-
Go back to step 6 if another point is desired.
TEST_CON includes routines to
-
return the number of problems available (p00_problem_num);
-
return the number of different "options" for each problem (p00_option_num);
-
return the problem size NVAR (p00_nvar);
-
provide a starting point X0 (p00_start);
-
provide a suggested stepsize H (p00_stepsize);
-
determine the tangent vector T(X) (p00_tan);
-
apply Newton's method to an approximate solution (p00_newton);
-
take a single continuation step (compute the "next" point) (p00_step);
-
compute a target point, for which one component has a selected value
(p00_target);
-
choose the continuation parameter index (p00_par_index);
-
evaluate the function F(X) (p00_fun);
-
evaluate the jacobian J(X) (p00_problem_jac);
-
return the problem title (p00_title);
The list of problems includes:
-
The Freudenstein-Roth function
-
The Boggs function
-
The Powell function
-
The Broyden function
-
The Wacker function
-
The Aircraft stability function
-
The Cell kinetic function
-
The Riks mechanical problem
-
The Oden mechanical problem
-
Torsion of a square rod, finite difference solution
-
Torsion of a square rod, finite element solution
-
The materially nonlinear problem
-
Simpson's mildly nonlinear boundary value problem
-
Keller's boundary value problem
-
The Trigger Circuit
-
The Moore-Spence Chemical Reaction Integral Equation
-
The Bremermann Propane Combustion System
-
The semiconductor problem
-
The Nitric acid absorption flash
-
The Buckling Spring
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
TEST_CON is available in
a FORTRAN90 version and
a MATLAB version.
Related Data and Programs:
CONTINUATION,
a MATLAB library which
implements the continuation method for a simple 2D problem,
which involves finding a point on the unit circle, and then
finding a sequence of nearby points which trace out the full
curve, using only the information available in the implicit
definition of the curve from the function f(x,y)=x^2+y^2-1.
PITCON66,
a FORTRAN77 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this is version 6.6 of ACM TOMS algorithm 596.
PITCON7,
a FORTRAN90 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this is version 7.0 of ACM TOMS algorithm 596.
TEST_CON,
a dataset directory which
contains sequences of points that lie on multidimensional curves defined by
sets of nonlinear equations;
TOMS502,
a FORTRAN77 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this library is commonly called DERPAR;
this is ACM TOMS algorithm 502.
TOMS596,
a FORTRAN77 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this library is commonly called PITCON;
this is ACM TOMS algorithm 596.
Reference:
-
Ivo Babuska, Werner Rheinboldt,
Reliable Error Estimations and Mesh Adaptation for the Finite
Element Method,
in International Conference on Computational Methods
in Nonlinear Mechanics,
edited by John Oden,
Elsevier, 1980,
ISBN: 0444853820,
LC: QA808.I57.
-
Paul Boggs,
The Solution of Nonlinear Systems by A-stable
Integration Techniques,
SIAM Journal on Numerical Analysis,
Volume 8, Number 4, December 1971, pages 767-785.
-
Hans Bremermann,
Calculation of Equilibrium Points for Models of Ecological and
Chemical Systems,
in Proceedings of a Conference on the Applications of Undergraduate
Mathematics in the Engineering, Life, Managerial
and Social Sciences,
Georgia Institute of Technology, June 1973, pages 198-217.
-
Charles Broyden,
A New Method of Solving Nonlinear Simultaneous Equations,
The Computer Journal,
Volume 12, 1969, pages 94-99.
-
Tama Copeman,
Air Products and Chemicals, Inc.
Box 538,
Allentown, Pennsylvania, 18105.
-
Cor denHeijer, Werner Rheinboldt,
On Steplength Algorithms for a Class of Continuation Methods,
SIAM Journal on Numerical Analysis,
Volume 18, Number 5, October 1981, pages 925-947.
-
Ferdinand Freudenstein, Bernhard Roth,
Numerical Solutions of Nonlinear Equations,
Journal of the ACM,
Volume 10, Number 4, October 1963, pages 550-556.
-
Kathie Hiebert,
A Comparison of Software Which Solves Systems of Nonlinear
Equations,
Technical Report SAND-80-0181,
Sandia National Laboratory, 1980.
-
Herbert Keller,
Numerical Methods for Two-point Boundary Value Problems,
Dover, 1992,
ISBN: 0486669254,
LC: QA372.K42.
-
Raman Mehra, William Kessel, James Carroll,
Global stability and contral analysis of aircraft at high angles of attack,
Technical Report CR-215-248-1, -2, -3,
Office of Naval Research, June 1977.
-
Rami Melhem, Werner Rheinboldt,
A Comparison of Methods for Determining Turning Points of Nonlinear Equations,
Computing,
Volume 29, Number 3, September 1982, pages 201-226.
-
Gerald Moore, Alastair Spence,
The Calculation of Turning Points of Nonlinear Equations,
SIAM Journal on Numerical Analysis,
Volume 17, Number 4, August 1980, pages 567-576.
-
John Oden,
Finite Elements of Nonlinear Continua,
Dover, 2006,
ISBN: 0486449734,
LC: QA808.2.O33.
-
Gerd Poenisch, Hubert Schwetlick,
Computing Turning Points of Curves Implicitly Defined by Nonlinear
Equations Depending on a Parameter,
Computing,
Volume 26, Number 2, June 1981, pages 107-121.
-
SJ Polak, A Wachten, H Vaes, A deBeer, Cor denHeijer,
A Continuation Method for the Calculation of Electrostatic
Potentials in Semiconductors,
Technical Report ISA-TIS/CARD,
NV Philips Gloeilampen-Fabrieken, 1979.
-
Tim Poston, Ian Stewart,
Catastrophe Theory and its Applications,
Dover, 1996,
ISBN13: 978-0486692715,
LC: QA614.58.P66.
-
Michael Powell,
A Fortran Subroutine for Solving Systems of Nonlinear
Algebraic Equations,
in Numerical Methods for Nonlinear Algebraic Equations,
edited by Philip Rabinowitz,
Gordon and Breach, 1970,
ISBN13: 978-0677142302,
LC: QA218.N85.
-
Werner Rheinboldt,
Computation of Critical Boundaries on Equilibrium Manifolds,
SIAM Journal on Numerical analysis,
Volume 19, Number 3, June 1982, pages 653-669.
-
Werner Rheinboldt, John Burkardt,
A Locally Parameterized Continuation Process,
ACM Transactions on Mathematical Software,
Volume 9, Number 2, June 1983, pages 215-235.
-
Werner Rheinboldt, John Burkardt,
Algorithm 596:
A Program for a Locally Parameterized
Continuation Process,
ACM Transactions on Mathematical Software,
Volume 9, Number 2, June 1983, pages 236-241.
-
Werner Rheinboldt,
Numerical Analysis of Parameterized Nonlinear Equations,
Wiley, 1986,
ISBN: 0-471-88814-1,
LC: QA372.R54.
-
Werner Rheinboldt,
Sample Problems for Continuation Processes,
Technical Report ICMA-80-?,
Institute for Computational Mathematics and Applications,
Department of Mathematics,
University of Pittsburgh, November 1980.
-
Werner Rheinboldt,
Solution Fields of Nonlinear Equations and Continuation Methods,
SIAM Journal on Numerical Analysis,
Volume 17, Number 2, April 1980, pages 221-237.
-
Werner Rheinboldt,
On the Solution of Some Nonlinear Equations Arising in the
Application of Finite Element Methods,
in The Mathematics of Finite Elements and Applications II,
edited by John Whiteman,
Academic Press, 1976,
LC: TA347.F5.M37.
-
E Riks,
The Application of Newton's Method to the Problem of Elastic
Stability,
Transactions of the ASME, Journal of Applied Mechanics,
December 1972, pages 1060-1065.
-
Albert Schy, Margery Hannah,
Prediction of Jump Phenomena in Roll-coupled Maneuvers
of Airplanes,
Journal of Aircraft,
Volume 14, Number 4, 1977, pages 375-382.
-
Bruce Simpson,
A Method for the Numerical Determination of Bifurcation
States of Nonlinear Systems of Equations,
SIAM Journal on Numerical Analysis,
Volume 12, Number 3, June 1975, pages 439-451.
-
Hans-Joerg Wacker, Erich Zarzer, Werner Zulehner,
Optimal Stepsize Control for the Globalized Newton Method,
in Continuation Methods,
edited by Hans-Joerg Wacker,
Academic Press, 1978,
ISBN: 0127292500,
LC: QA1.S899.
-
John Young, Albert Schy, Katherine Johnson,
Prediction of Jump Phenomena in Aircraft Maneuvers, Including
Nonlinear Aerodynamic Effects,
Journal of Guidance and Control,
Volume 1, Number 1, 1978, pages 26-31.
Source Code:
Examples and Tests:
List of Routines:
-
CH_CAP capitalizes a single character.
-
FILE_NAME_INC increments a partially numeric filename.
-
GET_UNIT returns a free FORTRAN unit number.
-
P00_FUN evaluates the function for any problem.
-
P00_JAC evaluates the jacobian for any problem.
-
P00_JAC_CHECK compares the jacobian with a finite difference estimate.
-
P00_JAC_DIF estimates the jacobian via finite differences.
-
P00_NEWTON applies Newton's method to an approximate root.
-
P00_NVAR sets the number of variables for any problem.
-
P00_OPTION_NUM returns the number of options available for a problem.
-
P00_PAR_INDEX chooses the index of the continuation parameter.
-
P00_PROBLEM_NUM returns the number of problems available.
-
P00_START returns a starting point for any problem.
-
P00_STEP takes one continuation step.
-
P00_STEPSIZE returns step sizes for any problem.
-
P00_TAN determines a tangent vector at X.
-
P00_TARGET computes a solution with a given component value.
-
P00_TITLE sets the title for any problem.
-
P01_FUN evaluates the function for problem 1.
-
P01_GX evaluates the underlying function for problem 1.
-
P01_JAC evaluates the jacobian for problem 1.
-
P01_NVAR sets the number of variables for problem 1.
-
P01_OPTION_NUM returns the number of options for problem 1.
-
P01_START returns a starting point for problem 1.
-
P01_STEPSIZE returns step sizes for problem 1.
-
P01_TITLE sets the title for problem 1.
-
P02_FUN evaluates the function for problem 2.
-
P02_GX evaluates the underlying function for problem 2.
-
P02_JAC evaluates the jacobian for problem 2.
-
P02_NVAR sets the number of variables for problem 2.
-
P02_OPTION_NUM returns the number of options for problem 2.
-
P02_START returns a starting point for problem 2.
-
P02_STEPSIZE returns step sizes for problem 2.
-
P02_TITLE sets the title for problem 2.
-
P03_FUN evaluates the function for problem 3.
-
P03_GX evaluates the underlying function for problem 3.
-
P03_JAC evaluates the jacobian for problem 3.
-
P03_NVAR sets the number of variables for problem 3.
-
P03_OPTION_NUM returns the number of options for problem 3.
-
P03_START returns a starting point for problem 3.
-
P03_STEPSIZE returns step sizes for problem 3.
-
P03_TITLE sets the title for problem 3.
-
P04_FUN evaluates the function for problem 4.
-
P04_GX evaluates the underlying function for problem 4.
-
P04_JAC evaluates the jacobian for problem 4.
-
P04_NVAR sets the number of variables for problem 4.
-
P04_OPTION_NUM returns the number of options for problem 4.
-
P04_START returns a starting point for problem 4.
-
P04_STEPSIZE returns step sizes for problem 4.
-
P04_TITLE sets the title for problem 4.
-
P05_FUN evaluates the function for problem 5.
-
P05_JAC evaluates the jacobian for problem 5.
-
P05_NVAR sets the number of variables for problem 5.
-
P05_OPTION_NUM returns the number of options for problem 5.
-
P05_START returns a starting point for problem 5.
-
P05_STEPSIZE returns step sizes for problem 5.
-
P05_TITLE sets the title for problem 5.
-
P06_BARRAY sets the B array.
-
P06_CARRAY sets the C array.
-
P06_FUN evaluates the function for problem 6.
-
P06_JAC evaluates the jacobian for problem 6.
-
P06_NVAR sets the number of variables for problem 6.
-
P06_OPTION_NUM returns the number of options for problem 6.
-
P06_START returns a starting point for problem 6.
-
P06_STEPSIZE returns step sizes for problem 6.
-
P06_TITLE sets the title for problem 6.
-
P07_FUN evaluates the function for problem 7.
-
P07_JAC evaluates the jacobian for problem 7.
-
P07_NVAR sets the number of variables for problem 7.
-
P07_OPTION_NUM returns the number of options for problem 7.
-
P07_START returns a starting point for problem 7.
-
P07_STEPSIZE returns step sizes for problem 7.
-
P07_TITLE sets the title for problem 7.
-
P08_FUN evaluates the function for problem 8.
-
P08_GX sets data used for Rik's mechanical problem.
-
P08_HX reports the constraint equation data.
-
P08_JAC evaluates the jacobian for problem 8.
-
P08_NVAR sets the number of variables for problem 8.
-
P08_OPTION_NUM returns the number of options for problem 8.
-
P08_START returns a starting point for problem 8.
-
P08_STEPSIZE returns step sizes for problem 8.
-
P08_TITLE sets the title for problem 8.
-
P09_FUN evaluates the function for problem 9.
-
P09_GX is used by problem 9.
-
P09_JAC evaluates the jacobian for problem 9.
-
P09_NVAR sets the number of variables for problem 9.
-
P09_OPTION_NUM returns the number of options for problem 9.
-
P09_START returns a starting point for problem 9.
-
P09_STEPSIZE returns step sizes for problem 9.
-
P09_TITLE sets the title for problem 9.
-
P10_FUN evaluates the function for problem 10.
-
P10_GX is used by problem 10.
-
P10_JAC evaluates the jacobian for problem 10.
-
P10_NVAR sets the number of variables for problem 10.
-
P10_OPTION_NUM returns the number of options for problem 10.
-
P10_START returns a starting point for problem 10.
-
P10_STEPSIZE returns step sizes for problem 10.
-
P10_TITLE sets the title for problem 10.
-
P11_FUN evaluates the function for problem 11.
-
P11_GAUSS returns the Gauss quadrature abscissas and weights.
-
P11_GUL computes G(U,LAMBDA) and dG/dU and dG/dLAMBDA.
-
P11_JAC evaluates the jacobian for problem 11.
-
P11_NVAR sets the number of variables for problem 11.
-
P11_OPTION_NUM returns the number of options for problem 11.
-
P11_PHI is used by problem 11.
-
P11_SHAPE evaluates the shape functions for problem 11.
-
P11_START returns a starting point for problem 11.
-
P11_STEPSIZE returns step sizes for problem 11.
-
P11_TITLE sets the title for problem 11.
-
P12_FUN evaluates the function for problem 12.
-
P12_GAUSS8 returns an 8 point Gauss quadrature rule.
-
P12_JAC evaluates the jacobian for problem 12.
-
P12_LEGENDRE_VAL evaluates the Legendre polynomials and derivatives.
-
P12_NVAR sets the number of variables for problem 12.
-
P12_OPTION_NUM returns the number of options for problem 12.
-
P12_START returns a starting point for problem 12.
-
P12_STEPSIZE returns step sizes for problem 12.
-
P12_THETA is a utility routine used in problem 12.
-
P12_TITLE sets the title for problem 12.
-
P13_FUN evaluates the function for problem 13.
-
P13_FX2 computes the function by recasting it on a square grid.
-
P13_GP evaluates the derivative of the right hand side function.
-
P13_GX evaluates the right hand side function.
-
P13_JAC evaluates the jacobian for problem 13.
-
P13_JAC2 computes the jacobian by recasting it on a square grid.
-
P13_NVAR sets the number of variables for problem 13.
-
P13_OPTION_NUM returns the number of options for problem 13.
-
P13_START returns a starting point for problem 13.
-
P13_STEPSIZE returns step sizes for problem 13.
-
P13_TITLE sets the title for problem 13.
-
P14_FU computes the auxilliary function F(LAMBDA,U).
-
P14_FUDL computes d F(LAMBDA,U) / d LAMBDA.
-
P14_FUDU computes d F(LAMBDA,U) / d U
-
P14_FUN computes the function for problem 14.
-
P14_GU computes the auxilliary function G(U).
-
P14_GUDU computes d G(U) / d U.
-
P14_JAC computes the jacobian of problem 14.
-
P14_NVAR sets the number of variables for problem 14.
-
P14_OPTION_NUM returns the number of options for problem 14.
-
P14_START returns a starting point for problem 14.
-
P14_STEPSIZE returns step sizes for problem 14.
-
P14_TITLE sets the title for problem 14.
-
P15_FUN evaluates the function for problem 15.
-
P15_GX returns the coefficients of the linear portion of the function.
-
P15_JAC computes the jacobian for problem 15.
-
P15_NVAR sets the number of variables for problem 15.
-
P15_OPTION_NUM returns the number of options for problem 15.
-
P15_START returns a starting point for problem 15.
-
P15_STEPSIZE returns step sizes for problem 15.
-
P15_TITLE sets the title for problem 15.
-
P16_FUN evaluates the function for problem 16.
-
P16_JAC computes the jacobian for problem 16.
-
P16_NVAR sets the number of variables for problem 16.
-
P16_OPTION_NUM returns the number of options for problem 16.
-
P16_START returns a starting point for problem 16.
-
P16_STEPSIZE returns step sizes for problem 16.
-
P16_TITLE sets the title for problem 16.
-
P17_FUN evaluates the function for problem 17.
-
P17_JAC evaluates the jacobian for problem 17.
-
P17_NVAR sets the number of variables for problem 17.
-
P17_OPTION_NUM returns the number of options for problem 17.
-
P17_START returns a starting point for problem 17.
-
P17_STEPSIZE returns step sizes for problem 17.
-
P17_TITLE sets the title for problem 17.
-
P18_FUN evaluates the function for problem 18.
-
P18_GPL evaluates d G ( T, U, LAMBDA ) / d LAMBDA.
-
P18_GPU evaluates d G ( T, U, LAMBDA ) / dU.
-
P18_GX evaluates the auxilliary function G ( T, U, LAMBDA ).
-
P18_JAC evaluates the jacobian for problem 18.
-
P18_NVAR sets the number of variables for problem 18.
-
P18_OPTION_NUM returns the number of options for problem 18.
-
P18_START returns a starting point for problem 18.
-
P18_STEPSIZE returns step sizes for problem 18.
-
P18_TITLE sets the title for problem 18.
-
P19_CON returns physical constants.
-
P19_CONP returns physical constant derivatives.
-
P19_FUN evaluates the function for problem 19.
-
P19_JAC evaluates the jacobian for problem 19.
-
P19_NVAR sets the number of variables for problem 19.
-
P19_OPTION_NUM returns the number of options for problem 19.
-
P19_START returns a starting point for problem 19.
-
P19_STEPSIZE returns step sizes for problem 19.
-
P19_TITLE sets the title for problem 19.
-
P20_FUN evaluates the function for problem 20.
-
P20_I4_GET returns the value of an integer parameter for problem 20.
-
P20_I4_SET sets the value of an integer parameter for problem 20.
-
P20_I4_STORE sets or gets the value of an integer parameter for problem 20.
-
P20_JAC evaluates the jacobian for problem 20.
-
P20_NVAR sets the number of variables for problem 20.
-
P20_OPTION_NUM returns the number of options for problem 20.
-
P20_R8_GET returns the value of a real parameter for problem 20.
-
P20_R8_SET sets the value of a real parameter for problem 20.
-
P20_R8_STORE sets or gets the value of a real parameter for problem 20.
-
P20_SETUP finds a solution (L,THETA,LAMBDA,MU) given L and THETA.
-
P20_START returns a starting point for problem 20.
-
P20_STEPSIZE returns step sizes for problem 20.
-
P20_TITLE sets the title for problem 20.
-
R8_MOP returns the I-th power of -1 as an R8 value.
-
R8_SIGN returns the sign of an R8.
-
R8_SWAP swaps two R8's.
-
R8_UNIFORM_01 returns a unit pseudorandom R8.
-
R8MAT_DET computes the determinant of an R8MAT.
-
R8MAT_NULLSPACE computes the nullspace of a matrix.
-
R8MAT_NULLSPACE_SIZE computes the size of the nullspace of a matrix.
-
R8MAT_RREF computes the reduced row echelon form of a matrix.
-
R8VEC_AMAX_INDEX returns the index of the maximum absolute value in an R8VEC.
-
R8VEC_NORM_L2 returns the L2 norm of an R8VEC.
-
S_EQI is a case insensitive comparison of two strings for equality.
-
SGE_CHECK checks the dimensions of a general matrix.
-
SGE_FA factors a general matrix.
-
SGE_SL solves a system factored by SGE_FA.
-
TIMESTAMP prints the current YMDHMS date as a time stamp.
You can go up one level to
the FORTRAN90 source codes.
Last revised on 14 October 2008.