XC Open source finite element analysis program
ZeroLengthContact3D.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/ZeroLengthContact3D.h,v $
50 // $Revision: 1.2 $
51 // $Date: 2007/11/28 00:08:58 $
52 
53 #ifndef ZeroLengthContact3D_h
54 #define ZeroLengthContact3D_h
55 
56 // Written: Gang Wang (wang@ce.berkeley.edu)
57 // Prof. Nicholas Sitar (nsitar@ce.berkeley.edu)
58 //
59 // Created: 27/08/2003
60 //
61 
62 
63 /*----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*
64  | |
65  | ZeroLengthContact2D element |
66  + +
67  |--------------------------------------------------------------------------|
68  | |
69  + Authors: Gang Wang AND Professor Nicholas Sitar +
70  | |
71  | Department of Civil and Environmental Engineering |
72  + Univeristy of California, Berkeley, CA 94720, USA +
73  | |
74  | Email: wang@ce.berkeley.edu (G.W.) |
75  + +
76  | Disclaimers: |
77  | (1) Frame of this code is based on zeroLength element |
78  + (2) Questions regarding this code should be directed to Gang Wang +
79  | (3) Documentation could be found at |
80  | www.ce.berkeley.edu/~wang/OpenSees.html |
81  + +
82  | Development History: |
83  | Created -- Aug/27/2003 |
84  + Final Release -- June 2004 +
85  | |
86  | |
87  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----*/
88 
89 /* command
90 
91  element zeroLengthContact3D $eleID $sNdID $mNdID $Kn $Kt $fs $c $dir
92 
93  where:
94  $eleID: element ID of this contact element
95  $sNdID: slave node ID
96  $mNdID: master node ID
97  $Kn : penalty in normal directions
98  $Kt: : penalty in tangential directions
99  $c : cohesion
100  $dir : direction of the contact (0,1,2,3)
101  0: circular contact (slave node is inside)
102  1: out normal of master plane pointing to +X direction
103  2: out normal of master plane pointing to +Y direction
104  3: out normal of master plane pointing to +Z direction
105 
106  Description: This file contains the class definition for ZeroLengthContact3D.
107  (1) A ZeroLengthContact3D element is defined by two nodes with the same coordinate
108  in R^3
109  (2) Normal to the contact plane through these contact nodes is preset by the user
110  to be either circular or any of x,y,z axis.
111  (3) Penalty (Kn,Kt) is used to enforce the constraints, i.e.
112  No (in fact, very small) penetration in the normal direction, and
113  Coulomb frictional law in the tangential direction.
114  (4) Backward Euler return mapping scheme is used for implicit formulation of
115  residual and consistent tangent modulus.
116  (5) This element is a modified version of continuum-based implicit formulation
117  (Laursen and Simo,1993) for small deformation. Contact detection is simplified
118  to be only related to these two nodes, and contributions of geometric
119  nonlinearities to consistent tangent moudulus are neglected.
120 
121  References:
122  Laursen,T.A. and Simo, J.C. "A Continuum-based Finite Element Formulation for the
123  Implicit Solution of Multibody, Large Deformation Frictional Contact Problems".
124  Int. J. Numer. Methods Eng. , 36, 3451-3485 (1993)
125 
126  Armero, F. and Petocz, E. "A New Dissipative Time-Stepping Algorithm for Frictional
127  Contact Problems: Fromulation and Analysis", Comp. Methods Appl. Mech. Eng., 179,
128  151-178 (1999)
129 */
130 
131 
132 #include "ZeroLengthContact.h"
133 
134 namespace XC {
135 class Node;
136 class Channel;
137 class Response;
138 
140 //
143  {
144  private:
145  int directionID;
146  // parameters
147  double cohesion; // cohesion
148 
149  //contact point and contact plane stuffs
150  Vector stickPt; // (keci_1, keci_2)
151  mutable Vector xi;
152  Vector origin; // (x0,y0) for circular impact
153  //Tangental Vectors for Elemental Nodes, (6*1)
154  mutable Vector T1;
155  mutable Vector T2;
156 
157 
158  int contactDetect(void) const; // detect the contact and set flag
159  void formResidAndTangent(int tang_flag) const;//form residual and tangent
160 
161 
162  Matrix *Ki; // pointer to objects matrix (a class Matrix)
163 
164  //static variables for 3D contact
165  static Matrix stiff; // for stiff matrix
166  static Vector resid; // for force residual vector
167  static Matrix zeroMatrix;
168  public:
169  ZeroLengthContact3D(int tag= 0);
170  ZeroLengthContact3D(int tag,int Nd1, int Nd2,int direction, double Kn, double Kt, double fRatio, double c, double originX, double originY);
171  Element *getCopy(void) const;
172 
173  void setDomain(Domain *theDomain);
174 
175  // public methods to set the state of the element
176  int commitState(void);
177  int revertToLastCommit(void);
178  int revertToStart(void);
179  //int update(void);
180 
181  // public methods to obtain stiffness, mass, damping and residual information
182  const Matrix &getTangentStiff(void) const;
183  const Matrix &getInitialStiff(void) const;
184  const Matrix &getDamp(void) const;
185  const Matrix &getMass(void) const;
186 
187  const Vector &getResistingForce(void) const;
188  const Vector &getResistingForceIncInertia(void) const;
189 
190  // public methods for element output
191  int sendSelf(CommParameters &);
192  int recvSelf(const CommParameters &);
193  void Print(std::ostream &s, int flag =0);
194 
195  Response *setResponse(const std::vector<std::string> &argv, Information &eleInformation);
196  int getResponse(int responseID, Information &eleInformation);
197  };
198 } // end of XC namespace
199 
200 #endif
const Matrix & getMass(void) const
Returns the mass matrix.
Definition: ZeroLengthContact3D.cpp:220
Domain (mesh and boundary conditions) of the finite element model.
Definition: Domain.h:98
int commitState(void)
Consuma el estado of the element.
Definition: ZeroLengthContact3D.cpp:157
Definition: Vector.h:82
double Kn
normal penalty
Definition: ZeroLengthContact.h:56
Information about an element.
Definition: Information.h:80
const Vector & getResistingForceIncInertia(void) const
Returns the action of the element over its attached nodes. Computes damping matrix.
Definition: ZeroLengthContact3D.cpp:237
void Print(std::ostream &s, int flag=0)
Imprime el objeto.
Definition: ZeroLengthContact3D.cpp:261
Base calass for the finite elements.
Definition: Element.h:104
double Kt
tangential penalty
Definition: ZeroLengthContact.h:57
Zero length contact element.
Definition: ZeroLengthContact.h:43
Definition: Matrix.h:82
ZeroLengthContact3D(int tag=0)
Default constructor.
Definition: ZeroLengthContact3D.cpp:99
Element * getCopy(void) const
Virtual constructor.
Definition: ZeroLengthContact3D.cpp:105
Zero lenght element for 3D problems.
Definition: ZeroLengthContact3D.h:142
const Matrix & getDamp(void) const
Returns the matriz de amortiguamiento.
Definition: ZeroLengthContact3D.cpp:212
Communication parameters between processes.
Definition: CommParameters.h:65
================================================================================
Definition: ContinuaReprComponent.h:34
Definition: Response.h:71
void setDomain(Domain *theDomain)
Definition: ZeroLengthContact3D.cpp:112