Itasca C++ Interface
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
iclump.h
Go to the documentation of this file.
1 #pragma once
2 
7 #include "base/src/farray.h"
8 
9 namespace itasca {
10  class IThing;
11  class IGroup;
12  class IContainer;
13 }
14 namespace itascaxd {
15  class IPiece;
16  class IPieceMechanical;
17  class IContact;
18  class IBody;
19  class IBodyMechanical;
20  class IRigidBodyMechanical;
21 }
22 
23 namespace pfc {
24  using namespace itasca;
25  using namespace itascaxd;
26  class IPebble;
27  class ITriPoly;
28  class IClumpTemplate;
29 
37  class IClump {
38  public:
40  inline static const TType type_ = 0x4e665ed6;
41 
43  virtual IThing * getIThing() = 0;
45  virtual const IThing * getIThing() const = 0;
47  virtual IClump * getNext() = 0;
49  virtual const IClump * getNext() const = 0;
51  virtual IPiece * getFirstIPiece() = 0;
53  virtual const IPiece * getFirstIPiece() const = 0;
55  virtual IPebble * getFirstPebble() = 0;
57  virtual const IPebble * getFirstPebble() const = 0;
59  virtual IPieceMechanical * getFirstIPieceMechanical() = 0;
61  virtual const IPieceMechanical * getFirstIPieceMechanical() const = 0;
63  virtual IBody * getIBody() = 0;
65  virtual const IBody * getIBody() const = 0;
67  virtual IBodyMechanical * getIBodyMechanical() = 0;
69  virtual const IBodyMechanical * getIBodyMechanical() const = 0;
71  virtual IRigidBodyMechanical * getIRigidBodyMechanical() = 0;
73  virtual const IRigidBodyMechanical *getIRigidBodyMechanical() const = 0;
74 
76  virtual uint getNumberPebbles() const=0;
78  virtual void getPebbleList(FArray<IPebble *> *)=0;
80  virtual void getPebbleList(FArray<const IPebble *> *) const=0;
82  virtual double getSurfaceScaleFactor() const = 0;
85  virtual double getMoiComp(int) const = 0;
88  virtual double getInertialMoiComp(int) const = 0;
89 #ifdef THREED
90  virtual SymTensor getInertialMoiTensor() const = 0;
92  virtual SymTensor getMoiTensor() const = 0;
93 #endif
94  virtual DAVect getMoi() const=0;
97  virtual DAVect getInertialMoi() const=0;
98 
100  virtual void setMoiComp(const double &,int) = 0;
102  virtual void setMoi(const DAVect &)=0;
103 
106  virtual bool rotate(const DVect &rotp,const DVect &axis,const double &w,bool update=true,bool noThrow = false) = 0;
108  virtual bool scale(const double &)=0;
109 
111  virtual void getContactList(FArray<IContact *> *ret,const TType &type=0,const IPiece *p2=0)=0;
113  virtual void getContactList(FArray<const IContact *> *ret,const TType &type=0,const IPiece *p2=0) const=0;
115  virtual quint64 getContactCount(bool active,const TType &type=0,bool domainToo = false) const=0;
116 
118  virtual IContainer *getClumpAsPebbleContainer() =0;
120  virtual const IContainer *getClumpAsPebbleContainer() const=0;
121 
123  virtual const ITriPoly * getSurfaceDescription() const=0;
124 
125 #ifdef THREED
126  virtual const Quat & getSurfaceOrientation() const=0;
128  virtual DVect getSurfaceEuler() const=0;
129 #else
130  virtual double getSurfaceOrientation() const=0;
132 #endif
133 
135  virtual void getSurfaceRotMatrix(DMatrix<dim,dim> *) const=0;
136 
138  virtual void removeIPebble(IPebble *,IContainer *)=0;
140  virtual IPebble *createAndAddPebble(const double &rad,const DVect &pos,IContainer *,quint64 id=0)=0;
141 
143  virtual IClumpTemplate * getMyClumpTemplate() =0;
145  virtual const IClumpTemplate * getMyClumpTemplate() const =0;
147  virtual void resetClumpTemplate()=0;
149  virtual bool getIsClumpTemplate() const=0;
150 
153  virtual void calcAndSetInertialAttributes(const double &per=0.01)=0;
154 
156  virtual void setMoiFix(bool b)=0;
157  virtual bool isMoiFix()=0;
158  virtual bool isMoiFix() const=0;
159 
161  virtual void setVolumeNoScale(const double &d)=0;
162 
164  virtual double getEnclosingDiameter() const=0;
165 
166  virtual int getFragmentIndex() const=0;
167 
168 
171  virtual bool getFix(quint32 dof) const=0;
173  virtual QString getFixLabel() const=0;
175  virtual QVariant getPieceProperty(const QString &name,const IPiece *p=0) const=0;
177  virtual double getDensity() const=0;
179  virtual double getInertialMass() const=0;
181  virtual double getMass() const=0;
183  virtual DVect getContactForce() const=0;
185  virtual DAVect getContactMoment() const=0;
187  virtual DVect getAppliedForce() const=0;
189  virtual DAVect getAppliedMoment() const=0;
191  virtual DVect getUnbalancedForce() const=0;
193  virtual DAVect getUnbalancedMoment() const=0;
195  virtual double getLocalDamping() const=0;
197  virtual void setFix(quint32 dof,bool b)=0;
199  virtual bool setPieceProperty(const QString &name,const QVariant &v,IPiece *p=0) =0;
201  virtual void setDensity(const double &d)=0;
203  virtual void setContactForce(const DVect &v)=0;
205  virtual void setContactMoment(const DAVect &v)=0;
207  virtual void setAppliedForce(const DVect &v)=0;
209  virtual void setAppliedMoment(const DAVect &v)=0;
211  virtual void setLocalDamping(const double &d)=0;
213  virtual void scaleVolumePreserveMass(const double &d,bool checkState=true,bool lock=false)=0;
214  virtual void setFragmentIndex(int ind)=0;
216  virtual bool getIsIn(const DVect &) const = 0;
217 
218 
220 #ifdef TWOD
221  virtual double getAngDisplacement() const=0;
222 #endif
223  virtual DVect getCentroid() const=0;
224  virtual DVect getVelocity() const=0;
225  virtual DAVect getAngVelocity() const=0;
226  virtual DVect getDisplacement() const=0;
227  virtual double getVolume() const=0;
228  virtual Quat getOrient() const=0;
229 
230 #ifdef TWOD
231  virtual void setAngDisplacement(const double &v)=0;
232 #endif
233  virtual void setCentroid(const DVect &p)=0;
234  virtual void setVelocity(const DVect &p)=0;
235  virtual void setAngVelocity(const DAVect &p)=0;
236  virtual void setDisplacement(const DVect &v)=0;
237  virtual void setOrient(const Quat &q)=0;
238 #ifdef THREED
239  virtual DVect getEulerFromOrient() const=0;
240  virtual void setOrientFromEuler(const DVect3 &d)=0;
241 #endif
242 
243 
244  };
245 } // namespace pfc
246 // EoF
namespace Itasca
Definition: basememory.cpp:9
Interface for a TriPoly.
Definition: itripoly.h:39
DMatrix is a Matrix that defaults to type double...
Definition: matrix.h:719
Base class for items that will be stored in containers.
Definition: ithing.h:31
PFC namespace.
Definition: iballfluid.h:15
An array class that attempts to minimize unnecessary heap access.
Definition: ipiece.h:15
Definition: irigidbodymechanical.h:7
Interface for a clump template. This is the interface for a clump template. A clump template is compo...
Definition: iclumptemplate.h:25
Definition: ipiecemechanical.h:11
unsigned int TType
class type indicator
Definition: basedef.h:41
Definition: ipebble.h:23
A symmetric 2nd order tensor.
Definition: symtensor.h:19
Definition: ibodymechanical.h:13
Interface for a clump. This is the interface for a clump. A clump is a collection of pebbles that def...
Definition: iclump.h:37
Itasca Library standard namespace, specific to 2D or 3D.
Definition: icontactmodule.h:4
DAVect3 DAVect
Angular vector of doubles, either 2D or 3D.
Definition: dim.h:151
An array class that attempts to minimize unnecessary heap access.
Definition: farray.h:27
Interface for containers of IThings.
Definition: icontainer.h:23
DVect3 DVect
Vector of doubles, either 2D or 3D.
Definition: dim.h:145
3D quaternion utility class.
Definition: quat.h:103
Definition: ibody.h:20