OOFEM 3.0
Loading...
Searching...
No Matches
cohint.C
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 - 2025 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#include "cohint.h"
36#include "gausspoint.h"
37#include "floatmatrix.h"
38#include "floatarray.h"
39#include "mathfem.h"
40#include "contextioerr.h"
41#include "classfactory.h"
42#include "dynamicinputrecord.h"
43
44namespace oofem {
45
47
48CohesiveInterfaceMaterial :: CohesiveInterfaceMaterial(int n, Domain *d) : StructuralInterfaceMaterial(n, d) { }
49
51CohesiveInterfaceMaterial :: giveEngTraction_3d(const FloatArrayF<3> &jump, GaussPoint *gp, TimeStep *tStep) const
52{
54
55 double x = jump.at(1) + transitionOpening;
56
57 FloatArrayF<3> answer;
58
59 if ( stiffCoeffKn == 1. ){ //tension stiffness = compression stiffness
60 answer.at(1) = kn*x;
61 } else {
62 //composed function from two atan's to have smooth intersection between tension and compression
63 answer.at(1) = (M_PI/2. + atan(smoothMag*x))/M_PI*kn*stiffCoeffKn*x + (M_PI/2.-atan(smoothMag*x))/M_PI*kn*x;
64 }
65
66 // shear part of elastic stress-strain law
67 answer.at(2) = ks * jump.at(2);
68 answer.at(3) = ks * jump.at(3);
69
70 // update gp
71 status->letTempJumpBe(jump);
72 status->letTempTractionBe(answer);
73 return answer;
74}
75
76
78CohesiveInterfaceMaterial :: give3dStiffnessMatrix_Eng(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
79{
81
82// double normalJump = status->giveTempJump().at(1);
83// if (normalJump > 0.) {
84// if(normalJump<transitionOpening){ // reduce traction in tension
85// double stiffTmp = kn*stiffCoeffKn + (kn - kn*stiffCoeffKn) * (1. - normalJump/transitionOpening);
86// answer.at(1, 1) = stiffTmp;
87// } else {
88// answer.at(1, 1) = kn * stiffCoeffKn;
89// }
90// } else {
91// // standard part of elastic stress-strain law
92// answer.at(1, 1) = kn;
93// }
94//
95// if ( rMode == SecantStiffness || rMode == TangentStiffness ) {
96// if ( normalJump + transitionOpening <= 0. ) { //local CS
97// answer.at(1, 1) = kn; //compression
98// } else {
99// answer.at(1, 1) = 0*kn*stiffCoeffKn; //tension
100// }
101// } else {
102// answer.at(1, 1) = kn;
103// }
104
105 double x = status->giveTempJump().at(1) + transitionOpening;
106
107 double normal;
108 if ( stiffCoeffKn == 1. ) { //tension stiffness = compression stiffness
109 normal = kn;
110 } else {
111 //TangentStiffness by derivating traction with regards to x (=relative displacement)
112 normal = (M_PI/2. + atan(smoothMag*x))/M_PI*kn*stiffCoeffKn + (M_PI/2.-atan(smoothMag*x))/M_PI*kn + smoothMag*kn*stiffCoeffKn*x/M_PI/(smoothMag*smoothMag*x*x+1) - smoothMag*kn*x/M_PI/(smoothMag*smoothMag*x*x+1);
113 }
114
115 return diag<3>({normal, ks, ks});
116}
117
118
119void
120CohesiveInterfaceMaterial :: initializeFrom(InputRecord &ir)
121{
122 StructuralInterfaceMaterial :: initializeFrom(ir);
123
124 // elastic parameters
127 // compliance when in tension
128 stiffCoeffKn = 1.;
132
133 smoothMag = 1.e+8;
135}
136
137void
138CohesiveInterfaceMaterial :: giveInputRecord(DynamicInputRecord &input)
139{
140 StructuralInterfaceMaterial :: giveInputRecord(input);
145}
146
147} // namespace oofem
#define REGISTER_Material(class)
double kn
Elastic properties (normal and shear moduli).
Definition cohint.h:60
double stiffCoeffKn
Reduction of normal stiffness when in tension.
Definition cohint.h:63
double transitionOpening
Opening when material stiffness changes from kn to kn*stiffCoeffKn.
Definition cohint.h:66
void setField(int item, InputFieldType id)
double & at(std::size_t i)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Definition material.C:206
const FloatArrayF< 3 > & giveTempJump() const
Returns the const pointer to receiver's temporary jump.
void letTempTractionBe(const FloatArrayF< 3 > v)
Assigns tempTraction to given vector v.
void letTempJumpBe(const FloatArrayF< 3 > v)
Assigns tempJump to given vector v.
#define _IFT_CohesiveInterfaceMaterial_stiffCoeffKn
Definition cohint.h:48
#define _IFT_CohesiveInterfaceMaterial_smoothMag
Definition cohint.h:49
#define _IFT_CohesiveInterfaceMaterial_kn
Definition cohint.h:45
#define _IFT_CohesiveInterfaceMaterial_transitionopening
Definition cohint.h:46
#define _IFT_CohesiveInterfaceMaterial_ks
Definition cohint.h:47
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Definition inputrecord.h:75
#define IR_GIVE_FIELD(__ir, __value, __id)
Definition inputrecord.h:67
#define M_PI
Definition mathfem.h:52
FloatMatrixF< N, N > diag(const FloatArrayF< N > &v)

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011