Simbody  3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Force_Gravity.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMBODY_FORCE_GRAVITY_H_
2 #define SimTK_SIMBODY_FORCE_GRAVITY_H_
3 
4 /* -------------------------------------------------------------------------- *
5  * Simbody(tm) *
6  * -------------------------------------------------------------------------- *
7  * This is part of the SimTK biosimulation toolkit originating from *
8  * Simbios, the NIH National Center for Physics-Based Simulation of *
9  * Biological Structures at Stanford, funded under the NIH Roadmap for *
10  * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11  * *
12  * Portions copyright (c) 2010-13 Stanford University and the Authors. *
13  * Authors: Michael Sherman *
14  * Contributors: *
15  * *
16  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17  * not use this file except in compliance with the License. You may obtain a *
18  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19  * *
20  * Unless required by applicable law or agreed to in writing, software *
21  * distributed under the License is distributed on an "AS IS" BASIS, *
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23  * See the License for the specific language governing permissions and *
24  * limitations under the License. *
25  * -------------------------------------------------------------------------- */
26 
27 #include "SimTKcommon.h"
28 #include "simbody/internal/Force.h"
29 
35 namespace SimTK {
36 
71 public:
72 
73 
74 //------------------------------------------------------------------------------
87 
88 
126  const SimbodyMatterSubsystem& matter,
127  const UnitVec3& down,
128  Real g,
129  Real zeroHeight = 0);
130 
159  const SimbodyMatterSubsystem& matter,
160  const Vec3& gravity);
161 
187  const SimbodyMatterSubsystem& matter,
188  Real g);
189 
192 
210 Gravity& setDefaultBodyIsExcluded(MobilizedBodyIndex mobod, bool isExcluded);
211 
221 Gravity& setDefaultGravityVector(const Vec3& gravity);
222 
231 Gravity& setDefaultDownDirection(const UnitVec3& down);
237 { return setDefaultDownDirection(UnitVec3(down)); }
238 
249 Gravity& setDefaultMagnitude(Real g);
250 
259 Gravity& setDefaultZeroHeight(Real zeroHeight);
260 
270 bool getDefaultBodyIsExcluded(MobilizedBodyIndex mobod) const;
273 Vec3 getDefaultGravityVector() const;
276 const UnitVec3& getDefaultDownDirection() const;
278 Real getDefaultMagnitude() const;
281 Real getDefaultZeroHeight() const;
282 
287 //------------------------------------------------------------------------------
304 
323 const Gravity& setBodyIsExcluded(State& state, MobilizedBodyIndex mobod,
324  bool isExcluded) const;
325 
341 const Gravity& setGravityVector(State& state, const Vec3& gravity) const;
342 
356 const Gravity& setDownDirection(State& state,
357  const UnitVec3& down) const;
362  const Vec3& down) const
363 { return setDownDirection(state, UnitVec3(down)); }
364 
378 const Gravity& setMagnitude(State& state, Real g) const;
379 
392 const Gravity& setZeroHeight(State& state, Real hz) const;
393 
406 bool getBodyIsExcluded(const State& state, MobilizedBodyIndex mobod) const;
415 Vec3 getGravityVector(const State& state) const;
423 const UnitVec3& getDownDirection(const State& state) const;
431 Real getMagnitude(const State& state) const;
440 Real getZeroHeight(const State& state) const;
441 
446 //------------------------------------------------------------------------------
455 
466 Real getPotentialEnergy(const State& state) const;
467 
492 const Vector_<SpatialVec>& getBodyForces(const State& state) const;
493 
505 const SpatialVec&
506 getBodyForce(const State& state, MobilizedBodyIndex mobod) const
507 { return getBodyForces(state)[mobod]; }
508 
509 // Particles aren't supported yet so don't show this in Doxygen.
516 const Vector_<Vec3>& getParticleForces(const State& state) const;
519 
521 //------------------------------------------------------------------------------
533 long long getNumEvaluations() const;
534 
538 bool isForceCacheValid(const State& state) const;
539 
543 void invalidateForceCache(const State& state) const;
546 // Don't show this in Doxygen.
550 };
551 
552 } // namespace SimTK
553 
554 #endif // SimTK_SIMBODY_FORCE_GRAVITY_H_
This is the base class from which all Force element handle classes derive.
Definition: Force.h:50
This is for arrays indexed by mobilized body number within a subsystem (typically the SimbodyMatterSu...
UnitVec< Real, 1 > UnitVec3
Definition: UnitVec.h:41
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
This force element represents a uniform gravitational field applied to a set of bodies.
Definition: Force_Gravity.h:70
const Gravity & setDownDirection(State &state, const Vec3 &down) const
Convenience overload that takes the down direction as a Vec3 and normalizes it (throwing away the mag...
Definition: Force_Gravity.h:361
Gravity & setDefaultDownDirection(const Vec3 &down)
Convenience overload that takes the down direction as a Vec3 and normalizes it (throwing away the mag...
Definition: Force_Gravity.h:236
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:577
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:276
Includes internal headers providing declarations for the basic SimTK Core classes, including Simmatrix.
#define SimTK_INSERT_DERIVED_HANDLE_DECLARATIONS(DERIVED, DERIVED_IMPL, PARENT)
Definition: PrivateImplementation.h:343
const SpatialVec & getBodyForce(const State &state, MobilizedBodyIndex mobod) const
Convenience method to extract the gravitational force on just one body; see getBodyForces() to get th...
Definition: Force_Gravity.h:506
This is the vector class intended to appear in user code for large, variable size column vectors...
Definition: BigMatrix.h:171
Gravity()
Default constructor creates an empty handle.
Definition: Force_Gravity.h:191
This is a concrete subsystem which can apply arbitrary forces to a MultibodySystem.
Definition: GeneralForceSubsystem.h:47
#define SimTK_SIMBODY_EXPORT
Definition: Simbody/include/simbody/internal/common.h:72
This subsystem contains the bodies ("matter") in the multibody system, the mobilizers (joints) that d...
Definition: SimbodyMatterSubsystem.h:133