AGX Dynamics 2.40.0.0
Loading...
Searching...
No Matches
FlowUnit.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or having been
9advised so by Algoryx Simulation AB for a time limited evaluation, or having purchased a
10valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
17#ifndef AGXHYDRAULICS_FLOW_UNIT_H
18#define AGXHYDRAULICS_FLOW_UNIT_H
19
22
23#include <agxPowerLine/Unit.h>
24#include <agxPowerLine/Sides.h>
25
26namespace agx
27{
28 class Constraint;
29}
30
31namespace agxSDK
32{
33 class Simulation;
34}
35
36namespace agxModel
37{
38 class DriveTrain;
39}
40
41
42
43
44namespace agxHydraulics
45{
48
49
67 {
68 public:
75 FlowUnit(agx::Real length, agx::Real area, agx::Real fluidDensity);
76
78 FlowUnit(agx::Real length, agx::Real area, agx::Real fluidDensity,
79 agx::RigidBody* body, agx::UInt8 elementIndex);
80
82
87 explicit FlowUnit(agx::Real inertia);
88
93 void setLength(agx::Real length);
94
98 agx::Real getLength() const;
99
105 bool setArea(agx::Real area);
106
110 agx::Real getArea() const;
111
116 void setFluidDensity(agx::Real density);
117
121 agx::Real getFluidDensity() const;
122
130 void setFluidViscosity(agx::Real viscosity);
131
135 agx::Real getFluidViscosity() const;
136
141 agx::Real getFlowRate() const;
142
153 void addPressure(agx::Real pressure, agxPowerLine::Side side);
154
166 agx::Real getPressure(agxPowerLine::Side side) const;
167
173 agx::Real getInputPressure() const;
174
179 agx::Real getInletPressure() const;
180
186 agx::Real getOutputPressure() const;
187
192 agx::Real getOutletPressure() const;
193
197 agxHydraulics::FlowDimension* getFlowDimension();
198
202 const agxHydraulics::FlowDimension* getFlowDimension() const;
203
204
209 virtual agxHydraulics::FlowConnector* getFlowConnector(agxPowerLine::Side side);
210
215 virtual const agxHydraulics::FlowConnector* getFlowConnector(agxPowerLine::Side side) const;
216
221 agxHydraulics::FlowConnector* getInputFlowConnector();
222
227 const agxHydraulics::FlowConnector* getInputFlowConnector() const;
228
233 agxHydraulics::FlowConnector* getOutputFlowConnector();
234
239 const agxHydraulics::FlowConnector* getOutputFlowConnector() const;
240
245 bool isConnected(agxPowerLine::Side end) const;
246
247 using Unit::isConnected;
248
253 static FlowConnector* findInCommonFlowConnector(FlowUnit* a, FlowUnit* b);
254
255
256 // Methods called by the rest of the PowerLine/Hydraulics frame work.
257 public:
264 virtual agx::Real computeFrictionLoss(agx::Real flowRate);
265
272 virtual void addTankPressure();
273
274#ifndef SWIG
278 virtual bool preUpdate(agx::Real timeStep) override;
279
283 virtual bool store(agxStream::StorageStream& str) const override;
284
288 virtual bool restore(agxStream::StorageStream& str) override;
289
291#endif
292
293 protected:
297 FlowUnit();
299
300 protected:
301 void init();
302
303 void updateBodyMass();
304
305 agx::Real computeReynoldsNumber() const;
306 static agx::Real computeReynoldsNumber(agx::Real area, agx::Real flowRate, agx::Real viscosity);
307 agx::Real computeFrictionFactor() const;
308 agx::Real computeLaminarFrictionalLoss(agx::Real flowRate) const;
309 agx::Real computeQuadraticFrictionalLoss(agx::Real flowCoefficient) const;
310 agx::Real updateFrictionLoss();
311
312 protected:
313 virtual ~FlowUnit() {}
314
315 protected:
317
318 private:
319 agx::Real m_length;
320 agx::Real m_area;
321
323 agx::Real m_fluidDensity;
324
326 agx::Real m_viscosity;
327 };
328
329}
330
331#endif
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGXSTREAM_DECLARE_SERIALIZABLE(T)
Use this in a Serializable class to add the required methods Important: Use full namespace in the dec...
Definition: Serializable.h:208
#define AGXHYDRAULICS_EXPORT
#define AGX_DECLARE_VECTOR_TYPES(type)
Definition: agx/Vector.h:34
A FlowConnector is a junction of a set of FlowUnits.
Definition: FlowConnector.h:40
A FlowDimension represents the flow of fluid through a FlowUnit.
Definition: FlowDimension.h:54
FlowUnit is the base class for Units that contains a FlowDimension.
Definition: FlowUnit.h:67
agxHydraulics::FlowDimensionRef m_flowDimension
Definition: FlowUnit.h:316
FlowUnit(agx::Real length, agx::Real area, agx::Real fluidDensity)
Create a FlowUnit with inertia calculated from the given parameters.
Pure virtual class.
Definition: Unit.h:72
Abstract base class for storing/restoring a line/drums with version control.
Definition: StorageStream.h:49
#define DOXYGEN_END_INTERNAL_BLOCK()
Definition: macros.h:89
#define DOXYGEN_START_INTERNAL_BLOCK()
Definition: macros.h:88
The agxHydraulics namespace contains classes for modeling hydraulic circuits within the power line fr...
Definition: Accumulator.h:28
Contain classes for higher level modeling primitives, such as Tree, Terrain etc.
Definition: FlowUnit.h:37
agxPowerLine contains a collection of connected components that transport power across a system.
Definition: MotorUnit.h:24
The agxSDK namespace contain classes to bridge the collision detection system and the dynamical simul...
Definition: Constraint.h:31
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
double Real
Definition: Real.h:42