forked from SAP-archive/fedem-mdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FmHasDOFsBase.H
113 lines (83 loc) · 3.05 KB
/
FmHasDOFsBase.H
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
// SPDX-FileCopyrightText: 2023 SAP SE
//
// SPDX-License-Identifier: Apache-2.0
//
// This file is part of FEDEM - https://openfedem.org
////////////////////////////////////////////////////////////////////////////////
#ifndef FM_HAS_DOFS_BASE_H
#define FM_HAS_DOFS_BASE_H
#include "vpmDB/FmIsPositionedBase.H"
#include "vpmDB/FmDofLoad.H"
#include "vpmDB/FmDofMotion.H"
class FmHasDOFsBase : public FmIsPositionedBase
{
Fmd_DB_HEADER_INIT();
public:
// Load and Prescribed Motion management
bool setLoadAtDOF (int dof, FmDofLoad* load, bool forceReplace = false);
bool setMotionAtDOF(int dof, FmDofMotion* pm, bool forceReplace = false);
FmDofLoad* getLoadAtDOF(int dof, bool createIfNone = false);
virtual FmDofMotion* getMotionAtDOF(int dof, bool createIfNone = false);
int getLoadBaseID (int dof) const;
int getMotionBaseID(int dof) const;
void releaseLoadAtDOF (int dof);
void releaseMotionAtDOF(int dof);
int atWhatDOF(const FmDofLoad* load) const;
int atWhatDOF(const FmDofMotion* pm) const;
virtual void initAfterResolve();
// DOF management
enum DOFType {
X_TRANS = 0,
Y_TRANS = 1,
Z_TRANS = 2,
X_ROT = 3,
Y_ROT = 4,
Z_ROT = 5,
MAX_DOF = 6
};
enum DOFStatus {
FREE,
FIXED,
PRESCRIBED,
FREE_DYNAMICS,
SPRING_CONSTRAINED,
SPRING_DYNAMICS
};
FFaEnumMapping(DOFStatus) {
FFaEnumEntry( FREE, "FREE");
FFaEnumEntry( FIXED, "FIXED");
FFaEnumEntry( PRESCRIBED, "PRESCRIBED");
FFaEnumEntry( FREE_DYNAMICS, "FREE_DYNAMICS");
FFaEnumEntry( SPRING_CONSTRAINED, "SPRING_CONSTRAINED");
FFaEnumEntry( SPRING_DYNAMICS, "SPRING_CONSTR_DYN");
FFaEnumEntryEnd;
};
friend std::ostream& operator<<(std::ostream& s, const std::vector<DOFStatusEnum>& obj);
friend std::istream& operator>>(std::istream& s, std::vector<DOFStatusEnum>& obj);
void getDOFs(std::vector<int>& dofs) const;
bool setStatusForDOF(int dof, int status);
int getStatusCode(int dof) const; // 0=fixed, 1=free, 2=additional BC
virtual bool setStatusForDOF(int dof, DOFStatus status) = 0;
virtual DOFStatus getStatusOfDOF(int dof) const = 0;
virtual bool isLegalDOF(int dof) const = 0;
virtual bool hasConstraints(bool fixedOnly = false) const = 0;
virtual bool isSuppressed() const = 0;
virtual void setInitVel(int dof, double vel) = 0;
double getInitVel(int dof, bool includeFixed = false) const;
double getInitAcc(int dof, bool includeFixed = false) const;
virtual void updateChildrenDisplayTopology();
protected:
FmHasDOFsBase();
virtual ~FmHasDOFsBase();
void completeInitDOFs();
static bool localParse(const char* keyWord, std::istream& activeStatement,
FmHasDOFsBase* obj);
virtual bool cloneLocal(FmBase* obj, int depth);
FFaReference<FmDofLoad> myLoads[MAX_DOF];
FFaReference<FmDofMotion> myMotions[MAX_DOF];
FFaField<FFaReferenceBase*> myLoadFields[MAX_DOF];
FFaField<FFaReferenceBase*> myMotionFields[MAX_DOF];
FFaField< std::vector<double> > initVel;
FFaField< std::vector<double> > initAcc;
};
#endif