xc
IncrementalIntegrator.h
1 // -*-c++-*-
2 //----------------------------------------------------------------------------
3 // XC program; finite element analysis code
4 // for structural analysis and design.
5 //
6 // Copyright (C) Luis C. Pérez Tato
7 //
8 // This program derives from OpenSees <http://opensees.berkeley.edu>
9 // developed by the «Pacific earthquake engineering research center».
10 //
11 // Except for the restrictions that may arise from the copyright
12 // of the original program (see copyright_opensees.txt)
13 // XC is free software: you can redistribute it and/or modify
14 // it under the terms of the GNU General Public License as published by
15 // the Free Software Foundation, either version 3 of the License, or
16 // (at your option) any later version.
17 //
18 // This software is distributed in the hope that it will be useful, but
19 // WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 // GNU General Public License for more details.
22 //
23 //
24 // You should have received a copy of the GNU General Public License
25 // along with this program.
26 // If not, see <http://www.gnu.org/licenses/>.
27 //----------------------------------------------------------------------------
28 /* ****************************************************************** **
29 ** OpenSees - Open System for Earthquake Engineering Simulation **
30 ** Pacific Earthquake Engineering Research Center **
31 ** **
32 ** **
33 ** (C) Copyright 1999, The Regents of the University of California **
34 ** All Rights Reserved. **
35 ** **
36 ** Commercial use of this program without express permission of the **
37 ** University of California, Berkeley, is strictly prohibited. See **
38 ** file 'COPYRIGHT' in main directory for information on usage and **
39 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
40 ** **
41 ** Developed by: **
42 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
43 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
44 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
45 ** **
46 ** ****************************************************************** */
47 
48 // $Revision: 1.7 $
49 // $Date: 2003/03/06 20:32:01 $
50 // $Source: /usr/local/cvs/OpenSees/SRC/analysis/integrator/IncrementalIntegrator.h,v $
51 
52 
53 #ifndef IncrementalIntegrator_h
54 #define IncrementalIntegrator_h
55 
56 // File: ~/analysis/integrator/IncrementalIntegrator.h
57 //
58 // Written: fmk
59 // Created: Tue Sept 17 15:54:47: 1996
60 // Revision: A
61 //
62 // Description: This file contains the interface for IncrementalIntegrator.
63 // IncrementalIntegrator is an algorithmic class for setting up the finite
64 // element equations in an incremental analysis and for updating the nodal
65 // response quantities based on the values in the soln vector.
66 //
67 // What: "@(#) IncrementalIntegrator.h, revA"
68 
69 #include <solution/analysis/integrator/Integrator.h>
70 
71 namespace XC {
72 class LinearSOE;
73 class AnalysisModel;
74 class FE_Element;
75 class DOF_Group;
76 class Vector;
77 
78 #define CURRENT_TANGENT 0
79 #define INITIAL_TANGENT 1
80 #define CURRENT_SECANT 2
81 #define INITIAL_THEN_CURRENT_TANGENT 3
82 #define NO_TANGENT 4
83 #define SECOND_TANGENT 5
84 #define HALL_TANGENT 6
85 
87 //
101  {
102  protected:
103  double iFactor;
104  double cFactor;
105 
106  LinearSOE *getLinearSOEPtr(void);
107  const LinearSOE *getLinearSOEPtr(void) const;
108 
109  friend class IntegratorVectors;
110  virtual int formNodalUnbalance(void);
111  virtual int formElementResidual(void);
112  int statusFlag;
113 
114  IncrementalIntegrator(SolutionStrategy *,int classTag);
115  public:
116  // methods to set up the system of equations
117  virtual int formTangent(int statusFlag = CURRENT_TANGENT);
118  virtual int formTangent(int statusFlag,
119  const double &iFactor,
120  const double &cFactor);
121  virtual int formUnbalance(void);
122 
123  int getTangFlag(void) const;
124  void setTangFlag(const int &);
125 
126  // pure virtual methods to define the FE_ELe and DOF_Group contributions
129  virtual int formEleTangent(FE_Element *theEle) =0;
134  virtual int formNodTangent(DOF_Group *theDof) =0;
137  virtual int formEleResidual(FE_Element *theEle) =0;
140  virtual int formNodUnbalance(DOF_Group *theDof) =0;
141 
142  // methods to update the domain
146  virtual int newStep(double deltaT);
150  virtual int update(const Vector &deltaU) =0;
151  virtual int commit(void);
152  virtual int revertToLastStep(void);
153  virtual int initialize(void);
154 
155 // AddingSensitivity:BEGIN //////////////////////////////////
156  virtual int revertToStart();
157 // AddingSensitivity:END ////////////////////////////////////
158 
159  virtual double getCFactor(void);
160 
161  // method introduced for domain decomposition
162  virtual int getLastResponse(Vector &result, const ID &id);
163 
164  };
165 } // end of XC namespace
166 
167 #endif
168 
Float vector abstraction.
Definition: Vector.h:94
Linear system of equations.
Definition: LinearSOE.h:92
void setTangFlag(const int &)
Set the value of the flag to compute the tangent stiffness: CURRENT_TANGENT: 0; INITIAL_TANGENT: 1; C...
Definition: IncrementalIntegrator.cpp:81
virtual int formNodUnbalance(DOF_Group *theDof)=0
To inform the DOF_Group how to build its residual vector for addition to the system of equations...
Vector of integers.
Definition: ID.h:95
virtual int newStep(double deltaT)
Invoked to inform the integrator that the transient analysis is proceeding to the next time step...
Definition: IncrementalIntegrator.cpp:234
Vectors used by many integrators.
Definition: IntegratorVectors.h:41
virtual int formEleResidual(FE_Element *theEle)=0
To inform the FE_Element how to build its residual vector for addition to the system of equations...
virtual int getLastResponse(Vector &result, const ID &id)
Returns the response on the DOFs being passed as parameter.
Definition: IncrementalIntegrator.cpp:201
virtual int formUnbalance(void)
Builds the unbalanced load vector (right hand side of the equation).
Definition: IncrementalIntegrator.cpp:161
virtual int formNodTangent(DOF_Group *theDof)=0
To inform the DOF_Group how to build its tangent matrix for addition to the system of equations...
Base class for the objects that performs the integration of physical properties over the domain to fo...
Definition: Integrator.h:100
LinearSOE * getLinearSOEPtr(void)
Returns a pointer to the linear system of equations.
Definition: IncrementalIntegrator.cpp:278
IncrementalIntegrator is an algorithmic class for setting up the finite element equations in an incre...
Definition: IncrementalIntegrator.h:100
A DOF_Group object is instantiated by the ConstraintHandler for every unconstrained node in the domai...
Definition: DOF_Group.h:107
virtual int formEleTangent(FE_Element *theEle)=0
To inform the FE_Element how to build its tangent matrix for addition to the system of equations...
virtual int formNodalUnbalance(void)
Builds the nodal unbalanced load vector.
Definition: IncrementalIntegrator.cpp:312
Solution strategy for the finite element problem.
Definition: SolutionStrategy.h:94
virtual int update(const Vector &deltaU)=0
When invoked causes the integrator object to update the DOF_Group responses with the appropriate valu...
virtual double getCFactor(void)
Function related to modal damping (not implemented yet).
Definition: IncrementalIntegrator.cpp:377
Finite element as seen by analysis.
Definition: FE_Element.h:108
virtual int formElementResidual(void)
Builds the unbalanced load vector of the elements.
Definition: IncrementalIntegrator.cpp:352
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
int getTangFlag(void) const
Get the value of the flag to compute the tangent stiffness: CURRENT_TANGENT: 0; INITIAL_TANGENT: 1; C...
Definition: IncrementalIntegrator.cpp:77
virtual int commit(void)
Invoked by the SolutionAlgorithm to inform the Integrator that current state of domain is on solution...
Definition: IncrementalIntegrator.cpp:248
virtual int formTangent(int statusFlag=CURRENT_TANGENT)
Builds tangent stiffness matrix.
Definition: IncrementalIntegrator.cpp:104
IncrementalIntegrator(SolutionStrategy *, int classTag)
Constructor.
Definition: IncrementalIntegrator.cpp:73