23 #include "mbsim/link.h"
24 #include <mbsim/functions/function.h>
26 #ifdef HAVE_OPENMBVCPPINTERFACE
27 #include <mbsim/utils/boost_parameters.h>
28 #include <mbsim/utils/openmbv_utils.h>
36 class GeneralizedForceLaw;
37 class GeneralizedImpactLaw;
40 namespace MBSimControl {
44 namespace MBSimHydraulics {
46 BOOST_PARAMETER_NAME(size)
47 BOOST_PARAMETER_NAME(minimalPressure)
48 BOOST_PARAMETER_NAME(maximalPressure)
49 BOOST_PARAMETER_NAME(position)
64 HNode(
const std::string &name);
66 virtual std::string getType()
const {
return "HNode"; }
68 #ifdef HAVE_OPENMBVCPPINTERFACE
69 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBVSphere, tag, (optional (size,(
double),1)(minimalPressure,(
double),0e5)(maximalPressure,(
double),10e5)(position,(
const fmatvec::Vec3&),fmatvec::Vec3()))) {
70 enableOpenMBV(size,minimalPressure,maximalPressure,position);
72 virtual void enableOpenMBV(
double size,
double pMin,
double pMax,
const fmatvec::Vec3 &WrON);
75 void addInFlow(
HLine * in);
76 void addOutFlow(
HLine * out);
78 void calcgdSize(
int j) {gdSize=1; }
80 void init(InitStage stage);
82 virtual void updateWRef(
const fmatvec::Mat& WRef,
int i=0);
83 virtual void updateVRef(
const fmatvec::Mat& VRef,
int i=0);
84 virtual void updatehRef(
const fmatvec::Vec& hRef,
int i=0);
85 virtual void updaterRef(
const fmatvec::Vec& rRef,
int i=0);
86 virtual void updatedhdqRef(
const fmatvec::Mat& dhdqRef,
int i=0);
88 virtual void updatedhdtRef(
const fmatvec::Vec& dhdtRef,
int i=0);
90 void updateh(
double t,
int j=0);
91 void updatedhdz(
double t);
92 virtual void updater(
double t,
int j);
93 virtual void updateg(
double t) {};
94 virtual void updategd(
double t);
95 virtual bool isActive()
const {
return false; }
96 virtual bool gActiveChanged() {
return false; }
99 void plot(
double t,
double dt);
101 void initializeUsingXML(xercesc::DOMElement *element);
104 std::vector<connectedLinesStruct> connectedLines;
105 std::vector<connectedLinesStruct> connected0DOFLines;
106 std::vector<std::string> refInflowString;
107 std::vector<std::string> refOutflowString;
110 #ifdef HAVE_OPENMBVCPPINTERFACE
111 boost::shared_ptr<OpenMBV::Group> openMBVGrp;
112 boost::shared_ptr<OpenMBV::Sphere> openMBVSphere;
123 virtual std::string getType()
const {
return "ConstrainedNode"; }
125 void setpFunction(MBSim::Function<
double(
double)> * pFun_) {
127 pFun->setParent(
this);
131 void updateg(
double t);
132 void init(InitStage stage);
133 void initializeUsingXML(xercesc::DOMElement *element);
134 virtual bool isSingleValued()
const {
return true;}
137 MBSim::Function<double(double)> * pFun;
145 virtual std::string getType()
const {
return "EnvironmentNode"; }
147 void init(InitStage stage);
149 virtual bool isSingleValued()
const {
return true;}
156 ElasticNode(
const std::string &name=
"") :
HNode(name), V(0), E(0), fracAir(0), p0(0), bulkModulus(NULL) {}
158 virtual std::string getType()
const {
return "ElasticNode"; }
160 void setVolume(
double V_) {V=V_; }
161 void setFracAir(
double fracAir_) {fracAir=fracAir_; }
162 void setp0(
double p0_) {p0=p0_; }
164 void calcxSize() {xSize=1; }
166 void init(InitStage stage);
167 void initializeUsingXML(xercesc::DOMElement *element);
171 void updatexd(
double t);
172 void updatedx(
double t,
double dt);
174 void plot(
double t,
double dt);
176 virtual bool isSingleValued()
const {
return true;}
191 virtual std::string getType()
const {
return "RigidNode"; }
193 bool isSetValued()
const {
return true; }
194 virtual bool isActive()
const {
return true; }
196 void calclaSize(
int j) {laSize=1; }
198 void calcrFactorSize(
int j) {rFactorSize=1; }
200 void updategd(
double t);
201 void updateW(
double t,
int j=0);
203 void updaterFactors();
204 void solveImpactsFixpointSingle(
double dt);
205 void solveConstraintsFixpointSingle();
206 void solveImpactsGaussSeidel(
double dt);
207 void solveConstraintsGaussSeidel();
208 void solveImpactsRootFinding(
double dt);
209 void solveConstraintsRootFinding();
210 void jacobianImpacts();
211 void jacobianConstraints();
212 void checkImpactsForTermination(
double dt);
213 void checkConstraintsForTermination();
226 virtual std::string getType()
const {
return "RigidCavitationNode"; }
228 void setCavitationPressure(
double pCav_) {pCav=pCav_; }
230 bool isSetValued()
const {
return true; }
231 bool hasSmoothPart()
const {
return true; }
232 virtual bool isActive()
const {
return active; }
234 void calcxSize() {xSize=1; }
235 void calcgSize(
int j) {gSize=1; }
237 void calclaSize(
int j) {laSize=1; }
239 void calcrFactorSize(
int j) {rFactorSize=1; }
240 void calcsvSize() {svSize=1; }
242 void init(InitStage stage);
243 void initializeUsingXML(xercesc::DOMElement *element);
244 void plot(
double t,
double dt);
246 void checkActive(
int j);
248 bool gActiveChanged();
250 void updateg(
double t);
251 void updateh(
double t,
int j=0);
252 void updateStopVector(
double t);
253 void updateW(
double t,
int j=0);
254 void updatexd(
double t);
255 void updatedx(
double t,
double dt);
258 void updaterFactors();
259 void solveImpactsFixpointSingle(
double dt);
260 void solveConstraintsFixpointSingle();
261 void solveImpactsGaussSeidel(
double dt);
262 void solveConstraintsGaussSeidel();
263 void solveImpactsRootFinding(
double dt);
264 void solveConstraintsRootFinding();
265 void jacobianImpacts();
266 void jacobianConstraints();
267 void checkImpactsForTermination(
double dt);
268 void checkConstraintsForTermination();
272 bool active, active0;
282 PressurePump(
const std::string &name=
"") :
HNode(name), pSignal(NULL), pSignalString(
"") {}
283 virtual std::string getType()
const {
return "PressurePump"; }
287 void updateg(
double t);
288 void init(InitStage stage);
289 void initializeUsingXML(xercesc::DOMElement *element);
293 std::string pSignalString;
Definition: environment.h:98