forked from SAP-archive/fedem-mdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FmFrictionBase.C
118 lines (91 loc) · 3.65 KB
/
FmFrictionBase.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// SPDX-FileCopyrightText: 2023 SAP SE
//
// SPDX-License-Identifier: Apache-2.0
//
// This file is part of FEDEM - https://openfedem.org
////////////////////////////////////////////////////////////////////////////////
#include "vpmDB/FmFrictionBase.H"
#include "FFaLib/FFaString/FFaStringExt.H"
Fmd_DB_SOURCE_INIT(FcFRICTION_BASE, FmFrictionBase, FmParamObjectBase);
FmFrictionBase::FmFrictionBase() : FmParamObjectBase()
{
Fmd_CONSTRUCTOR_INIT(FmFrictionBase);
FFA_FIELD_INIT(myPrestressLoad , 0.0, "PRESTRESS_LOAD");
FFA_FIELD_INIT(myCoulombCoeff , 0.0, "COULOMB_COEFF");
FFA_FIELD_INIT(myStribeckMagn , 0.0, "STRIBECK_MAGN");
FFA_FIELD_INIT(myStribeckSpeed , 0.0, "STRIBECK_SPEED");
/* Removed for usability, not in use since R2.1.2
FFA_FIELD_INIT(myViscCoeff , 0.0, "VISC_COEFF");
FFA_FIELD_INIT(myAsymmetrMagn , 0.0, "ASYMMETRIC_MAGN");
FFA_FIELD_INIT(myFricAmpl , 0.0, "FRIC_AMPL");
FFA_FIELD_INIT(myFreq , 0.0, "FREQUENCY");
FFA_FIELD_INIT(myPhaseAngle , 0.0, "PHASE_ANGLE");
*/
}
FmFrictionBase::~FmFrictionBase()
{
this->disconnect();
}
double FmFrictionBase::getStickStiffness() const
{
// Beta feature: friction spring
return FFaString(this->getUserDescription()).getDoubleAfter("#Kstick");
}
void FmFrictionBase::getParameters(std::vector<FmParameter>& retArray) const
{
M_APPEND_PARAMS("Coulomb coefficient",CoulombCoeff,FmFrictionBase,retArray);
M_APPEND_PARAMS("Magnitude of Stribeck effect, S",StribeckMagn,FmFrictionBase,retArray);
M_APPEND_PARAMS("Critical Stribeck speed, Vslip",StribeckSpeed,FmFrictionBase,retArray);
/* Removed for usability
M_APPEND_PARAMS("Viscous friction coefficient",ViscCoeff,FmFrictionBase,retArray);
M_APPEND_PARAMS("Magnitude of asymmetries, %",AsymmetrMagn,FmFrictionBase,retArray);
M_APPEND_PARAMS("Friction amplitude",FricAmpl,FmFrictionBase,retArray);
M_APPEND_PARAMS("Frequency",Freq,FmFrictionBase,retArray);
M_APPEND_PARAMS("Phase Angle",PhaseAngle,FmFrictionBase,retArray);
*/
}
int FmFrictionBase::printSolverEntry(FILE* fp)
{
fprintf(fp,"&FRICTION_SET\n");
this->printID(fp);
fprintf(fp," type = '%s'\n", this->getFrictionFsiName());
std::vector<double> vars;
this->getTypeDepVars(vars);
if (!vars.empty())
{
fprintf(fp," typeDepParams =");
for (size_t i = 0; i < vars.size(); i++)
fprintf(fp," %14.6e", vars[i]);
fprintf(fp,"\n");
}
fprintf(fp," PrestressLoad = %14.6e\n", myPrestressLoad.getValue());
fprintf(fp," CoulombCoeff = %14.6e\n", myCoulombCoeff.getValue());
fprintf(fp," StribeckMagn = %14.6e\n", myStribeckMagn.getValue());
fprintf(fp," StribeckSpeed = %14.6e\n", myStribeckSpeed.getValue());
/* Removed for usability, not in use since R2.1.2
fprintf(fp," ViscCoeff = %14.6e\n", myViscCoeff.getValue());
fprintf(fp," AsymMagn = %14.6e\n", myAsymmetrMagn.getValue());
fprintf(fp," FricAmpl = %14.6e\n", myFricAmpl.getValue());
fprintf(fp," FricFreq = %14.6e\n", myFreq.getValue());
fprintf(fp," FricPhase = %14.6e\n", myPhaseAngle.getValue());
*/
// Beta feature: friction spring
FFaString fDesc = this->getUserDescription();
if (fDesc.hasSubString("#Kstick"))
fprintf(fp," StickStiffness = %14.6e\n", fDesc.getDoubleAfter("#Kstick"));
fprintf(fp,"/\n\n");
return 0;
}
bool FmFrictionBase::localParse(const char* keyWord, std::istream& activeStatement,
FmFrictionBase* obj)
{
return parentParse(keyWord, activeStatement, obj);
}
bool FmFrictionBase::cloneLocal(FmBase* obj, int depth)
{
if (!obj->isOfType(FmFrictionBase::getClassTypeID()))
return false;
if (depth == FmBase::DEEP_REPLACE)
obj->releaseReferencesToMe("myFriction",this);
return true;
}