Simbody  3.8
GeneralForceSubsystem.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMBODY_GENERAL_FORCE_ELEMENTS_H_
2 #define SimTK_SIMBODY_GENERAL_FORCE_ELEMENTS_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) 2006-12 Stanford University and the Authors. *
13  * Authors: Michael Sherman *
14  * Contributors: Chris Dembia, Thomas Lau *
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 
29 
30 #include <cassert>
31 
32 namespace SimTK {
33 
34 class MultibodySystem;
35 class SimbodyMatterSubsystem;
36 class Force;
37 
48 public:
51 
65 
68  int getNumForces() const;
69 
71  const Force& getForce(ForceIndex index) const;
72 
75 
78  bool isForceDisabled(const State& state, ForceIndex index) const;
79 
87  (State& state, ForceIndex index, bool shouldBeDisabled) const;
88 
96  void setNumberOfThreads(unsigned numThreads);
97 
104  int getNumberOfThreads() const;
105 
141  const State& s, const Array_<ForceIndex>& forceIndexes,
142  Vector_<SpatialVec>& bodyForces, Vector& mobilityForces) const;
143 
149  // don't show in Doxygen docs
153 private:
154  // OBSOLETE; use getNumForces() instead.
155  int getNForces() const {return getNumForces();}
156 
157  class GeneralForceSubsystemRep& updRep();
158  const GeneralForceSubsystemRep& getRep() const;
159 };
160 
161 } // namespace SimTK
162 
163 #endif // SimTK_SIMBODY_GENERAL_FORCE_ELEMENTS_H_
#define SimTK_PIMPL_DOWNCAST(Derived, Parent)
Similar to the above but for private implementation abstract classes, that is, abstract class hierarc...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:594
Every Simbody header and source file should include this header before any other Simbody header.
#define SimTK_SIMBODY_EXPORT
Definition: Simbody/include/simbody/internal/common.h:68
The Array_<T> container class is a plug-compatible replacement for the C++ standard template library ...
Definition: Array.h:1520
This type represents the index of a Force element within its subsystem.
This is logically an abstract class, more specialized than "Subsystem" but not yet concrete.
Definition: ForceSubsystem.h:36
This is the base class from which all Force element handle classes derive.
Definition: Force.h:50
This is a concrete subsystem which can apply arbitrary forces to a MultibodySystem.
Definition: GeneralForceSubsystem.h:47
const MultibodySystem & getMultibodySystem() const
Every Subsystem is owned by a System; a GeneralForceSubsystem expects to be owned by a MultibodySyste...
void setNumberOfThreads(unsigned numThreads)
Set the number of threads that the GeneralForceSubsystem can use to calculate computationally expensi...
int getNumberOfThreads() const
Returns the number of threads that the GeneralForceSubsystem can use to calculate computationally exp...
int getNumForces() const
Get the number of force elements which have been added to this Subsystem.
void calcForceContributionsSum(const State &s, const Array_< ForceIndex > &forceIndexes, Vector_< SpatialVec > &bodyForces, Vector &mobilityForces) const
Calculate the sum of forces that would be applied by the force elements if the given state were reali...
GeneralForceSubsystem(MultibodySystem &)
bool isForceDisabled(const State &state, ForceIndex index) const
Find out whether a particular force element contained in this subsystem is currently disabled in the ...
Force & updForce(ForceIndex index)
Get a writable reference to a force element by index.
void setForceIsDisabled(State &state, ForceIndex index, bool shouldBeDisabled) const
Disable or enable a particular force element contained in this subsystem.
const Force & getForce(ForceIndex index) const
Get a const reference to a force element by index.
ForceIndex adoptForce(Force &force)
Attach a new force to this subsystem.
The job of the MultibodySystem class is to coordinate the activities of various subsystems which can ...
Definition: MultibodySystem.h:48
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:280
This is the vector class intended to appear in user code for large, variable size column vectors.
Definition: Vector_.h:50
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37