XC Open source finite element analysis program
ZeroLengthContact2D.h
1 //----------------------------------------------------------------------------
2 // XC program; finite element analysis code
3 // for structural analysis and design.
4 //
5 // Copyright (C) Luis Claudio Pérez Tato
6 //
7 // This program derives from OpenSees <http://opensees.berkeley.edu>
8 // developed by the «Pacific earthquake engineering research center».
9 //
10 // Except for the restrictions that may arise from the copyright
11 // of the original program (see copyright_opensees.txt)
12 // XC is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This software is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 //
23 // You should have received a copy of the GNU General Public License
24 // along with this program.
25 // If not, see <http://www.gnu.org/licenses/>.
26 //----------------------------------------------------------------------------
27 /* ****************************************************************** **
28 ** OpenSees - Open System for Earthquake Engineering Simulation **
29 ** Pacific Earthquake Engineering Research Center **
30 ** **
31 ** **
32 ** (C) Copyright 1999, The Regents of the University of California **
33 ** All Rights Reserved. **
34 ** **
35 ** Commercial use of this program without express permission of the **
36 ** University of California, Berkeley, is strictly prohibited. See **
37 ** file 'COPYRIGHT' in main directory for information on usage and **
38 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
39 ** **
40 ** Developed by: **
41 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
42 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
43 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
44 ** **
45 ** ****************************************************************** */
46 
47 
48 
49 // $Source: /usr/local/cvs/OpenSees/SRC/element/zeroLength/ZeroLengthContact2D.h,v $
50 // $Revision: 1.2 $
51 // $Date: 2007/11/28 00:08:58 $
52 
53 
54 
55 #ifndef ZeroLengthContact2D_h
56 #define ZeroLengthContact2D_h
57 
58 /*----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*
59  | |
60  | ZeroLengthContact2D element |
61  + +
62  |--------------------------------------------------------------------------|
63  | |
64  + Authors: Gang Wang AND Professor Nicholas Sitar +
65  | |
66  | Department of Civil and Environmental Engineering |
67  + Univeristy of California, Berkeley, CA 94720, USA +
68  | |
69  | Email: wang@ce.berkeley.edu (G.W.) |
70  + +
71  | Disclaimers: |
72  | (1) Frame of this code is based on zeroLength element |
73  + (2) Questions regarding this code should be directed to Gang Wang +
74  | (3) Documentation could be found at |
75  | www.ce.berkeley.edu/~wang/OpenSees.html |
76  + +
77  | Development History: |
78  | Created -- Jan/23/2004 |
79  + Final Release -- June 2004 +
80  | Add Augmented Lagrange --Oct 21,2004 |
81  | |
82  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*/
83 
84 
85 
86 
87 
88 /*
89  element zeroLengthContact2D $eleID $sNdID $mNdID $Kn $Kt $fs -normal $Nx $Ny
90  Description: This file contains the class definition for ZeroLengthContact2D.
91  (1) A ZeroLengthContact2D element is defined by two nodes with the same coordinate
92  in R^2
93  (2) Normal to the contact plane through these contact nodes is preset by the user
94  to be either radial or any of x,y,z axis.
95  (3) Penalty (Kn,Kt) is used to enforce the constraints, i.e.
96  No (in fact, very small) penetration in the normal direction, and
97  Coulomb frictional law in the tangential direction.
98  (4) Backward Euler return mapping scheme is used for implicit formulation of
99  residual and consistent tangent modulus.
100  (5) This element is a modified version of continuum-based implicit formulation
101  (Laursen and Simo,1993) for small deformation. Contact detection is simplified
102  to be only related to these two nodes, and contributions of geometric
103  nonlinearities to consistent tangent moudulus are neglected.
104 
105  References:
106  Laursen,T.A. and Simo, J.C. "A Continuum-based Finite Element Formulation for the
107  Implicit Solution of Multibody, Large Deformation Frictional Contact Problems".
108  Int. J. Numer. Methods Eng. , 36, 3451-3485 (1993)
109 
110  Armero, F. and Petocz, E. "A New Dissipative Time-Stepping Algorithm for Frictional
111  Contact Problems: Fromulation and Analysis", Comp. Methods Appl. Mech. Eng., 179,
112  151-178 (1999)
113  www.ce.berkeley.edu/~wang
114 */
115 #include "ZeroLengthContact.h"
116 
117 namespace XC {
118 class Node;
119 class Channel;
120 class Response;
121 
123 //
126  {
127  private:
128  // contact forces
129  double lambda;
130 
131  // Normal and Tangental Vectors for Elemental Nodes, (4*1)
132  mutable Vector T;
133  Vector ContactNormal;
134 
135  int contactDetect(void) const;
136  void formResidAndTangent(int tang_flag ) const;
137 
138  // contact point and contact plane stuffs
139  double stickPt;
140  mutable double xi;
141 
142  //static variables for 2D contact
143  static Matrix stiff;
144  static Vector resid;
145  static Matrix zeroMatrix;
146 
147  public:
148  ZeroLengthContact2D(int tag= 0);
149  ZeroLengthContact2D(int tag, int Nd1, int Nd2,double Kn, double Kt, double fRatio, const Vector& normal);
150  Element *getCopy(void) const;
151 
152  void setDomain(Domain *theDomain);
153 
154 
155  // public methods to set the state of the element
156  int commitState(void);
157  int revertToLastCommit(void);
158  int revertToStart(void);
159  int update(void);
160 
161 
162  // public methods to obtain stiffness, mass, damping and residual information
163  const Matrix &getTangentStiff(void) const;
164  const Matrix &getInitialStiff(void) const;
165  const Matrix &getDamp(void) const;
166  const Matrix &getMass(void) const;
167 
168  const Vector &getResistingForce(void) const;
169  const Vector &getResistingForceIncInertia(void) const;
170 
171 
172  // public methods for element output
173  int sendSelf(CommParameters &);
174  int recvSelf(const CommParameters &);
175  void Print(std::ostream &os, int flag =0);
176 
177  Response *setResponse(const std::vector<std::string> &argv, Information &eleInformation);
178  int getResponse(int responseID, Information &eleInformation);
179  //void updateDir (const Vector& x, const Vector& y);
180  };
181 
182 } // end of XC namespace
183 
184 
185 #endif
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
const Matrix & getMass(void) const
Returns the mass matrix.
Definition: ZeroLengthContact2D.cpp:238
Domain (mesh and boundary conditions) of the finite element model.
Definition: Domain.h:98
Definition: Vector.h:82
double Kn
normal penalty
Definition: ZeroLengthContact.h:56
Information about an element.
Definition: Information.h:80
void setDomain(Domain *theDomain)
to set a link to the enclosing Domain and to set the node pointers. also determines the number of dof...
Definition: ZeroLengthContact2D.cpp:93
Base calass for the finite elements.
Definition: Element.h:104
double Kt
tangential penalty
Definition: ZeroLengthContact.h:57
const Vector & getResistingForceIncInertia(void) const
Returns the action of the element over its attached nodes. Computes damping matrix.
Definition: ZeroLengthContact2D.cpp:257
Zero length contact element.
Definition: ZeroLengthContact.h:43
int commitState(void)
Consuma el estado of the element.
Definition: ZeroLengthContact2D.cpp:141
Element * getCopy(void) const
Virtual constructor.
Definition: ZeroLengthContact2D.cpp:87
Definition: Matrix.h:82
ZeroLengthContact2D(int tag=0)
Default constructor.
Definition: ZeroLengthContact2D.cpp:82
Zero length element for 2D contact problems.
Definition: ZeroLengthContact2D.h:125
int update(void)
Definition: ZeroLengthContact2D.cpp:196
void Print(std::ostream &os, int flag=0)
Imprime el objeto.
Definition: ZeroLengthContact2D.cpp:283
Communication parameters between processes.
Definition: CommParameters.h:65
================================================================================
Definition: ContinuaReprComponent.h:34
Definition: Response.h:71
const Matrix & getDamp(void) const
Returns the matriz de amortiguamiento.
Definition: ZeroLengthContact2D.cpp:231