00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
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
00087 virtual bool doesIndependentAnalysis(void);
00088 virtual int analyze(double dT);
00089
00090
00091
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
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
00141
00142
00143
00144 bool tangFormed;
00145 int tangFormedCount;
00146
00147 int domainStamp;
00148 };
00149
00150 #endif
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161