OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
intmatcoulombcontact.h
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #ifndef inmatcoulombcontact_h
36 #define inmatcoulombcontact_h
37 
38 #include "material.h"
41 
43 
44 #define _IFT_IntMatCoulombContact_Name "intmatcoulombcontact"
45 #define _IFT_IntMatCoulombContact_kn "kn"
46 #define _IFT_IntMatCoulombContact_frictCoeff "frictcoeff"
47 #define _IFT_IntMatCoulombContact_stiffCoeff "stiffcoeff"
48 #define _IFT_IntMatCoulombContact_normalClearance "normalclearance"
49 
50 
51 namespace oofem {
59 {
60 protected:
62 
63 public:
68 
69  virtual void printOutputAt(FILE *file, TimeStep *tStep);
70 
71  virtual void initTempStatus();
72  virtual void updateYourself(TimeStep *tStep);
73 
75  void setTempShearStressShift(FloatArray newShearStressShift) { tempShearStressShift = newShearStressShift; }
76 
77  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj = NULL);
78  virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj = NULL);
79 };
80 
81 
93 {
94 protected:
95  // Normal stiffness
96  double kn;
97  // Reduction factor of normal stiffness when material goes to tension
98  double stiffCoeff;
99  // Friction coefficient
100  double frictCoeff;
103 
104 public:
106  IntMatCoulombContact( int n, Domain *d );
108  virtual ~IntMatCoulombContact();
109 
110  virtual int hasNonLinearBehaviour() { return 1; }
111  virtual const char *giveInputRecordName() const { return _IFT_IntMatCoulombContact_Name; }
112 
113  virtual void giveEngTraction_3d( FloatArray &answer, GaussPoint *gp,
114  const FloatArray &jump, TimeStep *tStep);
115 
116  virtual void giveEngTraction_2d( FloatArray &answer, GaussPoint *gp,
117  const FloatArray &jump, TimeStep *tStep);
118 
119  virtual void giveEngTraction_1d( FloatArray &answer, GaussPoint *gp,
120  const FloatArray &jump, TimeStep *tStep);
121 
123  GaussPoint *gp, TimeStep *tStep)
124  { this->giveGeneralStiffnessMatrix(answer, rMode, gp, tStep, 3); }
125 
127  GaussPoint *gp, TimeStep *tStep)
128  { this->giveGeneralStiffnessMatrix(answer, rMode, gp, tStep, 2); }
129 
131  GaussPoint *gp, TimeStep *tStep)
132  { this->giveGeneralStiffnessMatrix(answer, rMode, gp, tStep, 1); }
133 
134  // This method returns the stiffness matrix according to the size of
135  // the spatial jump.
136  void giveGeneralStiffnessMatrix(FloatMatrix &answer,
137  MatResponseMode rMode,
138  GaussPoint *gp,
139  TimeStep *tStep, int numSpaceDim);
140 
141  void computeEngTraction(double &normalStress, FloatArray &shearStress,
143  double normalJump, const FloatArray &shearJump );
144 
146  virtual void giveInputRecord(DynamicInputRecord &input);
147  virtual bool hasAnalyticalTangentStiffness( ) const { return true; }
148 
149  virtual MaterialStatus *CreateStatus(GaussPoint *gp) const { return new IntMatCoulombContactStatus(1, domain, gp); }
150 };
151 } // end namespace oofem
152 #endif // simpleinterfacemat_h
IntMatCoulombContactStatus(int n, Domain *d, GaussPoint *g)
Constructor.
GaussPoint * gp
Associated integration point.
Class and object Domain.
Definition: domain.h:115
double normalClearance
Normal distance which needs to be closed when interface element should act in compression (distance i...
virtual void give1dStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Definition: femcmpnn.h:82
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
virtual bool hasAnalyticalTangentStiffness() const
Tells if the model has implemented analytical tangent stiffness.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Definition: femcmpnn.C:77
MatResponseMode
Describes the character of characteristic material matrix.
virtual ~IntMatCoulombContactStatus()
Destructor.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: matstatus.h:140
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
This class implements associated Material Status to IntMatCoulombContact.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
This class implements a structural interface material status information.
FloatArray jump
Equilibrated jump (discontinuity)
virtual void give2dStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Abstract base class representing a material status information.
Definition: matstatus.h:84
virtual void give3dStiffnessMatrix_Eng(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual int hasNonLinearBehaviour()
Returns nonzero if receiver is non linear.
This class represents a "simple" interface material which is linear elastic in the normal direction...
Class representing the general Input Record.
Definition: inputrecord.h:101
Class representing the a dynamic Input Record.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
virtual const char * giveInputRecordName() const
Abstract base class for all "structural" interface models.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
void setTempShearStressShift(FloatArray newShearStressShift)
#define _IFT_IntMatCoulombContact_Name

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011