DomainDecompositionAnalysis.h

Go to the documentation of this file.
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.4 $
00022 // $Date: 2005/11/29 23:36:47 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/analysis/analysis/DomainDecompositionAnalysis.h,v $
00024                                                                         
00025                                                                         
00026 // Written: fmk 
00027 // Created: Tue Sept 17 16:34:47: 1996
00028 // Revision: A
00029 //
00030 // Description: This file contains the class definition for 
00031 // DomainDecompositionAnalysis. DomainDecompositionAnalysis is a subclass 
00032 // of AnalysisAnalysis, it is used when performing a domain decomposition
00033 // analysis. It provides methods which can be invoked by a subdomain to
00034 // perform the numerical computations required.
00035 //
00036 // What: "@(#) DomainDecompositionAnalysis.h, revA"
00037 
00038 #ifndef DomainDecompositionAnalysis_h
00039 #define DomainDecompositionAnalysis_h
00040 
00041 #ifndef _bool_h
00042 #include <bool.h>
00043 #endif
00044 
00045 #include <Analysis.h>
00046 #include <Matrix.h>
00047 #include <Vector.h>
00048 #include <MovableObject.h>
00049 
00050 class ConstraintHandler;
00051 class DOF_Numberer;
00052 class AnalysisModel;
00053 class IncrementalIntegrator;
00054 class LinearSOE;
00055 class DomainSolver;
00056 class DomainDecompAlgo;
00057 class Subdomain;
00058 class Vector;
00059 class EquiSolnAlgo;
00060 class ConvergenceTest;
00061 
00062 class DomainDecompositionAnalysis: public Analysis, public MovableObject
00063 {
00064   public:
00065     DomainDecompositionAnalysis(Subdomain &theDomain);
00066 
00067     DomainDecompositionAnalysis(int classTag, 
00068                                 Subdomain &theDomain);    
00069     
00070     DomainDecompositionAnalysis(Subdomain &theDomain,
00071                                 ConstraintHandler &theHandler,
00072                                 DOF_Numberer &theNumberer,
00073                                 AnalysisModel &theModel,
00074                                 DomainDecompAlgo &theSolnAlgo,             
00075                                 IncrementalIntegrator &theIntegrator,   
00076                                 LinearSOE &theSOE,
00077                                 DomainSolver &theSolver);
00078 
00079 
00080 
00081     virtual ~DomainDecompositionAnalysis();
00082     virtual void clearAll(void);            
00083     virtual int initialize(void);
00084     virtual int domainChanged(void);
00085 
00086     // methods for non standard domain deomposition analysis
00087     virtual bool doesIndependentAnalysis(void);    
00088     virtual int analyze(double dT);
00089 
00090     // methods for standard domain deomposition analysis
00091     // that do some form of condensation to the tangent
00092     virtual int  getNumExternalEqn(void);
00093     virtual int  getNumInternalEqn(void);
00094     virtual int  newStep(double dT);
00095     virtual int  computeInternalResponse(void);
00096     virtual int  formTangent(void);
00097     virtual int  formResidual(void);
00098     virtual int  formTangVectProduct(Vector &force);
00099     virtual const Matrix &getTangent(void);
00100     virtual const Vector &getResidual(void);
00101     virtual const Vector &getTangVectProduct(void);
00102     
00103     virtual int sendSelf(int commitTag, Channel &theChannel);
00104     virtual int recvSelf(int commitTag, Channel &theChannel, 
00105                          FEM_ObjectBroker &theBroker);
00106 
00107     // methods to change the analysis aggregates
00108     virtual int setAlgorithm(EquiSolnAlgo &theAlgorithm);
00109     virtual int setIntegrator(IncrementalIntegrator &theIntegrator);
00110     virtual int setLinearSOE(LinearSOE &theSOE);
00111     virtual int setConvergenceTest(ConvergenceTest &theTest);
00112     
00113   protected: 
00114     Subdomain           *getSubdomainPtr(void) const;
00115     ConstraintHandler   *getConstraintHandlerPtr(void) const;
00116     DOF_Numberer        *getDOF_NumbererPtr(void) const;
00117     AnalysisModel       *getAnalysisModelPtr(void) const;
00118     DomainDecompAlgo    *getDomainDecompAlgoPtr(void) const;        
00119     IncrementalIntegrator  *getIncrementalIntegratorPtr(void) const;    
00120     LinearSOE           *getLinSOEPtr(void) const;
00121     DomainSolver        *getDomainSolverPtr(void) const;
00122     
00123 
00124     
00125   private:
00126     Subdomain                *theSubdomain;
00127     ConstraintHandler        *theHandler;    
00128     DOF_Numberer             *theNumberer;
00129     AnalysisModel            *theModel;
00130     DomainDecompAlgo         *theAlgorithm;
00131     IncrementalIntegrator    *theIntegrator;        
00132 
00133     LinearSOE                *theSOE;
00134     DomainSolver             *theSolver;
00135 
00136     Vector                   *theResidual;
00137     int numEqn;
00138     int numExtEqn;
00139 
00140     // the following 2 variables are used to allow formResidual()
00141     // and formTangVectProduct() to be called before formTangent()
00142     // - this must be allowed as typical elements will not have to fromTangent
00143     // before being asked to form Residual(). 
00144     bool tangFormed;
00145     int tangFormedCount; // saves the expense of computing formTangent() 
00146                        // for same state of Subdomain.
00147     int domainStamp;                       
00148 };
00149 
00150 #endif
00151 
00152 
00153 
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 

Generated on Mon Oct 23 15:04:57 2006 for OpenSees by doxygen 1.5.0