00001 /* ****************************************************************** **
00002 ** OpenSees - Open System for Earthquake Engineering Simulation **
00003 ** Pacific Earthquake Engineering Research Center **
00004 ** **
00005 ** **
00006 ** (C) Copyright 1999, The Regents of the University of California **
00007 ** All Rights Reserved. **
00008 ** **
00009 ** Commercial use of this program without express permission of the **
00010 ** University of California, Berkeley, is strictly prohibited. See **
00011 ** file 'COPYRIGHT' in main directory for information on usage and **
00012 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
00013 ** **
00014 ** Developed by: **
00015 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
00016 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
00017 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
00018 ** **
00019 ** ****************************************************************** */
00020
00021 // $Revision: 1.1 $
00022 // $Date: 2001/07/18 16:24:10 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/analysis/algorithm/equiSolnAlgo/KrylovNewton.h,v $
00024
00025 #ifndef KrylovNewton_h
00026 #define KrylovNewton_h
00027
00028 // Written: MHS
00029 // Created: June 2001
00030 //
00031 // Description: This file contains the class definition for
00032 // KrylovNewton. KrylovNewton is a class which uses a Krylov
00033 // subspace accelerator on the modified Newton method.
00034 // The accelerator is described by Carlson and Miller in
00035 // "Design and Application of a 1D GWMFE Code"
00036 // from SIAM Journal of Scientific Computing (Vol. 19, No. 3,
00037 // pp. 728-765, May 1998)
00038
00039 #include <EquiSolnAlgo.h>
00040 #include <Vector.h>
00041
00043 class KrylovNewton: public EquiSolnAlgo
00044 {
00045 public:
00047 KrylovNewton(int tangent = CURRENT_TANGENT);
00049 KrylovNewton(ConvergenceTest &theTest, int tangent = CURRENT_TANGENT);
00051 ~KrylovNewton();
00052
00054 int solveCurrentStep(void);
00056 void setTest(ConvergenceTest &theNewTest);
00058 ConvergenceTest *getTest(void);
00059
00061 virtual int sendSelf(int commitTag, Channel &theChannel);
00063 virtual int recvSelf(int commitTag, Channel &theChannel,
00064 FEM_ObjectBroker &theBroker);
00066 void Print(ostream &s, int flag =0);
00067
00068 protected:
00069
00070 private:
00072 ConvergenceTest *theTest;
00074 int tangent;
00076 Vector **r;
00078 Vector **v;
00080 Vector **Av;
00081
00083 int numTests;
00085 int numEqns;
00086
00088 int leastSquares(int k);
00089 };
00090
00091 #endif
00092
00093
00094 ÿ